Diga, si acceder a one.example.com siempre debe mostrar el túnel, ¿cómo se puede expresar con OnDemandRules? O si two.example.com siempre debe derribar el túnel?
El Perfil de configuración La referencia clave indica que este último caso podría manejarse de alguna manera utilizando un DomainAction
con un valor NeverConnect
que "nunca desencadenará un intento de conexión VPN". Lo que sería, aunque mejor que nada, no es exactamente lo que estoy buscando, excepto que incluso esto no funciona como se esperaba (si he entendido la documentación correctamente):
<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>
Según tengo entendido, como el conjunto de diccionarios OnDemandRules
se evalúa en cada intento de conexión, y si el dispositivo accede a two.example.com, el primer diccionario coincidirá y el túnel no ser criado Si el dispositivo accede a otro dominio, por ejemplo, one.example.com, el primer diccionario no coincidirá, el segundo diccionario coincidirá y se abrirá el túnel. Esto no funciona, sin embargo, y el túnel nunca se abre. Si se cambia la orden y el diccionario Connect
está en la parte superior, entonces siempre se abre el túnel (incluso cuando se accede a two.example.com ).
¿Mi comprensión de todo el asunto está muy lejos, o la documentación y / o la implementación de Apple están de alguna manera dañadas? ¿Alguien ha creado OnDemandRules que puedan usarse para activar o desactivar selectivamente una conexión VPN según los sitios a los que accede el dispositivo?
Editar: El túnel puede activarse "por dominio" mediante el uso de las siguientes reglas (esto supone que no hay un local de resolución presente):
<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>
Sin embargo, esto se debe al hecho de que la resolución del nombre de dominio falla primero, lo que hace que la carga de la página inicial falle en Safari. Después de volver a cargar la página, se muestra la página y se abre el túnel. Esto sucede incluso si en lugar de 127.0.0.1 se proporciona una dirección de servidor DNS real, que funciona detrás del túnel. ¿Hay alguna manera de no fallar en la búsqueda inicial?
Además, este último diccionario ( Disconnect
) nunca se alcanza, y el túnel permanece activo durante algún tiempo. ¿Cómo puedo hacer el "opuesto" de lo anterior y derribar el túnel para algunos nombres de dominio? El DomainAction
de NeverConnect
no hace esto.