Di ', se l'accesso a one.example.com dovrebbe sempre far apparire il tunnel, come può essere espresso con OnDemandRules? O se two.example.com dovrebbe sempre abbattere il tunnel?
Profilo di configurazione Riferimento chiave afferma che quest'ultimo caso potrebbe essere in qualche modo gestito utilizzando un DomainAction
con valore NeverConnect
che "non innescherà mai un tentativo di connessione VPN". Quale sarebbe, anche se meglio di niente, non esattamente quello che sto cercando - tranne che anche questo non funziona come previsto (se ho capito bene la documentazione):
<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>
La mia comprensione è che come la matrice OnDemandRules
di dizionari viene valutata ad ogni tentativo di connessione e se il dispositivo accede a two.example.com, il primo dizionario corrisponderà e il tunnel non essere educato Se il dispositivo accede a un altro dominio, ad esempio one.example.com, il primo dizionario non corrisponde, il secondo dizionario corrisponderà e il tunnel verrà visualizzato. Ciò non funziona, tuttavia, e il tunnel non viene mai visualizzato. Se l'ordine è cambiato e il dizionario Connect
è in cima, il tunnel viene sempre visualizzato (anche quando si accede a two.example.com ).
La mia comprensione dell'intera faccenda è ben lontana, oppure la documentazione e / o l'implementazione di Apple sono in qualche modo infranti? Qualcuno ha escogitato OnDemandRules che può essere utilizzato per far apparire o abbattere selettivamente una connessione VPN in base ai siti ai quali il dispositivo sta accedendo?
Modifica: il tunnel può essere richiamato "per dominio" utilizzando le seguenti regole (ciò presuppone che non sia presente un resolver locale):
<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>
Ciò tuttavia risente del fatto che la risoluzione del nome di dominio non riesce prima, causando il fallimento del caricamento iniziale della pagina in Safari. Dopo che una pagina è stata ricaricata, viene visualizzata la pagina e il tunnel viene visualizzato. Ciò accade anche se al posto di 127.0.0.1 viene fornito un indirizzo server DNS reale e funzionante dietro il tunnel. C'è un modo per non fallire nella ricerca iniziale?
Inoltre, il secondo dizionario ( Disconnect
) non viene mai raggiunto e il tunnel rimane attivo per qualche tempo. Come posso fare il "contrario" di quanto sopra e abbattere il tunnel per alcuni nomi di dominio? Il DomainAction
di NeverConnect
non lo fa.