Disons que si accéder à one.example.com doit toujours faire apparaître le tunnel, comment cela peut-il être exprimé avec OnDemandRules? Ou si two.example.com doit toujours démolir le tunnel?
La référence de clé de profil de configuration indique que ce dernier cas pourrait être traité en utilisant une DomainAction
valeur with NeverConnect
qui "ne déclencherait jamais une tentative de connexion VPN". Ce qui serait, bien que mieux que rien, pas exactement ce que je cherche - sauf que même cela ne fonctionne pas comme prévu (si j'ai bien compris la documentation):
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>DomainAction</key>
<string>NeverConnect</string>
<key>Domains</key>
<array>
<string>two.example.com</string>
</array>
</dict>
</array>
</dict>
<dict>
<key>URLStringProbe</key>
<string>http://a.url.that.returns.a.two.hundred.ok/</string>
<key>Action</key>
<string>Connect</string>
</dict>
</array>
D'après ce que je comprends, à mesure que le OnDemandRules
tableau de dictionnaires est évalué à chaque tentative de connexion, et si le périphérique accède à two.example.com, le premier dictionnaire correspondra et le tunnel ne sera pas activé . Si le périphérique accède à un autre domaine, par exemple one.example.com, le premier dictionnaire ne correspond pas, le deuxième dictionnaire correspond et le tunnel est activé. Cela ne fonctionne pas, cependant, et le tunnel n'est jamais évoqué. Si l'ordre est modifié et que le Connect
dictionnaire est en haut, le tunnel est toujours activé (y compris lors de l'accès à two.example.com ).
Ma compréhension de la situation est-elle complètement différente ou la documentation et / ou la mise en œuvre Apple sont-elles en quelque sorte brisées? Quelqu'un a-t-il proposé OnDemandRules qui peut être utilisé pour établir ou interrompre de manière sélective une connexion VPN en fonction des sites auxquels le périphérique accède?
Edit: Le tunnel peut être activé "par domaine" en utilisant les règles suivantes (cela suppose qu’aucun résolveur local n’est présent):
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>RequiredDNSServers</key>
<array>
<string>127.0.0.1</string>
</array>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
<key>Domains</key>
<array>
<string>one.example.com</string>
</array>
</dict>
</array>
<key>URLStringProbe</key>
<string>http://a.url.that.returns.a.two.hundred.ok/</string>
</dict>
<dict>
<key>Action</key>
<string>Disconnect</string>
</dict>
</array>
Cependant, cela échoue du fait que la résolution du nom de domaine échoue pour la première fois, ce qui entraîne l'échec du chargement de la page initiale dans Safari. Après le rechargement d'une page, la page est affichée et le tunnel est activé. Cela se produit même si, au lieu de 127.0.0.1, une adresse de serveur DNS réelle travaillant dans le tunnel est fournie. Y at-il un moyen de ne pas échouer la recherche initiale?
De plus, ce dernier dictionnaire ( Disconnect
) n'est jamais atteint et le tunnel reste actif pendant un certain temps. Comment puis-je faire le "contraire" de ce qui précède et démanteler le tunnel pour certains noms de domaine? Le DomainAction
de NeverConnect
ne fait pas cela.