È invece possibile attivare la VPN "always-on" attivando l'opzione "Connetti su richiesta" tramite un profilo VPN sia in iOS che OSX / MacOS.
Ad esempio, alcuni fornitori di VPN commerciali lo fanno.
Tuttavia ciò si applica solo a qualsiasi tipo di VPN eseguita / configurata tramite il client nativo, e non a VPN di terze parti come OpenVPN.
Il comportamento delle VPN Connect on demand è che non appena un pacchetto TCP / IP tenta di lasciare l'iDevice, la VPN aumenta.
L'ho usato con VPNs con IPsec con IKEv1 in iOS 8 e iOS 9, quindi il requisito IKEv2 non sembra applicabile. Lo usavo anche senza in modalità supervisa.
Il file del profilo è un file xml, che può essere scritto a mano o con l'aiuto di strumenti Apple. Il file deve avere un'estensione .mobileconfig e deve essere caricato dal browser Safari in iOS.
Ad esempio, sto utilizzando questo file, per un tunnel VPN completo, IPSec "Cisco" con password di gruppo e autenticazione utente XAUTH.
Ho inserito "Cisco", perché nel mio caso i server VPN sono rispettivamente un firewall PfSense e un server Debian Linux.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>IPSec</key>
<dict>
<key>AuthenticationMethod</key>
<string>SharedSecret</string>
<key>LocalIdentifier</key>
<string>*group_name*</string>
<key>LocalIdentifierType</key>
<string>KeyID</string>
<key>RemoteAddress</key>
<string>*11.11.11.11*</string>
<key>SharedSecret</key>
<data>
*ksjksdjksdf*
</data>
<key>XAuthEnabled</key>
<integer>1</integer>
<key>XAuthName</key>
<string>*username*</string>
<key>XAuthPassword</key>
<string>*password*</string>
<key>DisconnectOnIdle</key>
<integer>0</integer>
<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>Connect</string>
</dict>
</array>
</dict>
<key>IPv4</key>
<dict>
<key>OverridePrimary</key>
<integer>1</integer>
</dict>
<key>PayloadDescription</key>
<string>Configures VPN settings, including authentication.</string>
<key>PayloadDisplayName</key>
<string>*VPN (MyHOME)*</string>
<key>PayloadIdentifier</key>
<string>*com.myhome.pt.vpn*</string>
<key>PayloadOrganization</key>
<string>*MY-HOME*</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>D758D99C-7CCE-44DC-8CAE-B2A5FFC86985</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>Proxies</key>
<dict/>
<key>UserDefinedName</key>
<string>*VPN My-HOME*</string>
<key>VPNType</key>
<string>IPSec</string>
</dict>
</array>
<key>PayloadDescription</key>
<string>*VPN provisioning for My-HOME*</string>
<key>PayloadDisplayName</key>
<string>*MY-HOME*</string>
<key>PayloadIdentifier</key>
<string>*com.myhome.pt*</string>
<key>PayloadOrganization</key>
<string>*MY-HOME*</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>A8E086BE-C9B1-4EA8-9E6A-F25001E0A293</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
Come sospetti correttamente, ci sono aspetti negativi di questo approccio. Mentre il profilo connect on demand è attivo, i normali risvegli per il recupero dei dati non sembrano essere fatti (almeno fino a iOS 9, devono ancora testare iOS 10), e come tali le chiamate FaceTime non vengono sempre ricevute mentre il dispositivo sta "dormendo" ").
La documentazione Apple su queste direttive è qui . "IPSec Dictionary Keys" è di particolare interesse.