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
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. Dazu hatte ich hier schonmal einen ausführlichen Beitrag geschrieben.
VPN im Router konfigurieren
Beginnen wir mit der Konfiguration im Router, bei mir ein Mikrotik Routerboard RB2011UAS-RM, Zu diesem wird am Ende eine L2TP/IPsec-Verbindung aufgebaut. Ich erspare euch hier detaillierte Erläuterungen zu den einzelnen Einstellungen und deren Bedeutung, da ich das sowieso nicht fachlich korrekt erklären kann. Ich muss auch ehrlich gestehen, ich verstehe nicht alles, was hier eingestellt wird und habs mir letztlich auch nur zusammengesucht. Dafür verwende ich überall möglichst eindeutige Namen, damit man über die verschiedenen Schritte hinweg immer nachvollziehen kann, was gemeint ist.
Für die Konfiguration nutzen wir hier WinBox und damit verbinden wir uns direkt auf den Router.
IP Pool
Zuerst legen wir einen Pool von IP-Adressen an, aus dem VPN-Clients per DHCP ihre IP-Adresse zugewiesen bekommen. Das ist optional, denn man kann auch den normalen DHCP-Pool verwenden, aber ich finde es übersichtlicher. Dazu navigieren wir zu IP -> Pool
, klicken dort auf das +
, vergeben einen passenden Namen und den gewünschten IP-Adressbereich.
Name: | dhcp-vpn |
Addresses: | Den Adressbereich müsst ihr natürlich euren Begebenheiten anpassen. Bei mir ist es 192.168.243.240-192.168.243.254 |
PPP Profile
Anschließend navigieren wir zu PPP
und wählen hier die Registerkarte Profiles
.
Per Klick auf +
erzeugen wir ein neues Profil und stellen es wie folgt ein:
Name: | l2tp-vpn-profile |
Local Address: | <IP des Routers im lokalen Netzwerk> |
Remote Address: | hier wählen wir den IP-Pool, den wir für VPN angelegt haben (dhcp-vpn ) |
DNS Server: | IP-Adresse des lokalen DNS-Servers. Wird bei den meisten wohl die IP des Routers sein, ich verwende jedoch einen separaten DNS-Server. |
Change TCP MSS: | yes |
Use MPLS: | yes |
Use Encryption: | required |
L2TP Server
Weiter zur Registerkarte Interface
, wo wir auf die Schaltfläche L2TP Server
klicken und diesen wie folgt konfigurieren:
Enabled: | true |
Default Profile: | l2tp-vpn-profile |
Authentication: | mschap2 |
Use IPsec: | yes |
IPsec Secret: | Hier vergeben wir ein starkes Passwort und notieren uns dies. Hier im Beispiel verwende ich bcgS#U23.!OWPDxs=Mns8*D2 |
PPP Secrets
Weiter zur Registerkarte Secrets
, wo wir mit dem +
ein neues Secret anlegen.
Name: | Hier einen passenden Namen vergeben. Ich verwende vpn-seb-iphone |
Password: | Erneut vergeben wir wieder ein starkes Passwort und notieren uns dies. Dies kann/sollte nicht unbedingt das gleiche sein, wie zuvor. Beispiel c923E=!cno83LASwhd |
Service: | l2tp |
Profile: | l2tp-vpn-profile |
IPsec Peer Profile
Als nächstes erstellen wir ein Profil für VPN-Clients (Peers) und navigieren hierfür zu IP -> IPsec
. Auf der Registerkarte Peer Profiles
erstellen wir mit +
ein neues Profil:
Name: | Hier einen passenden Namen vergeben. Ich verwende l2tp-vpn-peer-profile |
Encryption Algorithm: | 3des und aes-256 . Achtet darauf, dass kein weiteres Kästchen aktiviert ist. |
DH Group: | modp1024 . Auch hier darauf achten, dass nichts anderes ausgewählt ist. |
IPsec Peer
Anschließend erstellen wir einen VPN-Client. Dazu wechseln wir auf die Registerkarte Peers
und klicken wieder auf +
.
Profile: | Das soeben erstelle Profil l2tp-vpn-peer-profile auswählen. |
Exchange Mode: | main l2tp |
Passive: | true |
Secret: | Die gleiche Zeichenkette, die wir unter L2TP Server als IPsec Secret verwendet haben: bcgS#U23.!OWPDxs=Mns8*D2 |
IPsec Mode Config
Registerkarte Mode Configs
-> +
.
Name: | l2tp-vpn-mode-config |
Responder: | true |
Address Pool: | dhcp-vpn |
System DNS: | true |
IPsec Policy Proposal
Registerkarte Policy Proposal
-> +
.
Name: | l2tp-vpn-proposal |
Encr. Algorithms: | 3des und aes-256-cbc . Achtet hier wieder darauf, dass nichts anderes angehakt ist. |
IPsec Policies
Im IPsec
-Fenster begeben wir uns auf die Registerkarte Policies
und klicken dort abermals auf +
.
Template: | true |
Proposal: | l2tp-vpn-proposal |
Firewall-Regeln
Da ihr euer Netzwerk sicherlich auch ordentlich abgeriegelt habt, benötigen wir noch zwei Firewall-Regeln, die den eingehenden Verkehr zulassen. Diese müssen vor den Drop-Regeln platziert werden.
Wir navigieren zu IP -> Firewall
und klicken auf +
.
Chain: | input |
Protocol: | udp |
Dst. Port: | 500,1701,4500 |
In. Interface: | Hier wählen wir die WAN-Schnittstelle aus. Bei mir ist das pppoe-out1 |
Connection State: | new |
Action: | accept |
Für die zweite Regel wieder ein Klick auf +
.
Chain: | input |
Protocol: | ipsec-esp |
In. Interface: | Hier wählen wir die WAN-Schnittstelle aus. Bei mir ist das pppoe-out1 |
Action: | accept |
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 PPP Secrets vergeben haben. Hier im Beispiel war das vpn-seb-iphone |
Passwort: | Das Passwort, das wir bei PPP Secrets vergeben haben. Hier im Beispiel war das c923E=!cno83LASwhd |
Shared Secret: | Das IPsec-Secret, das wir bei L2TP-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.
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 PPP Secrets vergeben haben. Hier im Beispiel war das vpn-seb-iphone |
Passwort: | Das Passwort, das wir bei PPP Secrets vergeben haben. Hier im Beispiel war das c923E=!cno83LASwhd |
Gesamten Verkehr über VPN senden: | Ganz nach Bedarf. Bei mir true |
Shared Secret: | Das IPsec-Secret, das wir bei L2TP-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: | Das IPsec-Secret, das wir bei L2TP-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 PPP Secrets vergeben haben. Hier im Beispiel war das vpn-seb-iphone |
Zeile 93: | Das Passwort, das wir bei PPP Secrets 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
37 Comments