Seite 1 von 1

VPN on demand auf iOS Geräten (iPhone)

Verfasst: 26. Nov 2015 16:00
von seppy
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 :lol: und zum anderen ist meine Frau davon nicht begeistert :mrgreen: . 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 :roll: . 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.
Proxies habe ich in meiner Kofiguration nicht benötigt. Die angepasste Datei wird als "NAME.mobileconfig" abgespeichert. Das Template kann hier auch heruntergeladen werden.
openHabVPN.txt
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.

Bild

4) Die Installation ist dann ganz einfach. Einfach auf den Dateianhang gehen und öffnen. Ihr werdet dann gefragt, ob das Profil installiert werden soll.

Bild

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

Re: VPN on demand auf iOS Geräten (iPhone)

Verfasst: 26. Nov 2015 20:11
von Cyrelian
WOW, sehr nice! :shock: .....muss ich doch direkt mal testen :D

Re: VPN on demand auf iOS Geräten (iPhone)

Verfasst: 8. Mai 2016 12:18
von michelm
Super, klappt wunderbar!

Re: VPN on demand auf iOS Geräten (iPhone)

Verfasst: 8. Mai 2016 21:20
von seppy
Freut mich!


openhabforum.de

Re: VPN on demand auf iOS Geräten (iPhone)

Verfasst: 16. Sep 2016 12:05
von Chris81
Hallo ich habe ein Iphone 6 und IOS10 installiert,
mein Problem ist das sich die Datei, die ich mir zu sende sich nicht installiert!! liegt es am IOS10 oder sonst eine Idee?
Mit freundlcieh Grüßen
Chris

Re: VPN on demand auf iOS Geräten (iPhone)

Verfasst: 16. Sep 2016 17:53
von seppy
Hi,
ich kann das Problem noch nicht nachstellen, da ich noch kein IOS 10 Device habe. Sobald ich eins im Zugriff habe werde ich testen.

Gruß
Seppy


openhabforum.de