VPN on demand auf iOS Geräten (iPhone)
Verfasst: 26. Nov 2015 16:00
Hallo Zusammen,
nachdem es mich einige Tage Recherche gekostet hat, möchte ich Euch gerne an meiner Lösung für den Remotezugang (aus dem Internet) teilhaben lassen. Ich bin kein iOS Entwickler und kann deshalb wahrscheinlich nicht alle Details erklären, aber wenn Ihr Fragen habt ... immer her damit.
Herrausforderung:
Ich möchte gerne auch außerhalb meines WLANs auf meine Hausautomatisierungsumgebung unter openHab zugreifen, habe aber deutliche Skrupel alles direkt ins öffentliche Netz zu hängen. Deshalb nutze ich schon lange den VPN Client auf meinem iPhone. Bisher muss ich nach erfolgreicher Einrichtung der VPN Verbindung vor jedem Zugriff via App oder Browser die VPN Verbindung manuell starten. Ich finde das unschön, zum einen bin ich faul und zum anderen ist meine Frau davon nicht begeistert . Ich hatte gelesen, dass es unter iOS möglich sein soll, automatisch und nur bei Bedarf eine VPN Verbindung aufzubauen. Optimal ... nur lässt sich das nicht über das Endgerät konfigurieren und auch die Quellen im Internet sind rar. Folgende Seiten haben mir entscheidend geholfen: Ich beschreibe hier nicht, wie man eine VPN Verbindung herstellt, dazu sollte man in der Lage sein, wenn man mittels Configprofilen an seinen Apple Devices herumbastelt . Wenn dabei jemand Hilfe braucht, einfach melden.
Lösung:
Ich setze hinter meinem Kabelmodem/Router einen Linux VPN Server ein, der verschiedene Protokolle spricht. Ich habe mich für L2TP/IPSec entschieden, da es PreShared Key unterstützt und eine hohe Verschlüsselungstiefe anbietet.
1) Zuerst habe ich sichergestellt, dass die Verbindung manuell über das iPhone angelegt auch funktioniert. Also sauber auf- und abbaut und auch alle Netzsegmente die ich erreichen möchte auch erreichbar sind. --> Check
2) Dann habe ich ein Template für die mobilconfig gebaut. Bei mir waren das x-Versuche, da mir die Syntax nicht klar war und ich auch keine Möglichkeit hatte die Datei zu debuggen. Also Try & Error. Das Template sieht jetzt wie folgt aus (die Platzhalterbeschreibung findet Ihr weiter unten):
3) Um die Config zu installieren, schickt Ihr Euch die Datei in einer EMail an einen Mailaccount den Ihr auf dem iPhone abfragen könnt.
4) Die Installation ist dann ganz einfach. Einfach auf den Dateianhang gehen und öffnen. Ihr werdet dann gefragt, ob das Profil installiert werden soll.
Damit ist das Profil installiert und sobald Ihr im Browser oder eine App die konfigurierten Hosts erreichen möchte, wird die VPN Verbindung aufgebaut und nach einer gewissen Zeit (Genaue Zeitspanne kenne ich noch nicht) automatisch wieder abgebaut.
Problematisch ist noch der Timeout in den Apps. Da das Aufbauen der VPN Strecke eine gewisse Zeit benötigt, kann es sein, dass die eine oder anderen App in einen Timeout läuft und ein zweiter Ladeversuch vorgenommen werden muss.
Ich hoffe das Vorgehen funktioniert bei Euch auch und ich freue mich über Feedback oder Fragen.
Gruß,
Seppy
nachdem es mich einige Tage Recherche gekostet hat, möchte ich Euch gerne an meiner Lösung für den Remotezugang (aus dem Internet) teilhaben lassen. Ich bin kein iOS Entwickler und kann deshalb wahrscheinlich nicht alle Details erklären, aber wenn Ihr Fragen habt ... immer her damit.
Herrausforderung:
Ich möchte gerne auch außerhalb meines WLANs auf meine Hausautomatisierungsumgebung unter openHab zugreifen, habe aber deutliche Skrupel alles direkt ins öffentliche Netz zu hängen. Deshalb nutze ich schon lange den VPN Client auf meinem iPhone. Bisher muss ich nach erfolgreicher Einrichtung der VPN Verbindung vor jedem Zugriff via App oder Browser die VPN Verbindung manuell starten. Ich finde das unschön, zum einen bin ich faul und zum anderen ist meine Frau davon nicht begeistert . Ich hatte gelesen, dass es unter iOS möglich sein soll, automatisch und nur bei Bedarf eine VPN Verbindung aufzubauen. Optimal ... nur lässt sich das nicht über das Endgerät konfigurieren und auch die Quellen im Internet sind rar. Folgende Seiten haben mir entscheidend geholfen: Ich beschreibe hier nicht, wie man eine VPN Verbindung herstellt, dazu sollte man in der Lage sein, wenn man mittels Configprofilen an seinen Apple Devices herumbastelt . Wenn dabei jemand Hilfe braucht, einfach melden.
Lösung:
Ich setze hinter meinem Kabelmodem/Router einen Linux VPN Server ein, der verschiedene Protokolle spricht. Ich habe mich für L2TP/IPSec entschieden, da es PreShared Key unterstützt und eine hohe Verschlüsselungstiefe anbietet.
1) Zuerst habe ich sichergestellt, dass die Verbindung manuell über das iPhone angelegt auch funktioniert. Also sauber auf- und abbaut und auch alle Netzsegmente die ich erreichen möchte auch erreichbar sind. --> Check
2) Dann habe ich ein Template für die mobilconfig gebaut. Bei mir waren das x-Versuche, da mir die Syntax nicht klar war und ich auch keine Möglichkeit hatte die Datei zu debuggen. Also Try & Error. Das Template sieht jetzt wie folgt aus (die Platzhalterbeschreibung findet Ihr weiter unten):
Code: Alles auswählen
<?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>ConsentText</key>
<dict>
<key>default</key>
<string>openHab VPN</string>
</dict>
<key>PayloadContent</key>
<array>
<dict>
<key>IPSec</key>
<dict>
<key>AuthenticationMethod</key>
<string>SharedSecret</string>
<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
<dict>
<key>InterfaceTypeMatch</key>
<string>WiFi</string>
<key>SSIDMatch</key>
<array>
<string>MEINESSID1</string>
<string>MEINESSID2</string>
<string>MEINESSID3</string>
</array>
<key>Action</key>
<string>Disconnect</string>
</dict>
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>Domains</key>
<array>
<string>HOST1NURÜBERVPNERREICHBAR.local</string>
<string>*.HOST2NURÜBERVPNERREICHBAR.local</string>
</array>
<key>RequiredURLStringProbe</key>
<string>http://HOSTNURÜBERVPNERREICHBAR.local/SITENURÜBERVPNERREICHBAR</string>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
</dict>
</array>
</dict>
</array>
<key>LocalIdentifierType</key>
<string>KeyID</string>
<key>SharedSecret</key>
<data>DEINSHAREDSECRET
</data>
</dict>
<key>IPv4</key>
<dict>
<key>OverridePrimary</key>
<integer>1</integer>
</dict>
<key>PPP</key>
<dict>
<key>AuthName</key>
<string>VPNBENUTZER</string>
<key>AuthPassword</key>
<string>VPNPASSWORT</string>
<key>CCPEnabled</key>
<integer>1</integer>
<key>CCPMPPE128Enabled</key>
<integer>1</integer>
<key>CCPMPPE40Enabled</key>
<integer>1</integer>
<key>CommRemoteAddress</key>
<string>EXTERNERHOSTNAME</string>
</dict>
<key>PayloadDescription</key>
<string>BESCHREIBUNG</string>
<key>PayloadDisplayName</key>
<string>DISPLAYNAME</string>
<key>PayloadIdentifier</key>
<string>com.apple.vpn.managed.57E36D73-0B2F-4D93-BA58-077A9A684A2A</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>6CBFBCA4-CC7E-4FC4-918E-C4A9A18E8C9A</string>
<key>PayloadVersion</key>
<real>1</real>
<key>Proxies</key>
<dict>
<key>HTTPEnable</key>
<integer>0</integer>
<key>HTTPSEnable</key>
<integer>0</integer>
</dict>
<key>UserDefinedName</key>
<string>openHab VPN</string>
<key>VPNType</key>
<string>L2TP</string>
<key>VendorConfig</key>
<dict/>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>openHab VPN</string>
<key>PayloadIdentifier</key>
<string>homevpn.F56D036B-CD9A-42B3-B3B1-F6FD4DC1AE94</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>2C5CB8DF-6E9A-4029-ACB4-E2DA680C867C</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
- MEINESSIDX: Die SSID der WLAN Netze, in denen keine Verbindung via VPN aufgebaut werden soll.
- HOSTXNURÜBERVPNERREICHBAR.local: Die Hostnamen die den Aufbau einer Verbindung initiieren sollen.
- http://HOSTNURÜBERVPNERREICHBAR.local/S ... ERREICHBAR: Eine Site die nur bei aktiver VPN Verbindung erreichbar ist und einen HTTP Response 200 zurückgibt.
- DEINSHAREDSECRET: Das Shared Secret aus der VPN Konfiguration.
- VPNBENUTZER: Der Benutzername aus der VPN Konfiguration.
- VPNPASSWORT: Das Passwort ( ACHTUNG in Klartext. Also die Datei an einem sicheren ORT ablegen) aus der VPN Konfiguration.
- EXTERNERHOSTNAME: Der externe Hostname der Firewall über die die VPN Verbindung augebaut wird.
- BESCHREIBUNG: Eine Freitextbeschreibung.
- DISPLAYNAME: Ein passender Name.
3) Um die Config zu installieren, schickt Ihr Euch die Datei in einer EMail an einen Mailaccount den Ihr auf dem iPhone abfragen könnt.
4) Die Installation ist dann ganz einfach. Einfach auf den Dateianhang gehen und öffnen. Ihr werdet dann gefragt, ob das Profil installiert werden soll.
Damit ist das Profil installiert und sobald Ihr im Browser oder eine App die konfigurierten Hosts erreichen möchte, wird die VPN Verbindung aufgebaut und nach einer gewissen Zeit (Genaue Zeitspanne kenne ich noch nicht) automatisch wieder abgebaut.
Problematisch ist noch der Timeout in den Apps. Da das Aufbauen der VPN Strecke eine gewisse Zeit benötigt, kann es sein, dass die eine oder anderen App in einen Timeout läuft und ein zweiter Ladeversuch vorgenommen werden muss.
Ich hoffe das Vorgehen funktioniert bei Euch auch und ich freue mich über Feedback oder Fragen.
Gruß,
Seppy