VPN auf iOS so einrichten, dass es bei jeder Verbindung genutzt wird

C

crake

Aktives Mitglied
Thread Starter
Dabei seit
19.11.2003
Beiträge
180
Reaktionspunkte
0
Hallo allerseits

Ich habe auf meinem iPhone eine VPN-Verbindung konfiguriert, jedoch muss ich sie immer zuerst manuell in den Einstellungen einschalten.

Gibt es eine Möglichkeit, dass diese VPN-Verbindung immer automatisch hergestellt wird? Ich möchte dies nicht nur für einzelne Apps oder Domains, sondern für den gesamten Datenverkehr des iPhones. Egal ob dieser im Ruhezustand oder bei "direkter Benutzung" erfolgt.

Soweit ich bisher in Erfahrung bringen konnte, scheint es eine Möglichkeit mittels Profilen zu geben.

Hat das schon mal jemand gemacht und hat evtl. eine Schritt-für-Schritt-Anleitung?

Danke!
 
Das nennt sich "VPN on Demand" bei mir war das vor etwa 2 Monaten auch ein Thema und ich habe lange daran gehabt, weil man nicht sehr viele Informationen dazu findet und wenn man was gefunden hat dann war es nur teils korrekt. Fakt ist es geht über den Apple Configurator den man im App Store runter laden kann oder man macht es direkt in der XML-Datei (mobileconfig) da muss man aber die Struktur des XML kennen (nicht gerade easy). Dann kommt noch hinzu das die Sache aktuell auf iOS-Geräten nur über IPSec von Cisco und OpenVPN (Protokoll) läuft, alles andere geht nicht. Der Grund dafür ist das die Authentifizierung nur über Zertifikate klappt (Einschränkung von iOS). Du siehst also es ist nicht ganz ohne.

So ich habe es bei mir nun über OpenVPN gelöst und das läuft auf meinem Synology NAS. Eine Schritt für Schritt Anleitung habe ich nicht aber ich habe viele Infos hier gefunden. Achtung das alleine reicht noch nicht, OpenVPN auf dem NAS über Zertifikat ist dann noch ein anderes Thema.

Kurz gesagt, es braucht

- OpenVPN mit einem Server und Client Zertifikat (p12-Datei), kann man alles auf dem NAS machen
- dann Apple Configurator
- und XML (mobileconfig) das von Apple Configurator erstellt wurde, noch manuell ein paar Anpassungen (Fein-Tuning)

Es ist wie gesagt nicht so einfach und es gibt keine fertige One-Click Lösung, aber es ist eine spannende Sache und es funktioniert am Ende und ist eine feine Sache. Man startet auf dem iOS eine App und im Hintergrund wird automatisch die VPN-Verbindung erstellt.

Gruss
 
  • Gefällt mir
Reaktionen: Mahonra und cusquito
Wow, danke. Das hilft ja schon mal weiter.

Ob ich dich darum bitten darf, deine xml-Datei (anonymisiert) zu posten?
 
Gibts hier keinen Dankebuttone mehr? Danke :)
 
  • Gefällt mir
Reaktionen: Kuddl
Hallo

Ich kann Dir hier schon mal meine mobileconfig posten (Werte sind natürlich angepasst), doch die nützt Dir eigentlich nicht sehr viel, klar Du siehst mal wie sie aufgebaut ist.

<?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>HasRemovalPasscode</key>
<false/>
<key>PayloadContent</key>
<array>
<dict>
<key>Password</key>
<string>SECRET</string>
<key>PayloadCertificateFileName</key>
<string>client.p12</string>
<key>PayloadContent</key>
<data>
IMH....Amg
</data>
<key>PayloadDescription</key>
<string>Configures certificate settings.</string>
<key>PayloadDisplayName</key>
<string>client.p12</string>
<key>PayloadIdentifier</key>
<string>macbook-pro.local.95955BE1-88C8-4568-5622-EAEF41B873E6.com.apple.security.pkcs12.E3E1EC13-BB1A-37E0-2B1E-5E5EE11A21D2</string>
<key>PayloadType</key>
<string>com.apple.security.pkcs12</string>
<key>PayloadUUID</key>
<string>E3E1EC13-BB1A-37E0-2B1E-5E5EE11A21D2</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
<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>macbook-pro.local.95955BE1-88C8-4568-5622-EAEF41B873E6.com.apple.vpn.managed.FA5AD039-4A13-8C1B-BA44-17DD3599C71C</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>0B7E8B62-C2D6-4BA9-9C13-65F927D53C4F</string>
<key>PayloadVersion</key>
<real>1</real>
<key>Proxies</key>
<dict/>
<key>UserDefinedName</key>
<string>VPN</string>
<key>VPN</key>
<dict>
<key>AuthenticationMethod</key>
<string>Certificate</string>
<key>DisconnectOnIdle</key>
<integer>1</integer>
<key>DisconnectOnIdleTimer</key>
<integer>120</integer>
<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>Disconnect</string>
<key>SSIDMatch</key>
<array>
<string>MYWLANSSID</string>
</array>
</dict>
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
<key>Domains</key>
<array>
<string>*.myhomedomain.local</string>
</array>
<key>RequiredURLStringProbe</key>
<string>http://nas.myhomedomain.local/index.html</string>
</dict>
</array>
</dict>
<dict>
<key>Action</key>
<string>Connect</string>
</dict>
</array>
<key>PayloadCertificateUUID</key>
<string>E3E1EC13-BB1A-37E0-2B1E-5E5EE11A21D2</string>
<key>RemoteAddress</key>
<string>myhomedomain.com</string>
</dict>
<key>VPNSubType</key>
<string>net.openvpn.OpenVPN-Connect.vpnplugin</string>
<key>VPNType</key>
<string>VPN</string>
<key>VendorConfig</key>
<dict>
<key>auth-user-pass</key>
<string>USER\nPASS</string>
<key>ca</key>
<string>-----BEGIN CERTIFICATE-----\mH...Unm\n-----END CERTIFICATE-----\n</string>
<key>comp-lzo</key>
<string>NOARGS</string>
<key>dev</key>
<string>tun</string>
<key>dhcp-option</key>
<string>DNS 192.168.1.1</string>
<key>proto</key>
<string>udp</string>
<key>pull</key>
<string>NOARGS</string>
<key>redirect-gateway</key>
<string>NOARGS</string>
<key>remote</key>
<string>myhomedomain.com 1234</string>
<key>reneg-sec</key>
<string>8640000</string>
<key>script-security</key>
<string>2</string>
<key>tls-client</key>
<string>NOARGS</string>
</dict>
</dict>
</array>
<key>PayloadDescription</key>
<string>OpenVPN Profile for VPN on Demand</string>
<key>PayloadDisplayName</key>
<string>OpenVPN</string>
<key>PayloadIdentifier</key>
<string>macbook-pro.local.95955BE1-88C8-4568-5622-EAEF41B873E6</string>
<key>PayloadOrganization</key>
<string>MyName</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>145C77E1-BB14-4DDB-B12C-25F98D4CF864</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>

Ich finde es ehrlich gesagt sehr merkwürdig das man nicht mehr über das Thema findet, denn es ist wirklich eine super und vorallem sehr bequeme Sache. Gut vielleicht kennen einfach die Leute "VPN on Demand" zu wenig, doch ich denke dahin sollte es die nächste Monate und Jahre gehen, nicht das der Benutzer die Verbindung jeweils selber aufbauen muss, wo möglich noch durch diverse Menüs durch gehen muss bis die Verbindung steht.

Vielleicht noch eine kurze Erklärung dazu, bei mir soll das iOS-Gerät eine VPN Verbindung aufbauen sobald ich eine Adresse (*.myhomedomain.local) aufrufe, egal über welche App ausser wenn ich in meinem WLAN daheim bin (MYWLANSSID) dann benötige ich die VPN Verbindung nicht, aber sonst wird immer die VPN Verbindung im Hintergrund hergestellt. Beispiel ich starte Goodreader und möchte auf mein NAS über (nas.myhomedomain.local) zugreifen, dann wird die Verbindung aufgebaut.

Wenn noch Fragen sind, einfach melden.

Gruss
 
Ich bin nicht im Thema, aber "VPN on Demand" hab ich noch nie gehört. Was ich aber noch als markingen werbespruch von der Keynote vor Augen habe ist "per App VPN"

gebt das doch mal bei Google ein...
 
@tocotronaut

Genau das hat Apple mal so angekündigt und ich habe dies auch angeschaut, doch so wie ich dies verstanden habe muss dies zum einen die App können und zudem geht dies nur über die Apple MDM Lösung (Profilemanager - OSX Server).

Gruss
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: dg2rbf
@4um

Doch das geht glaube ich schon, aber das muss die App können, das wird glaube ich da gesteuert. Ich glaube die Idee dahinter ist auch mehr dass man dies bei firmen internen iOS Apps nutzt und nicht bei Apps aus dem App Store. So können Firmen da sicher gehen das die Verbindung in ihr Netz zu 100% über eine VPN Verbindung läuft und die Firma muss nicht diverse Ports in der Firewall öffnen.

Gruss
 
Kannst du mir vl. nochmal auf die Sprünge helfen?

Ich will das ein VPN zur FB aufgebaut wird, wenn:
1. Ich 10.30.50.1 aufrufe, um die Oberfläche der FB mit Safari zu bedienen
2. SIP App geöffnet wird und diese versucht sich über 10.30.50.1 mit der der FB zu verbinden

Pkt. 1 klappt (Safari)
Pkt. 2 klappt. ABER nur, weil "Softphone" für diesen Fall einen Hack vorgesehen, der eine beliebige Adresse über http vor dem Verbindungsaufbau aufruft.
In meinem Fall die 10.30.50.1.

Da Pkt.2 nicht ganz sauber ist und der VPN auch noch mit VNC und andere Spielereien funktioniere soll, die Frage.
Die Regel habe von dir übernommen und der Part, dass der VPN nur von außerhalb aufgebaut werden soll, klappt auch wunderbar.

<array>
<dict>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
<key>Domains</key>
<array>
<string>*.10.30.50.1</string>
</array>
<key>RequiredURLStringProbe</key>
<string>10.30.50.1</string>
</dict>
</array>

Idee?


PS: Mit AFP auf den Mac über der Goodreader startet auch der VPN.
Kann es sein, dass bei SIP und VNC die URL irgendwie anders übergeben wird und das ganze an den Regeln vorbei geht?
 
@4um

Also VPN on Demand geht mit der Fritz-Box nicht, dass wird bis jetzt leider nicht von AVM uterstützt. VPN on Demand geht nur über OpenVPN was zum Beispiel auf einem Synology NAS geht. Ich habe bei mir auch eine Fritz-Box als Router im Einsatz, doch da läuft kein VPN, das VPN ist auf dem Synology NAS aktiv und da habe ich dann wie beschrieben VPN on Deman eingebaut.

Das Protokoll IPSec von Cisco würde auch noch VPN on Demand unterstützen, doch dies ist nur für Cisco-Geräte patentiert und somit steht dies für Apple nicht zur Verfügung. Normales VPN (ohne "on Demand) geht schon über IPSec.

Viele Grüsse
 
  • Gefällt mir
Reaktionen: dg2rbf
Ich gebe zu nicht fit in der Materie zu sein, aber es funktioniert hier.

- FB7390 mit eingerichtetem VPN
- Manuell einschaltbar vom Mac und iPhone via IPSec/ Cisco
- Dank deiner Vorlage automatisch aktiviert, wenn iPhone/ Mac nicht im Heimnetzwerk und 10.30.50.1 versucht wird zu erreichen

Problem ist, dass eben nicht aus jeder App das OnDemand aus dem Profil angesprochen wird, sobald die 10.30.50.1 aufgerufen wird.
Verstehen nicht was die FB bezüglich OnDemand können muss.
Das Profil wird doch am iPhone/ Mac installiert und besagt doch nur, dass sobald eine bestimmte IP aufgerufen wird, eine VPN Verbindung zur heimischen FB aufgebaut werden soll, sofern nicht im Heimnetzwerk.

..lese deinen Text nochmals ;D Liest sich als würdest du davon ausgehen, dass die FB einen VPN Verbindung initiieren soll. Richtig?
Wenn ja, NEIN! iOS/ Mac OS geben den Verbindungsbefehl.
Jetzt haben wir den Salat. Wissen trifft auf Halbwissen und man redet aneinander vorbei.
Kannst du meinem Problem noch folgen, oder habe ich zu viel durcheinandergeworfen?
 
Also Dein Problem verstehe ich schon, doch ich bin ehrlich gesagt verwundert das es überhaupt geht weil wie gesagt gemäss AVM und Apple geht über IPSec kein "OnDemand" aber vielleicht hat sich ja da was in den letzten Wochen geändert.

Poste doch mal Deine mobileconfig hier (Daten einfach ändern), vielleicht kommen wir so weiter.

Der Trigger der "OnDemand" auslöst sollte auf jeden Fall auf dem iPhone/iPad der Netzwerk-Layer sein, der prüft die Zieladresse und schaltet dann je nach Bedarf VPN ein und somit sollte es so eigentlich aus jeder App funktionieren.

Gruss
 
Den entscheiden Teil habe ich zwar bereits gepostet, aber hier. Das Profil baut zu 90% auf deiner Vorlage auf

<?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>HasRemovalPasscode</key>
<false/>
<key>PayloadContent</key>
<array>
<dict>
<key>IPSec</key>
<dict>
<key>AuthenticationMethod</key>
<string>SharedSecret</string>
<key>LocalIdentifier</key>
<string>GruppenName_XXXXXXXXX</string>
<key>LocalIdentifierType</key>
<string>KeyID</string>
<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>Disconnect</string>
<key>SSIDMatch</key>
<array>
<string>AirPortFB</string>
</array>
</dict>
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
<key>Domains</key>
<array>
<string>*.10.30.50.1</string>
</array>
<key>RequiredURLStringProbe</key>
<string>10.30.50.1</string>
</dict>
</array>
</dict>
<dict>
<key>Action</key>
<string>Connect</string>
</dict>
</array>
<key>RemoteAddress</key>
<string>xxxxxxxxxxxxxxxxxxxxxxx.myfritz.net</string>
<key>SharedSecret</key>
<data>
U2hhcmVAS0V5X1hYWFhYWFhYWA==
</data>
<key>XAuthEnabled</key>
<integer>1</integer>
<key>XAuthName</key>
<string>AcountName_XXX</string>
<key>XAuthPassword</key>
<string>Kennwort_XXXXXX</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>aero.fritz.box.A39D4BP7-4952-4A7B-9061-8B9E4F779DAA.com.apple.vpn.managed.834A36AB-C739-4505-AF10-B282C09DFB76</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>834A36EB-P739-4505-AF10-B282C09DFB76</string>
<key>PayloadVersion</key>
<real>1</real>
<key>Proxies</key>
<dict/>
<key>UserDefinedName</key>
<string>VPN_NAME_XXXXXXXXX</string>
<key>VPNType</key>
<string>IPSec</string>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>Ich</string>
<key>PayloadIdentifier</key>
<string>aero.fritz.box.O37D4BC7-4952-4A7B-9061-8B9E4F779DAA</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>6F51A990-U6B2-454F-BC0D-B4B471F1BFF0</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>

Und nochmal. VPN wird in Safari und Goodreader aufgebaut, sobald nach 10.30.50.1 gefragt wird. In der Softphone App nicht, obwohl als Domäne 10.30.50.1 hinterlegt ist.
Für diesen Fall hat der Entwickler die Funktion eingebaut:
IMG_0926.PNG
Daher auch meine Frage, ob bei SIP und evtl. VNC die URL anderes übergeben wird und die Regel aus dem Profil gar nichts mitbekommt
 
  • Gefällt mir
Reaktionen: Mahonra
Kleine Ergänzung noch. Vl. denkst du deswegen, es ginge nicht mit IPSec.
Mein gepostetes Profil lässt sich so nicht direkt im Configurator erstellen!
Mit aktivierter Geräte Authentifizierung = SharedKey Gruppenname wird OnDemand nicht angeboten,
nur mit Geräte Authentifizierung = Zertifikat.
Habe den ersten Fall gewählt und nachträglich mit einem PlistEditor folgendes an der richtigen Stelle eingefügt.

<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>Disconnect</string>
<key>SSIDMatch</key>
<array>
<string>AirPortFB</string>
</array>
</dict>
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
<key>Domains</key>
<array>
<string>*.10.30.50.1</string>
</array>
<key>RequiredURLStringProbe</key>
<string>10.30.50.1</string>
</dict>
</array>
</dict>
<dict>
<key>Action</key>
<string>Connect</string>
</dict>
</array>

So klappt es dann auch, bis auf den Fall SIP, VNC
 
Hey Du hast recht, es klappt wirklich mit der Fritz-Box (IPSec - VPN On Demand). Ich habe das bei mir soeben mal in der Config angepasst und siehe da es klappt. Wieder was dazu gelernt.

Ich habe das "On Demand" mal für mein NAS (Synology-Apps) getestet und da wird die Verbindung aufgebaut. Aktuell habe ich wohl keine weitere App auf meinem iPhone wo ich VPN auch noch testen könnte.

Gruss
 
@4um

VNC kann ich auf jeden Fall mal testen.

Mir ist noch aufgefallen dass Du mit IP-Adressen bei den Rules arbeitest, gibt es dafür einen Grund? Oder weshalb arbeitest Du nicht direkt mit den DNS-Namen der Fritz (also *.fritz.box)?

Viele Grüsse
 
Zurück
Oben Unten