iOS VPN on-demand mit Fritzbox


Diese Anleitung beschreibt, wie man ein VPN auf dem iPhone/iPad konfiguriert, welches automatisch bei Bedarf aktiviert wird (on-demand).

Man muss also nicht mehr manuell den VPN Tunnel einschalten bevor man eine Verbindung zu einem geschützten Server aufbaut. Es reicht die Angabe des Servernamens (bspw. im Browser) und die nötige VPN Verbindung wird automatisch im Hintergrund aktiviert.

Verwendete Techniken

VPN Konfigurationsmöglichkeiten

VPN Verbindungen werden am iPhone entweder manual eingegeben (am Gerät selbst) oder per Konfigurationsdatei (auch “Profil” genannt) aufgebracht. Die On-Demand Funktionalität funktioniert allerdings hier nur mit Hilfe eines Profils.

Mit dem kostenlosen Tool “Apple Configurator” kann man sehr einfach ein derartiges Konfigurationsprofil für eine VPN Konfiguration erstellen.

Es gibt derzeit zwei Einschränkungen bei der Nutzung von Apple Configurator:

  1. on-demand rules werden in der UI lediglich für zertifikatsbasierte Authorisierungen  ermöglicht
  2. das Tool unterstützt noch nicht die Möglichkeiten der regelbasierten Aktivierung/Deaktivierung des VPN Zugangs. Das ist bisher MDM Lösungen vorbehalten (oder man editiert selbst die Konfigurationsdatei)

Punkt 1) ist nicht tragisch. Die nötigen Änderungen in der Konfigurationsdatei sind minimal und können nachträglich eingefügt werden.

Punkt 2) wird nicht zwingend für eine Anbindung an ein Heimnetz benötigt. Im Gegenteil erlaubt die hier verwendete und noch offiziellunterstützte on-demand Regeln eine sehr einfache Konfiguration. Da hier auch die Anbindung an ein Heimnetz ohne MDM beschrieben wird, ist es sogar von Vorteil, da weniger Textstellen geändert werden müssen.

Umsetzung mit einer Fritzbox

Der Einsatzbereich in dieser Anleitung ist der Zugang zum privaten Netz hinter einer Fritzbox. Es kann aber auch jeder andere VPN Server mit IPsec genutzt werden.

Die FritzBox hat allerdings einige positive Eigenschaften, die die VPN Konfiguration sehr einfach machen:

  • eine eigener Domain-Name für alle Geräte im Heimnetz wird bereitgestellt: “fritz.box”. Man muss also seine Rechner nicht per IP ansprechen, sondern kann direkt mit den Rechnernamen arbeiten. Hat man dem Rechner bspw. den Namen “Butterdose” gegeben, erreicht man ihn im Heimnetz auch unter butterdose.fritz.box
  • vergiebt man im DHCP Dienst der Fritzbox eigene Namen, werden diese statisch und man kann den Rechner immer unter diesem Namen erreichen, auch wenn ich den Computernamen im am Rechner selbst später ändere.
    Zusammen mit der Eigenschaft DHCP Adressen fest zu vergeben kann man so einen sehr einfachen DNS Dienst der Fritzbox selbst für Server nutzen.
  • um nun also Server innerhalb des Heimnetzes zu erreichen, soll ein Aufruf bspw. im Browser mittels “mein_homeserver.fritz.box” automatisch die VPN Verbindung zu unserem Heimnetz aufbauen.

Wenn man keine FritzBox nutzt, sollte man darauf achten im internen Netz auch einen Namendienst (DNS Server) bereitzustellen.

Konfiguration erstellen

Die iOS Konfigurationsdateien sind reine XML Textdateien. Daher könnten sie theoretisch auch komplett per Hand erstellt werden. Aber wer will das schon. Hier daher zwei Hilfestellungen um schnell zu einem Ergebnis zu kommen.

Apple Configurator

Der schnellste Weg geht über das kostenlose Programm “Apple Configurator” für macOS:

Profil erzeugen

Mit Apple Configurator wird also ein VPN IPSec Profil erzeugt, welches. Dazu wird der Apple Configurator gestartet und ein neues Profil angelegt (Menüoption). Wir müssen hier keine Geräte verwalten und benötigen  lediglich die Funktion ein Konfigurationsprofil zu editieren.

Zwei Konfigurationsbereiche sind erforderlich

Allgemeine Angaben

Der Bereich “Allgemein” enthält eine Beschreibung der Konfiguration an sich

  • der Name wird unter System->Allgemein->Profile&Geräteverwaltung angezeigt
  • ID kann frei gewählt werden und wird üblicherweise in umgekehrter Domain-Notation gewählt

VPN Angaben

Hier wird die eigentlich VPN “Payload” definiert. Auch bei dieser sind einige grundsätzliche Angaben nötig:

  • der Verbindungsname wird in den Systemeinstellungen bei VPN angezeigt, wenn mehr als eine VPN Verbindung konfiguriert sind.
  • Verbindungs-Typ: für fast alle gängigen Router im Heimbereich und gängige Firewalls unterstützen IPsec (IKEv1) und das ist auch die Methode die für die FritzBox gewählt werden muss. Was auch vorkommen kann ist “Eigenes SSL” für eine OpenVPN Anbindung (wird aber von der FritzBox nicht unterstützt und soll hier nur als Beispiel für Interessierte dienen). PPTP gilt allgemein als nicht mehr sicher und IKEv2 wird leider noch zu wenig unterstützt. Würde der Router IKEv2 unterstützen, wäre es der zu bevorzugenden Verbindungs-Typ.
  • Account: der Benutzername der auch auf der FritzBox angelegt wurde.
  • Server: der DNS Name über den die FritzBox aus dem Internet heraus erreichbar ist. In der Regel dürfte das ein DynDNS-Anbieter Name sein. In Deutschland ist bspw. selfhost.de bekannt.
  • Passwort: BITTE FREILASSEN. Das hat zum Effekt, dass das Passwort bei der Einrichtung direkt am Gerät eingegeben werden muss. Der Vorgang ist einmalig und erhöht die Sicherheit massiv, da das Passwort so nicht im Klartext in dem Konfigurationsprofil gespeichert wird.
  • Geräte-Authentifizierung: Shared Secret (auch Pre-Shared-Key/PSK genannt)
  • Gruppenname: bei der FritzBox ist Gruppenname und Benutzername identisch
  • Schlüssel: die Angabe aus der FritzBox Konfiguration (pro Benutzer unterschiedlich)

“on-demand” Anpassung

Nach erfolgreicher Konfiguration speichert man das Konfigurationsfile einfach ab und öffnet es nun in einem Text Editor. Dort bitte folgende Textstelle suchen:

<key>IPSec</key>
<dict>
<key>AuthenticationMethod</key>
<string>SharedSecret</string>

Darunter die On-Demand Config einfügen, hier als Beispiel mit einer internen IP, der FritzBox und dem DynDNS Namen:

<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandMatchDomainsAlways</key>
<array>
    <string>fritz.box</string>
</array>

Nun ist die Datei fertig und kann an das iPhone/iPad übertragen werden.

Manueller Weg

Will man nicht den Apple Configurator verwenden um selbst ein Profil zu erzeugen, kann man folgende Textdatei übernehmen und per Hand die nötigen Änderungen vornehmen.

Beispieldatei

<?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>USER_ACCOUNT</string>
				<key>LocalIdentifierType</key>
				<string>KeyID</string>
				<key>OnDemandEnabled</key>
				<integer>1</integer>
				<key>OnDemandMatchDomainsAlways</key>
				<array>
					<string>fritz.box</string>
				</array>
				<key>RemoteAddress</key>
				<string>MY_EXTERNAL_DNS_NAME</string>
				<key>SharedSecret</key>a
				<data>
				TlVqNEtpSDZMZ3lOdTVaMg==
				</data>
				<key>XAuthEnabled</key>
				<integer>1</integer>
				<key>XAuthName</key>
				<string>USER_ACCOUNT</string>
				<key>XAuthPassword</key>
				<string>)hju=C:xs8A(4z4Wt7F8j]ru</string>
			</dict>
			<key>IPv4</key>
			<dict>
				<key>OverridePrimary</key>
				<integer>1</integer>
			</dict>
			<key>PayloadDescription</key>
			<string>Configures VPN settings</string>
			<key>PayloadDisplayName</key>
			<string>VPN</string>
			<key>PayloadIdentifier</key>
			<string>com.apple.vpn.managed.CA460932-0FB9-4B76-842C-C23252973B68</string>
			<key>PayloadType</key>
			<string>com.apple.vpn.managed</string>
			<key>PayloadUUID</key>
			<string>A47986C7-AE11-4A49-955A-E33F0BF79BF5</string>
			<key>PayloadVersion</key>
			<real>1</real>
			<key>Proxies</key>
			<dict/>
			<key>UserDefinedName</key>
			<string>Home</string>
			<key>VPNType</key>
			<string>IPSec</string>
		</dict>
	</array>
	<key>PayloadDisplayName</key>
	<string>Homebox</string>
	<key>PayloadIdentifier</key>
	<string>com.private.homebox</string>
	<key>PayloadRemovalDisallowed</key>
	<false/>
	<key>PayloadType</key>
	<string>Configuration</string>
	<key>PayloadUUID</key>
	<string>F5BFB267-8501-4988-9E45-32E0807C7130</string>
	<key>PayloadVersion</key>
	<integer>1</integer>
</dict>
</plist>

Konfigurationsparameter

Die hervorgehobenen Einträge sind die passenden Parameter zu den jeweiligen Keys:

  • Local Identifier: Name des Fritzbox Nutzers mit VPN ZugangShare-Secret: aus der FritzBox VPN Konfiguration
  • XAuthName: Nochmal der Name des VPN Nutzers
  • XAuthPassword: Das Passwort des FritzBox Nutzers. Bitte nicht verwenden! Ist hier nur zur Vervollständigung aufgeführt. Bitte also die <key> Zeile und die <string>Zeile dazu löschen!
  • Payload Identifier: eine eindeutige ID. Kann zufällig vergeben werden, das Format muss eingehalten werden.
  • Payload UUID: eine eindeutige ID. Kann zufällig vergeben werden, das Format muss eingehalten werden.

Den Payload gibt es zweimal und sie müssen sich unterscheiden. Einmal wird die Konfigurationsdatei/das Profile identifiziert und einmal der VPN Payload.

Nachteile

Bei beiden Varianten kann direkt mit dem VPN Passwort im Profil gearbeitet werden. Dass Passwort wird dabei im Klartext eingefügt!

In einer verwalteten Umgebung werden die Profile signiert und verschlüsselt übertragen. Daher ist das dort kein Problem. Das ist für die meisten hier im Heimumfeld allerdings nicht möglich. Daher muss man unbedingt sicherstellen, dass das Konfigurationsprofil nicht irgendwo “zwischengespeichert” wird.

Übertragung auf iPhone/iPad

Man kann ein Profil mit unterschiedlichen Methoden übertragen.

  1. Die direkteste Methode ist die Verwendung mit Apple Configurator.
  2. Von einer Zusendung mit e-Mail (funktioniert!) ist abzuraten, weil die E-Mail immer auch auf einem Mailserver abgelegt (und eventuell auch gescannt und analysiert) wird. Man gibt hier also seine Daten automatisch an Dritte. Ist auch noch das Passwort konfiguriert, umso schlimmer.
  3. Ablegen auf einem Webserver und von dort herunterladen. Das wäre akzeptabel, wenn man
    1. den Webserver selbst betreibt
    2. eine HTTPS Verbindung sichergestellt ist

Je nach Risikoeinstufung für sich persönlich kann man nun eine der obigen Methoden verwenden. Wer die Methode E-Mail wählt (weil am einfachsten für nicht Apple Configurator Nutzer) bitte unbedingt OHNE Passwort das Profil konfigurieren — aber ich glaube das hatte ich nun schon einige Male erwähnt …

Anwendung

Ist das Profil erfolgreich auf dem iPhone importiert. Kann man nun das VPN manuell einschalten. (Systemeinstellungen->VPN). So kann man zunächst überprüfen, ob das Profil auch wirklich funktioniert und man nicht einen Fehler in der Konfiguration gemacht hat.

War dieser Test positiv, deaktiviert man das VPN wieder, öffnet Safari und versucht auf einen Server im Heimnetz zuzugreifen, bspw. die FritzBox selber. Also gibt man als Adresse “http://fritz.box/” ein. Nun sollte automatisch (1-2 Sekunden warten) die VPN Verbindung aufgemacht werden und das Login der FritzBox erscheinen. Voila! Ziel erreicht.

Wer nun eine Synology oder andere Server im Heimnetz betreibt, kann die entsprechenden Apps auch nutzen. In einer Synology würde man sich beispielsweise mit seiner Diskstation als “diskstation.fritz.box” verbinden.

Anmerkung: die on-demand Verbindung funktioniert nur mit Domain-Namen, nicht mit IP Adressen!

Viel Spaß mit nun mit dem eigenen VPN auf dem iOS Gerät!

Ressourcen


Was meinst du dazu?

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .

3 Gedanken zu “iOS VPN on-demand mit Fritzbox

  • Paua

    Hi,
    vielen Dank für deine tolle Anleitung zum VPN-On-Demand!
    Ich habe eine Frage zum PayloadIdentifier. Du schreibst es werden zwei benötigt. Den ersten kann ich mir noch „basteln“ weil ans Ende von com.apple.vpn.managed. eine UUID angefügt wird. Bei dem zweiten Identifier hast du allerdings com.private.homebox zu stehen. Das werde ich doch für meine config nicht übernehmen können oder?

    • Boerny Autor des Beitrags

      Hallo Paua, es sind nur Identifier, also eindeutige Namen. Auf dem iPhone/iPad auf dem dann das Profil gespeichert wird darf ein Identifier nur einmal vorkommen. Du kannst also auch com.private.homebox übernehmen oder dir etwas anderes ausdenken.

    • Boerny Autor des Beitrags

      Den kannst du theorteisch auch so übernehmen, denn ein Identifier bleibt ein Identifier und ist nur ein „eindeutiger“ Name. Die Konvention ist einfach der umgedrehte DNS Name, d.h. wenn dein Rechner als „server.pauanet.de“ registriert ist, kannst du hier bequem „de.pauanet.server“ eintragen.