[HowTo] VPNonDemand zusammen mit der Fritzbox

[HowTo] VPNonDemand zusammen mit der Fritzbox

Wie kriegt man VPNonDemand unter iOS mit der FritzBox zum laufen? Hier ein kleiner Waschzettel zum umsetzen. Jetzt auch wieder lauffähig unter iOS 9 🙂

Durch die Freakshow, vorallem durch Clemens Schrimpe (Twitter: @csch42 ) der das Thema dort ansprach/aufbrachte.

Wenn man jetzt den iPhone Configurator anschmeißt/oder in iOS einrichtet merkt man das das VPN nur funktioniert wenn man es vorher manuell aufgebaut hat.

VPNonDemand funktioniert (zumindestens nach dem iPhone Configurator) nur mit Zertifikaten (z.b. wenn man als Gegenstelle Strongswan nutzt).

Nach etwas Recherche fand ich diesen Blog und auch  “Configuration Profile Key Reference” von Apple.

Zuerst hatte ich mit der Vorlage Probleme (die aber nicht an der Vorlage lagen wie ich später merkte; den genauen Fehler konnte ich jedoch nicht identifizieren) z.b.: das ich entweder die Fehlermeldung bekam “ungültiges Profil” oder “Authenifizierung fehlgeschlagen”.

Warum der erste Fehler auftrat ist mir ein Rätsel.

Zu Fehler Nr.2 war der Fehler etwas kurios. Obwohl zum Test das Passwort circa so aussah 9T6pxfZKVgjW9ThLG , also ohne Sonderzeichen. Dies führte (warum auch immer) zu Problemen.

Nach Änderung auf ein neues Passwort lief es ,sogar mit Sonderzeichen!

Beim einrichten unter iOS störte mich die Sache das ich Benutzername und Passwort erneut eingeben musste, die man vorher in der FB angelegt hatte. Nach etwas stöbern in der “Configuration Profile Key Reference” und Discussions-Forum jeweils von Apple fand ich auch hier zu die Lösung (XAuth).

Wichtiger Hinweis: Nach dem Einspielen der mobileconfig MUSS das von einmal von Hand aufgebaut werden. Scheint so ein iOS-Ding zu sein 😉

//Update 02.04.2015

Hinweis Nr. 2.: Ihr kopiert den Inhalt unten aus der Codebox in einen Texteditor und speichert es als .mobileconfig ab. Dann sich z.b.: per Email aufs iOS-Device schicken. Anklicken und der Rest erklärt iOS dann.

//Update Ende

//Update 26.09.2015

Jetzt funktioniert es wieder mit iOS 9. Es dürfen keine IP’s mehr angegeben werden sondern nur Domains wie z.b. heise.de oder für lokale Adresse sowas wie *.local oder ritz.box. Hatte es vor kurzem gefunden u.a. bei Apple und auch danke an den Hinweis aus den Kommentaren von TF.
//Update Ende

Genug der Vorgeschichte hier das Skript inkl. Kommentare. Wenn jemand Verbesserungen weiß ruhig in die Kommentare rein und ich ergänze es.

Vielen Dank an:

  •  @jollyjinx für seine Anpassungen/Verbesserungen an der Config. Waren ein paar unsinnige Einträge drin, die ich auch mangels seinem Hintergrundwissen zum Aufbau der Config, einfach übernommen hatte 😉  Ist ja nicht mein täglich Brot 😉
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<!-- Danke an @jollyjinx fürs seine Verbesserungen an der Config -->
<dict>
	<key>PayloadContent</key>
	<array>
		<dict>
			<key>IPSec</key>
		</dict><dict>
			<key>AuthenticationMethod</key>
			<string>SharedSecret</string>
			<key>XAuthEnabled</key>
				<integer>1</integer>
				<!-- Hier fügt ihr euren Benutzernamen den ihr in der FB eingerichtet habt -->
				<key>XAuthName</key>
				<string>Benutzer_VPN</string>
				<!-- Hier fügt ihr euer Passwort ein das ihr mit dem Benutzer eingerichtet habt -->
				<key>XAuthPassword</key>
				<string>Benutzer_Passwort</string>
				<key>OnDemandEnabled</key>
			<integer>1</integer>
			<key>OnDemandRules</key>
			<array>
			<!-- In diesem Abschnitt richtet ihr ein in welchem WLAN kein VPN aufgebaut wird -->
			<dict>
				<key>InterfaceTypeMatch</key>
				<string>WiFi</string>
				<key>SSIDMatch</key>
				<array>
				<string>Bunti</string>
				</array>
				<key>Action</key>
				<string>Disconnect</string>
			</dict>
			<!-- Hier stellt man ein bei welchen Domains eine VPN aufgebaut wird. Für lokale Adressen aus dem eignen Netzwerk z.b. *.local verwenden oder *.fritz.box -->
			<dict>
				<key>Action</key>
				<string>EvaluateConnection</string>
				<key>ActionParameters</key>
				<array>
				<dict>
					<key>Domains</key>
					<array>
					<string>*.local</string>
					<string>*.fritz.box</string>
                                        <string>fritz.box</string>
					</array>
					<key>DomainAction</key>
					<string>ConnectIfNeeded</string>
				</dict>
				</array>
			</dict>
			</array>
			<!-- Als LocalIdentifier eueren VPN Benutzernamen aus der FB -->
			<key>LocalIdentifier</key>
			<string>Arnaud_VPN</string>
			<key>LocalIdentifierType</key>
			<string>KeyID</string>
			<!-- RemoteAddress ist euere DynDNS oder MyFritz-Adresse wo ihr eure FB erreicht -->
			<key>RemoteAddress</key>
			<string>xxxxxxxx.myfritz.net</string>
			<!-- Der SharedSecret gibt die FB vor. Wird u.a. beim einrichten angezeigt -->
			<key>SharedSecret</key>
			<string>SharedSecret_aus_der_FB</string>
			</dict>
			<!-- Die PayloadDescription: Hier könnt ihr eine kurze Beschreibung des Profils hinterlegen -->
			<key>PayloadDescription</key>
			<string>Meine VPNonDemand-Profil</string>
			<!-- PayloadDisplayName: Der Name eueren Profils -->
			<key>PayloadDisplayName</key>
			<string>VPNonDemand</string>
			<!-- PayloadIdentifier: Hier wird ein beliebiger PayloadIdentifier eingefügt / Unterschiedlich falls mehrere VPN-Endpunkte in einer mobileconfig sind-->
			<key>PayloadIdentifier</key>
			<string>MeinIdentifier1</string>
			<!-- PayloadOrganization: Kann man vergeben muss man aber nicht. Hier im Beispiel VPN @Home -->
			<key>PayloadOrganization</key>
			<string>VPN @Home</string>
			<key>PayloadType</key>
			<string>com.apple.vpn.managed</string>
			<!-- PayloadDUUID: Ihr fügt man eine eindeutige UUID ein -->
			<key>PayloadUUID</key>
			<string>99D9B992-2B9D-4E8D-9F72-7F3E5E1892D0</string>
			<key>PayloadVersion</key>
			<integer>1</integer>
			<!-- UserDefineName: Eine Beschreibung die man vergeben kann -->
			<key>UserDefinedName</key>
			<string>VPN @Home</string>
			<key>VPNType</key>
			<string>IPSec</string>
		</array></dict>

	<key>PayloadDescription</key>
	<string>VPNonDemand@Home</string>
	<key>PayloadDisplayName</key>
	<string>VPNonDemand</string>
	<!-- PayloadIdentifier: Hier wird ein beliebiger PayloadIdentifier eingefügt/ Unterschiedlich falls mehrere VPN-Endpunkte in einer mobileconfig sind-->
	<key>PayloadIdentifier</key>
	<string>MeinIdentifier2</string>
	<!-- PayloadOrganization: Eine Organisation die man vergeben kann -->
	<key>PayloadOrganization</key>
	<string>VPN @Home</string>
	<key>PayloadType</key>
	<string>Configuration</string>
	<!-- PayloadUUID: Ihr fügt man eine andere eindeutige UUID ein -->
	<key>PayloadUUID</key>
	<string>51D88739-99D9-48B3-9C34-D2211D75C1EB</string>
	<key>PayloadVersion</key>
	<integer>1</integer>
</dict>
</plist>

Viel Spass 🙂