VPN-on-Demand ist das Mittel der Wahl, um einfach und unkompliziert eine VPN-Verbindung nach Hause herzustellen. Im Prinzip handelt es sich dabei um eine normale VPN-Verbindung, die jedoch immer dann automatisch (on-Demand) gestartet wird, wenn es notwendig ist. Wann das genau passiert, wird über Regeln definiert.
Inhalt
Vorüberlegungen: Wann VPN-Verbindung wählen?
Sicher kann man unterschiedlicher Ansicht sein, wann eine VPN-Verbindung gewählt werden sollte. Aber da kann sich ja jeder seine eigene Meinung bilden. Ich finde es sinnvoll die Verbindung zu wählen, wenn ich unterwegs bin und auf das Heimnetzwerk zugreifen will (was sicher für die meisten die Intension ist). Aber auch, wenn ich mich in fremden (öffentlichen) WLANs befinde. Da ich häufiger dienstlich in Gastnetzwerken von Hotels und Kunden unterwegs bin und ich da eine gewisse Kontrolle der Netzwerke erwarte, gehe ich hier lieber auf Nummer Sicher.
VPN-on-Demand wird über Regeln definiert. Bei mir lauten diese so:
- Im heimischen WLAN mit der SSID
...
VPN trennen (die SSID ist der WLAN-Name bei mir Zuhause) - Wenn ich mich in einem anderen WLAN befinde, VPN verbinden (gemeint sind alle WLAN-Netzwerke, die von der ersten Regel nicht erfasst werden)
- Bei Zugriff auf meine lokale Domain Zuhause VPN verbinden
- VPN trennen, wenn ich per Mobilfunk online bin
Damit die dritte Regel funktioniert, müssen die Geräte im lokalen Netzwerk auch über ihren FQDN (Full Qualified Domain Name) erreichbar sein.
VPN im Router konfigurieren
Beginnen wir mit der Konfiguration im Router, bei mir eine DreamMachine Pro von Ubiquiti. Zu diesem wird am Ende die VPN-Verbindung aufgebaut.
Radius-Server aktivieren
Die Authentifizierung der Benutzer erfolgt über den Radius-Server. Diesen erreichen wir unter Einstellungen > Dienste > Radius > Server
, aktivieren ihn und vergeben ein beliebiges Passwort. Das Passwort benötigen wir im weiteren Verlauf nicht mehr.
Im neuen User Interface sind die Einstellungen hier zu finden: Einstellungen > Advanced Features > Radius
Radius-Benutzer anlegen
Im nächsten Schritt legen wir einen Benutzer im Radius-Server an. Dies ist der Benutzer, der den VPN-Zugriff erhält. Wir navigieren zu Einstellungen > Dienste > Radius > Benutzer
, betätigen die Schaltfläche + Neuen Benutzer anlegen
und vergeben einen Benutzernamen und ein Passwort für den zukünftigen VPN-Benutzer.
Name: | Hier einen passenden Namen vergeben. Ich verwende vpn-seb-iphone |
Passwort: | Wir vergeben ein starkes Passwort und notieren uns dies. Beispiel: c923E=!cno83LASwhd |
Im neuen User Interface sind die Einstellungen hier zu finden: Einstellungen > Advanced Features > Radius > (Radius-Profil) > Radius Users
VPN-Server einrichten
Bleibt noch, den VPN-Server einzurichten. Dazu navigieren wir zu Einstellungen > Netzwerke
und betätigen die Schaltfläche + Neues Netzwerk erstellen
.
Name: | Beliebiger Name, zum Beispiel VPN L2TP |
Verwendung: | Remote-Benutzer VPN |
VPN Typ: | L2TP-Server |
Pre-Shared Key: | Hier vergeben wir ein starkes Passwort und notieren uns dies. Hier im Beispiel verwende ich bcgS#U23.!OWPDxs=Mns8*D2 |
Schnittstelle: | WAN (wenn Euer Internet am WAN-Port hängt, sonst natürlich WAN 2 ) |
Gateway IP/Subnetz: | IP-Adressraum im CIDR-Format, aus dem der VPN-Teilnehmer eine IP-Adresse zugewiesen bekommt. Ich wähle 10.2.0.1/24 |
Nameserver: | Der DNS-Server, den der VPN-Teilnehmer nutzen soll. Bei mit Auto |
Radius-Profil: | Default (das haben wir zuvor angelegt, dürfte nur eins vorhanden sein) |
Im neuen User Interface sind die Einstellungen hier zu finden: Einstellungen > Networks
VPN-Verbindung unter iOS einrichten
Einstellungen > Allgemein > VPN
und betätigen dort die Schaltfläche VPN hinzufügen
. Konfiguriert wird dann folgendes:
Typ: | L2TP |
Beschreibung: | Beliebiger Name für die VPN-Verbindung |
Server: | DynDNS- oder IP-Adresse, über die euer Router von außen erreichbar ist |
Account: | Der Name, den wir bei Radius-Benutzer vergeben haben. Hier im Beispiel war das vpn-seb-iphone |
Passwort: | Das Passwort, das wir bei Radius-Benutzer vergeben haben. Hier im Beispiel war das c923E=!cno83LASwhd |
Shared Secret: | Der Pre-Shared Key, den wir im VPN-Server vergeben haben. Hier im Beispiel war das bcgS#U23.!OWPDxs=Mns8*D2 |
Gesamten Verkehr senden: | Diese Option sorgt dafür, dass immer, wenn VPN verbunden ist, jeglicher Verkehr, der für das Internet bestimmt ist, über die VPN-Verbindung zum heimischen Router geleitet wird und dann von da aus seinen Weg ins WWW findet. Das ist optional, würde aber Sinn machen, um in fremden WLAN-Netzen anonym zu bleiben. true |
Im Prinzip haben wir nun eine vollständige VPN-Konfiguration, mit der man sich jederzeit vom iPhone aus in sein heimisches Netzwerk verbinden kann. Die gleichen Zugangsdaten kann man auch unter Windows, macOS, Linux oder sonstigen Betriebssystemen nutzen. Wem das reicht, der muss auch nicht mehr weiterlesen, denn im nachfolgenden Abschnitt geht es nur darum, wie man VPN-on-Demand auf iPhone einrichten und es dazu überreden kann, die VPN-Verbindung von alleine zu wählen.
VPN-on-Demand
Ich gehe davon aus, dass der Test im vorherigen Abschnitt erfolgreich verlief. Falls nicht, solltet ihr euch erstmal darum kümmern, damit man nicht unnötig an der falschen Stelle sucht, sollte es am Ende vielleicht doch nicht funktionieren.
Ein paar Grundlagen
Bevor wir beginnen will ich kurz ins Thema einleiten. VPN-on-Demand ist eine Enterprise-Funktion, weshalb es dafür in der Oberfläche von iOS auch keinen Schalter gibt. Im Enterprise-Bereich werden sogenannte Profile erstellt, die auf dem iPhone eingespielt werden. Profile können alle möglichen Einstellungen beinhalten, von Vorgaben zur Mindeststärke von Kennwörtern, über Netzwerkeinstellungen, vordefinierte Kalender, bis hin zur VPN-Verbindungen. Das Einspielen der Profile geht auf zwei Arten: Entweder wird das Profil per E-Mail/iCloud/AirDrop/Dropbox/was-auch-immer an den jeweiligen Empfänger gesendet, oder, wenn das Zielgerät komplett vom Unternehmen verwaltet wird, per Apple Configurator 2 direkt aufgespielt. Erstellt werden diese Profile ebenfalls damit.
[appbox appstore id1037126344 simple]
Leider ist es so, dass dieser für L2TP/IPsec-Verbindungen, wie wir sie hier nutzen, kein VPN-on-Demand anbietet. Wir müssen das Profil also händisch nacharbeiten. Alternativ können wir es auch gleich in einem Texteditor erstellen, denn es handelt sich dabei schlicht um eine XML-Datei.
Profil anlegen
Wir starten also den Apple Configurator, klicken anschließend auf Ablage > Neues Profil
. Im Register Allgemein
geben wir dem Profil einen Namen. Zum Beispiel „VPN-on-Demand-Profil“.
Anschließend wechseln wir in das Register VPN
und klicken da auf Konfigurieren
. Hier nutzen wir die gleichen Werte, wie zuvor beim iPhone. Nur der Name sollte ein anderer sein, damit man beide Verbindungen später noch unterscheiden kann.
Verbindungsname: | Kann beliebig gewählt werden. Ich nehme hier VPN-on-Demand |
Verbindungs-Typ: | L2TP |
Server: | DynDNS- oder IP-Adresse, über die euer Router von außen erreichbar ist |
Account: | Der Name, den wir bei Radius-Benutzer vergeben haben. Hier im Beispiel war das vpn-seb-iphone |
Passwort: | Das Passwort, das wir bei Radius-Benutzer vergeben haben. Hier im Beispiel war das c923E=!cno83LASwhd |
Gesamten Verkehr über VPN senden: | Ganz nach Bedarf. Bei mir true |
Shared Secret: | Der Pre-Shared Key, den wir im VPN-Server vergeben haben. Hier im Beispiel war das bcgS#U23.!OWPDxs=Mns8*D2 |
Das Shared Secret wird codiert gespeichert. Also lasst Euch nicht davon irritieren, dass in dem von euch erzeugten Profil auf Zeile 15 nicht
<string>bcgS#U23.!OWPDxs=Mns8*D2</string>
, sondern vielleicht <data>YmNnUyNVMjMuIU9XUER4cz1NbnM4RDI=</data>
. Beide Varianten sind möglich. On-Demand-Regeln einfügen
Das Profil speichern wir irgendwo auf dem Computer unter dem Dateinamen VPN-on-Demand-Profil.mobileconfig
und öffnen es in einem beliebigen Texteditor. Hier fügen wir nun den Block, der für VPN-on-Demand zuständig ist, ein (Zeilen 25…87). Anschließend müssen nur noch ein paar Werte angepasst werden.
<?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>LocalIdentifierType</key> <string>KeyID</string> <key>SharedSecret</key> <string>bcgS#U23.!OWPDxs=Mns8*D2</string> </dict> <key>IPv4</key> <dict> <key>OverridePrimary</key> <integer>1</integer> </dict> <!-- Einstellungen für VPN-on-Demand --> <key>OnDemandEnabled</key> <integer>1</integer> <key>OnDemandRules</key> <array> <!-- VPN trennen, wenn bekanntes WLAN verbunden --> <dict> <key>Action</key> <string>Disconnect</string> <key>InterfaceTypeMatch</key> <string>WiFi</string> <key>SSIDMatch</key> <array> <!-- WLAN-SSIDs hier eintragen --> <string>WLAN-Netzwerk-1</string> <string>WLAN-Netzwerk-2</string> </array> </dict> <!-- VPN verbinden, wenn anderes WLAN verbunden --> <dict> <key>Action</key> <string>Connect</string> <key>InterfaceTypeMatch</key> <string>WiFi</string> </dict> <!-- VPN verbinden, wenn auf das heimische Netzwerk zugegriffen wird --> <dict> <key>Action</key> <string>EvaluateConnection</string> <key>ActionParameters</key> <array> <dict> <key>DomainAction</key> <string>ConnectIfNeeded</string> <key>Domains</key> <array> <!-- Lokale Domains hier eintragen --> <string>*.local</string> <string>*.home.local</string> <string>home.local</string> </array> </dict> </array> </dict> <!-- VPN trennen, wenn man sich im Mobilfunknetz befindet --> <dict> <key>Action</key> <string>Disconnect</string> <key>InterfaceTypeMatch</key> <string>Cellular</string> </dict> <dict> <key>Action</key> <string>Disconnect</string> </dict> </array> <!-- sonstige Einstellungen --> <key>PPP</key> <dict> <key>AuthName</key> <string>vpn-seb-iphone</string> <key>AuthPassword</key> <string>c923E=!cno83LASwhd</string> <key>CommRemoteAddress</key> <string>dyndns.router.com</string> </dict> <key>PayloadDescription</key> <string>Konfiguriert VPN-Einstellungen</string> <key>PayloadDisplayName</key> <string>VPN</string> <key>PayloadIdentifier</key> <string>com.apple.vpn.managed.F28742EA-6E1C-4BA1-8797-6A5270B0EE61</string> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadUUID</key> <string>F28742EA-6E1C-4BA1-8797-6A5270B0EE61</string> <key>PayloadVersion</key> <integer>1</integer> <key>Proxies</key> <dict> <key>HTTPEnable</key> <integer>0</integer> <key>HTTPSEnable</key> <integer>0</integer> </dict> <key>UserDefinedName</key> <string>VPN-on-Demand</string> <key>VPNType</key> <string>L2TP</string> </dict> </array> <key>PayloadDisplayName</key> <string>VPN-on-Demand-Profil</string> <key>PayloadIdentifier</key> <string>Sebastians-iMac.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>949D9466-4286-4BE0-BDA1-5826ABE59109</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
Zeile 15: | Der Pre-Shared Key, den wir im VPN-Server vergeben haben. Hier im Beispiel war das bcgS#U23.!OWPDxs=Mns8*D2 |
Zeilen 20: | Gesamten Verkehr über VPN senden. Wer das nicht möchte macht aus der 1 eine 0 |
Zeilen 39, 40: | Die Namen der WLAN-Netzwerke, in denen keine VPN-Verbindung gewählt werden soll |
Zeilen 65…67: | Domain-Namen des heimischen Netzwerks |
Zeile 91: | Der Name, den wir bei Radius-Benutzer vergeben haben. Hier im Beispiel war das vpn-seb-iphone |
Zeile 93: | Das Passwort, das wir bei Radius-Benutzer vergeben haben. Hier im Beispiel war das c923E=!cno83LASwhd |
Zeile 95: | DynDNS- oder IP-Adresse, über die euer Router von außen erreichbar ist |
Zeile 117: | Beliebiger Name für die VPN-Verbindung. Ich nehme hier VPN-on-Demand |
Zeile 123: | Beliebiger Name für das Profil. Ich nehme hier VPN-on-Demand-Profil |
Im Ergebnis haben wir ein fertiges Profil, das nur noch an das iPhone übertragen und dort installiert werden muss. Wichtig ist, dass die Datei-Endung .mobileconfig
lautet, da das iPhone die Datei sonst nicht als installierbares Profil erkennt.
VPN-Profil auf iPhone installieren
Wie schon zuvor erwähnt gibt es verschiedene Wege, wie wir das Profil auf das iPhone bekommen. Der einfachste ist sicherlich, sich das Profil per E-Mail oder AirDrop auf das Telefon zu senden. Den Anhang der E-Mail tippen wir einfach an, der Rest erklärt sich von selbst:
Installieren
-> Code eingeben -> Installieren
-> Installieren
-> Fertig.
Im Ergebnis haben wir eine neue VPN-Verbindung mit dem Namen VPN-on-Demand, die auch schon vorgewählt ist. Solange diese Verbindung ausgewählt ist, wird unser iPhone diese Verbindung immer dann wählen, wenn wir uns in fremden WLAN-Netzwerken bewegen, oder auf ein Netzwerkgerät zuhause per FQDN zugreifen.
Bei Bedarf verbinden
aktiv ist. Schaltet man diesen aus, hat man wieder die volle Kontrolle über die VPN-Verbindung und das automatische Verbinden ist deaktiviert. Die Verbindung, die wir zuvor zum Testen eingerichtet haben, kann dann auch entfernt werden. Die benötigen wir ja künftig nicht mehr.
- Proxmox: „Failed to connect to Server“ mit Safari auf MacOS - 28. Januar 2023
- Loxone: Benachrichtigung per Telegram - 15. Januar 2022
- Telegram: Nachrichten per Bot von der Heimautomation aufs Handy - 2. Januar 2022
16 Comments