FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: dadoc am 22 August 2017, 17:02:02

Titel: TabletUI unter iOS mit automatischem (!) VPN-Aufbau on demand
Beitrag von: dadoc am 22 August 2017, 17:02:02
Hallo zusammen,
ich habe im Lauf der Zeit immer wieder gelesen, dass es diejenigen, die fhem/TabletUI von extern nur per VPN nutzen (wie ich selbst auch) nervt, dass man jedes Mal erst von Hand eine VPN-Verbindung aufbauen muss, wenn man per VPN auf fhem/TabletUI zugreifen möchte.
Aber erst jetzt habe ich herausgefunden, wie das mit der Fritzbox am anderen Ende geht, dass die VPN-Verbindung unter iOS vollautomatisch aufgebaut wird, wenn man außerhalb des Homenetz' fhem ansteuert. Und auf Wunsch sogar abhängig davon, in welchem WLAN-Netz man sich (nicht) befindet, ob man gerade per Mobilfunk unterwegs ist usw.
Falls das nicht schon irgendwo hier beschrieben ist und jemand Interesse hat, kann ich das mal schildern.
Grüße
Martin
Titel: Antw:TabletUI unter iOS mit automatischem (!) VPN-Aufbau on demand
Beitrag von: CQuadrat am 22 August 2017, 17:28:45
Bin neugierig ☺
Titel: Antw:TabletUI unter iOS mit automatischem (!) VPN-Aufbau on demand
Beitrag von: Andy89 am 22 August 2017, 17:31:39
Ich hätte auch Interesse an einer Beschreibung  ;)
Titel: Antw:TabletUI unter iOS mit automatischem (!) VPN-Aufbau on demand
Beitrag von: setstate am 22 August 2017, 17:36:45
Eine allgemeine Beschreibung findet man hier.

https://www.boernyblog.de/ios-vpn-on-demand-mit-fritzbox/

Dass das auch für FHEM Seiten klappt, ist anzunehmen
Titel: Antw:TabletUI unter iOS mit automatischem (!) VPN-Aufbau on demand
Beitrag von: dadoc am 22 August 2017, 17:44:28
Zitat von: setstate am 22 August 2017, 17:36:45
Eine allgemeine Beschreibung findet man hier.

https://www.boernyblog.de/ios-vpn-on-demand-mit-fritzbox/

Dass das auch für FHEM Seiten klappt, ist anzunehmen
Allgemeine Beschreibungen hatte ich auch zuhauf, aus aller Herren Länder und Epochen, inklusive Sample Code etc. ;) Mein Problem war u.a., dass ich keinen Apple Configurator nutzen konnte (gibt es seit einiger Zeit nur noch für den Mac), sondern die Konfiguration "von Hand" im Text-Editor machen musste, Fritzboxen (also xxx.fritz.box) sowohl im Home- als auch im Remotenetz habe und dass es wohl in letzter Zeit einige Änderungen seitens Apple gegeben hat (so kann man den Auto-Start der VPN-Verbindung nicht mehr wie früher durch den Aufruf einer bestimmten IP auslösen, sondern braucht einen - wenn auch nur lokalen - Domainnamen wie z.B. fhem.fritz.box. Hat mich auf jeden Fall zahlreiche Versuche gekostet, bis es geklappt hat.
Daher werde ich gern demnächst mal meine erfolgreiche Variante aufarbeiten und hier einstellen.
Grüße
Martin
Titel: Antw:TabletUI unter iOS mit automatischem (!) VPN-Aufbau on demand
Beitrag von: gloob am 22 August 2017, 17:46:11
Da bin ich auch drauf gespannt und sag schon einmal danke.
Titel: Antw:TabletUI unter iOS mit automatischem (!) VPN-Aufbau on demand
Beitrag von: setstate am 22 August 2017, 19:54:08
Diese Anleitung und das Thema ist mir auch erst diese Woche doch Zufall über den Weg gelaufen. Ausprobiert habe ich es noch nicht. Ich habe bis jetzt auch immer erst unter Einstellungen VPN anmachen müssen, mit dem obligatorischen Timeout beim ersten Mal.
Titel: Antw:TabletUI unter iOS mit automatischem (!) VPN-Aufbau on demand
Beitrag von: dadoc am 22 August 2017, 21:57:52
Folgende Punkte sind zu beachten:
1. Man muss in der Fritzbox einen Benutzer anlegen, dessen Benutzernamen und Passwort sowie das "Shared Secret" man später braucht, wenn man einen vollautomatischen VPN-Aufbau haben möchte. Daher in der Fritzbox-Oberfläche die Daten für die VPN-Verbindung zu einem iOS-Device anzeigen lassen. Achtung: das Shared Secret kann nicht einfach so in die Konfigurationsdatei übernommen werden, wie es in der Fritzbox-Oberfkäche angezeigt wird. Es muss base64-kodiert werden (siehe Kommentar im Code w.u.).2
2. Natürlich braucht man eine öffentlich zugängliche Adresse für die Fritzbox (wie für jede VPN-Verbindung). Das kann die myfritz.net-Adresse sein oder eine DynDNS-Adresse.
3. Man braucht den Namen des fhem-Rechners im Fritzbox-Netzwerk, also etwa fhemraspi.fritz.box. Ich glaube, die Fritzbox bestimmt im Zweifelsfall die Namen selbst. Unter Raspbian kann man beispielsweise den Namen des Rechners auf der Konsole mit dem hostname-Befehl festlegen.
4. Man braucht ein paar UUIDs, in meinem Beispiel vier Stück, wobei ich nicht wirklich sicher bin, ob man die wirklich alle braucht. Aber bei mir geht's damit jedenfalls. Wo man die ganz einfach generieren kann steht in den Kommentaren.
5. Der Name der XML-Datei (ich habe sie in Notepad+ erstellt) muss auf .mobileconfig enden.
6. Um das Profil auf dem iPhone zu installieren, habe ich es mir als Mail-Anhang geschickt (es gibt andere Methoden). Es sollte sich dann durch Antippen und nach einigen Abfragen und Warnungen installieren. Wenn stattdessen das Fenster mit den diversen Senden-an und Speichermöglichkeiten öffnet, gibt es Fehler in der XML-Datei.
7. Nach der Installation des Profils sollte man testen, ob damit ein manueller VPN-Aufbau klappt. Wenn ja, sollte es auch klappen, wenn man irgendeine Adresse in Safari aufruft, die auf fritz.box endet. Wenn man dann eine Seite über rechnername.fritz.box:8083/fhem/ftui aufruft und sie mit "Zum Homebildschirm hinzufügen" als Web-App speichert, hat man tatsächlich eine One-Klick-App, mit der man sich von überall, wo man Mobilfunk-Datennetz hat, ohne weitere Schritte verbinden kann.
8. Ich habe bei mir eine Regel drin, die den VPN-Aufbau verhindert, wenn das iPhone im heimischen WLAN ist.
9. Ich habe bei mir Username und Passwort im Profil; wem das zu heikel ist, kann die Abschnitte (vermutlich, ich habe es nicht getestet) auch weglassen, dann dürften sie bei jedem Verbindungsversuch abgefragt werden
Umfassende Infos zu allen möglichen Optionen/Regeln gibt es auf https://developer.apple.com/library/content/featuredarticles/iPhoneConfigurationProfileRef/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010206-CH1-SW41

Praktische Umsetzung vieler dieser Beispiele z.B. auf https://github.com/nerd-one/VPN-OnDemand/blob/master/VPN%20OnDemand.mobileconfig

Hier der Inhalt meiner .mobilconfig mit Kommentaren:
<?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>
<!-- Konfigurationsabschnitt für "IPSec" -->
<key>IPSec</key>
<dict>

<!-- Konfigurationsabschnitt für die Authentifizierungsmethode "SharedSecret" -->
<key>AuthenticationMethod</key>
<string>SharedSecret</string>
<key>LocalIdentifierType</key>
<string>KeyID</string>

<!-- Als RemoteAdress die öffentlich zugängliche Adresse (IP oder DNS Name) eintragen -->
<key>RemoteAddress</key>
<string>beispiel.myfritz.net</string>

<!-- Obacht - SharedSecret wie in der Fritzbox angezeigt muss base64 kodiert werden, z.B. auf https://www.base64encode.org/  -->
<key>SharedSecret</key>
<data>BeispielHierBase64Encoded Shared Secret</data>

<!-- Hier den Username eintragen, für die eine VPN Verbindung auf der Fritzbox erstellt wurde -->
<key>LocalIdentifier</key>
<string>BeispielIphoneondemand</string>

<key>XAuthEnabled</key>
<integer>1</integer>
<key>XAuthName</key>

<!-- Hier noch einmal den Username eintragen, für die eine VPN Verbindung auf der Fritzbox erstellt wurde -->
<string>BeispielIphoneondemand</string>

<!-- Hier FRITZ!Box Passwort des Benutzers, hier: BeispielIphoneondemand -->
<key>XAuthPassword</key>
<string>BeispielFritzBoxUserPassword</string>

<!-- Die On-demand-Funktion aktivieren (kann später über System - Einstellungen - VPN de-/aktiviert werden) -->
<key>OnDemandEnabled</key>
<integer>1</integer>

<!-- Regeln, wann "OnDemand" greifen (= verbinden) soll -->
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>Domains</key>
<array>
<!-- "OnDemand" greift, wenn eine URL eingegeben wird, die auf fritz.box endet -->
<string>*.fritz.box</string>
</array>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
</dict>
</array>
</dict>
<!-- VPN-Verbindung beenden, sobald das Gerät zu einem dieser WLAN-Netze verbindet -->
<dict>
<key>Action</key>
<string>Disconnect</string>
<key>InterfaceTypeMatch</key>
<string>WiFi</string>
<key>SSIDMatch</key>
<array>
<!-- Hier kann eines oder mehrere SSIDs eingetragen werden -->
<string>Beispiel1SSID</string>
<string>Beispiel2SSID</string>
</array>
</dict>
</array>
</dict>

<!-- IPv4 Konfiguration -->
<!-- OverridePrimary auf "1" bewirkt, dass der gesamte Traffic über das VPN Interface läuft -->
<key>IPv4</key>
<dict>
<key>OverridePrimary</key>
<integer>1</integer>
</dict>

<!-- Payload Information der eigentlichen Datei -->
<!-- In der Folge braucht man 4 unterschiedliche UUIDS (version 4-Typ), generieren z.B. auf https://www.uuidgenerator.net/version4 und hier UUID_1 bis UUID_4 ersetzen -->
<key>PayloadDescription</key>
<string>VPN OnDemand Settings</string>
<key>PayloadDisplayName</key>
<string>VPN</string>
<key>PayloadIdentifier</key>
<string>Beispiel.vpn.UUID_1</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>UUID_2</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 OnDemand</string>
<key>VPNType</key>
<string>IPSec</string>
</dict>
</array>

<!-- Payload Information -->

<key>PayloadDisplayName</key>
<string>VPN OnDemand</string>
<key>PayloadIdentifier</key>
<string>Beispiel.vpn.UUID_3</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>UUID_4</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>

Grüße
Martin