Mit dem Smartphone vom Internet direkt ins Heimnetz
Konkret – was ist das Ziel?
Mit dem iPhone will ich einen Rechner vom Internet aus im lokalen Netzwerk erreichen und diesen über den lokalen Namen ansprechen. Das heißt also, daß z.B. meinGeraet.fritz.box vom iPhone angesprochen werden soll. Dazu baut das Smartphone automatisch eine VPN-Verbindung über die eigene Fritzbox auf und mein Gerät wird über den Namen ansprechbar.
Bekanntmachung der Fritzbox im Internet
Man sollte die Fritzbox zuerst über eine DDNS Adresse aus dem Internet erreichbar machen. Und zwar soll die Fritzbox einen eigenen Domainnamen bekommen. Entweder man benutzt Myfritz oder über anderen Anbieter für die dynamische DNS Auflösung.
Das Prinzip
Beim Zugriff über eine App oder über den Browser gibt man den Namen eines Geräts im WLAN ein, z.B. nas.fritz.box. Anhand der lokalen Domain fritz.box erkennt das iPhone, dass es sich um ein lokales Gerät im heimischen Netzwerk handeln soll. Durch die nachfolgende Konfiguration wird folgendes erreicht:
Zunächst wird geprüft, ob man sich im heimischen Netzwerk befindet, was über den einzutragenden WLAN Namen (SSID) passiert. Ist dies der Fall, muss keine
VPN-Verbindung aufgebaut werden. Falls nein, so wird über das nachfolgend zu installierendem Profil eine VPN-Verbindung aufgebaut. Plötzlich befindet man sich im heimischen Netz, obwohl man unterwegs oder in einem fremden WLAN eingebucht ist.
VPN-Profil auf der Fritzbox erstellen
Zuerst muss man auf der eigenen Fritzbox ein VPN-Profil erstellen. Diese Datei speichert man unter dem Namen VPN_Fritzbox.cfg ab:
vpncfg { connections { enabled = yes; conn_type = conntype_user; name = "NAMEDERVPNVERBINDUNG"; always_renew = no; reject_not_encrypted = no; dont_filter_netbios = yes; localip = 0.0.0.0; local_virtualip = 0.0.0.0; remoteip = 0.0.0.0; remote_virtualip = 192.168.2.201; remoteid { key_id = "NAMEDERVPNVERBINDUNG"; } mode = phase1_mode_aggressive; phase1ss = "all/all/all"; keytype = connkeytype_pre_shared; key = "SHAREDKEY"; cert_do_server_auth = no; use_nat_t = yes; use_xauth = yes; use_cfgmode = no; xauth { valid = yes; username = "NAMEDERVPNVERBINDUNG"; passwd = "PASSWORT"; } phase2localid { ipnet { ipaddr = 0.0.0.0; mask = 0.0.0.0; } } phase2remoteid { ipaddr = 192.168.2.201; } phase2ss = "esp-all-all/ah-none/comp-all/no-pfs"; accesslist = "permit ip any 192.168.2.201 255.255.255.255"; } ike_forward_rules = "udp 0.0.0.0:500 0.0.0.0:500", "udp 0.0.0.0:4500 0.0.0.0:4500"; } // EOF
Die Datei muss vor dem Hochladen auf die Fritzbox erst mal angepasst werden:
- NAMEDERVPNVERBINDUNG (kommt 3x vor) ersetzen durch den gewünschten Namen der VPN Verbindung.
- 192.168.2.201 (kommt 3x vor) ersetzen durch eine IP ein aus einem Bereich, den die FB den normalen WLAN Geräten nicht vergibt, ab Werk ist das ab .201 der Fall. Die ersten 3 Zahlen müssen natürlich an das heimische WLAN angepasst werden.
- SHAREDKEY (kommt nur 1x vor) ersetzen durch eine beliebige Zahlen/Zeichenkombination, min. 16 Zeichen lang, Sonderzeichen gehen auch, aber einige machen Probleme.
- PASSWORT ersetzen durch ein beliebiges Passwort.
- Nun Abspeichern.
- Auf der Fritzbox zu Internet > Freigaben > VPN gehen. Unten rechts „VPN Verbindung hinzufügen“ auswählen, dann „ Eine VPN Konfiguration aus einer vorhandenen Datei importieren“ und auf weiter klicken. Dann die vorher gespeicherte Datei auswählen und bestätitigen.
- Die VPN Konfiguration erscheint jetzt in der Liste.
VPN-Profil für das iPhone oder iPad erstellen
Nun braucht man noch eine VPN-Datei für das iPhone oder iPad. Diese Datei nennen wir VPN_iOS.mobileconfig.
<?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"> <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> <!-- Turn off VPNONDEMAND if on matching WiFi network --> <dict> <key>InterfaceTypeMatch</key> <string>WiFi</string> <key>SSIDMatch</key> <array> <string>WLANNAME</string> </array> <key>Action</key> <string>Disconnect</string> </dict> <!-- Turn on VPNONDEMAND if matching IP or Domain --> <dict> <key>Action</key> <string>EvaluateConnection</string> <key>ActionParameters</key> <array> <dict> <key>Domains</key> <array> <string>192.168.2.1</string> <string>192.168.2.2</string> <string>192.168.2.3</string> <string>192.168.2.4</string> <string>192.168.2.5</string> <string>192.168.2.6</string> <string>192.168.2.7</string> <string>192.168.2.8</string> <string>192.168.2.9</string> <string>192.168.2.10</string> <string>192.168.2.11</string> </array> <key>DomainAction</key> <string>ConnectIfNeeded</string> </dict> </array> </dict> </array> <key>LocalIdentifier</key> <string>NAMEDERVPNVERBINDUNG</string> <key>LocalIdentifierType</key> <string>KeyID</string> <key>RemoteAddress</key> <string>MYFRITZADRESSE</string> <key>SharedSecret</key> <string>SHAREDKEY</string> </dict> <key>PayloadDescription</key> <string>Configures VPN settings, including authentication.</string> <key>PayloadDisplayName</key> <string>VPN (NAMEDESPROFILS)</string> <key>PayloadIdentifier</key> <string>MYFRITZADRESSE</string> <key>PayloadOrganization</key> <string>NAMEDESPROFILS</string> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadUUID</key> <string>SHAREDKEY</string> <key>PayloadVersion</key> <integer>1</integer> <key>UserDefinedName</key> <string>NAMEDESPROFILS</string> <key>VPNType</key> <string>IPSec</string> </dict> </array> <key>PayloadDescription</key> <string>VPN-Zugang zu NAMEDESPROFILS</string> <key>PayloadDisplayName</key> <string>NAMEDESPROFILS</string> <key>PayloadIdentifier</key> <string>MYFRITZADRESSE</string> <key>PayloadOrganization</key> <string>NAMEDESPROFILS</string> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>MYFRITZADRESSE</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
Anpassung der Datei
- Die Datei VPN_IOS mit einem Editor öffnen, die 3-eckigen Pfeil Klammern müssen alle so bleiben, wie sie sind.
- WLANNAME (kommt 1x vor) ersetzen durch den Namen des WLANs zu Hause, denn da soll ja keine VPN Verbindung gemacht werden.
- Einen Block unter WLANNAME siehst man einen Block mit mehreren Zeilen mit aufeinanderfolgenden IPs. Da sollte man seit iOS 9 nur noch den Namen des heimischen Netzwerkes eintragen als fritz.box. Somit wird beim Aufruf einer Adresse des heimischen Netzes die Adresse erkannt und dafür das VPN gestartet.
- NAMEDERVPNVERBINDUNG (1x) ersetzen mit dem zuvor in der anderen Datei vergebenen Namen der VPN Verbindung.
- NAMEDESPROFILS (6x) ersetzen mit einem beliebigen Namen für das Profil auf dem IOS Gerät.
- MYFRITZADRESSE (4x) Adresse mit der Myfritz oder sonstigen DDNS Adresse, über die man die eigene FB von außen erreichen kann.
- SHAREDKEY (2x) ersetzen mit dem, was zuvor in der anderen Datei VPN_FB dafür angegeben wurde.
- Nun die Datei speichern.
- Datei in eine Mail anhängen und ab damit aufs iOS Gerät.
- Am IOS Gerät auf diese Datei in der Mail klicken, dann öffnet sich die Installation davon, das muss man mehrfach bestätigen.
Dabei wird man nach NAMEDERVPNVERBINDUNG und PASSWORT gefragt und man muß nochmal bestätigen.
Nach dem Hochladen der VPN_Fritzbox.cfg sieht der Reiter VPN unter Internet->Freigaben->VPN in etwa so aus:
Testlauf:
- Man geht zuerst mal aus dem zuvor anstatt WLANNAME benannten WLAN heraus und aktiviert unter VPN diese zuvor angelegte Verbindung das erste Mal manuell
- Sobald nun die Verbindung hergestellt wurde, beendet man sie wieder.
- Öffnet man jetzt eine App, die z.B. auf die Adresse nas.fritz.box zugreift (keine IP-Adresse, das funktioniert seit iOS 9 nicht mehr), so sieht man, dass sich dann sofort die VPN Verbindung herstellt, was aber auf dem Land mit „E“ Empfang etwas dauern kann.
Probleme und Verbesserungen:
Sobald eine App auf das heimische Netz über die neue VPN-Verbindung zugreifen will, kann es sein, dass normale Internet-Adressen nicht mehr erreichbar sind, bis die VPN-Verbindung abgebaut ist.
Damit das nicht passiert, müssen bis zum Abbau der VPN-Verbindung die Datenpakete über das heimische Netzwerk laufen können. Hierzu muss im VPN-Profil für die Fritzbox noch eine Zeile ergänzt werden und dann das Profil erneut hochgeladen werden.
Dazu muss die Zeile
accesslist = "permit ip any 192.168.2.201 255.255.255.255";
geändert werden auf
accesslist = "permit ip 192.168.2.0 255.255.255.0 192.168.2.201 255.255.255.255", "permit ip any 192.168.2.201 255.255.255.255";
Die IP-Adresse, die das iPhone über VPN bekommt, ist in diesem Falle wie unter Punkt 3 der Konfiguration der Datei VPN_Fritzbox.cfg 192.168.2.201. Damit die restlichen Internet-Adressen auch über das heimische Netz erreichbar werden, muss die Zeile mit dem Netz 192.168.2.0 eingefügt werden.