iOS: VPN On-Demand-Profil für Verbindung zur FRITZ!Box in fremden WLAN-Netzwerken

Die unten dargestellte Profildatei ist zum Import auf einem iOS-Gerät vorgesehen, um in fremden (= nicht auf der Whitelist stehenden) WLAN- bzw. WiFi-Netzwerken immer automatisch eine VPN-Verbindung aufzubauen.

Das Shared Secret muss nach Base64 kodiert werden. Link zu einem Base64-Encoder

Die nachfolgende XML-Datei* basiert auf einer Version von GitHub. Die EvaluateConnection-Funktion wurde auskommentiert, damit immer eine VPN-Verbindung aufgebaut wird, und nicht nur bei bestimmten URLs im heimischen WLAN (z.B. zur FRITZ!Box oder *.local)

<?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>LocalIdentifier</key>
				<!-- FRITZ!Box Benutzername -->
				<string>FRITZ!Box Benutzername</string>
				<key>LocalIdentifierType</key>
				<string>KeyID</string>
				<key>RemoteAddress</key>
				<!-- DDNS-URL der FRITZ!Box -->				
				<string>DDNS-URL der FRITZ!Box</string>
				<key>SharedSecret</key>
				<data>
				xxxxxxxxxxxxxxxxxx
				</data>
				<key>XAuthEnabled</key>
				<integer>1</integer>
				<key>XAuthName</key>
				<!-- FRITZ!Box Benutzername -->
				<string>FRITZ!Box Benutzername</string>
				<key>XAuthPassword</key>
				<!-- FRITZ!Box Passwort des Benutzers -->
				<string>xxxxxxxxxxxxxxxxxx</string>
				<!-- VPN-On-Demand Codeblock -->
				<key>OnDemandEnabled</key>
				<integer>1</integer>
				<key>OnDemandRules</key>
				<array>
				<!-- VPN beim Zugriff auf Heimnetz-Adressen aufbauen -->
					<!-- <dict> -->
						<!-- <key>Action</key> -->
						<!-- <string>EvaluateConnection</string> -->
						<!-- <key>ActionParameters</key> -->
						<!-- <array> -->
							<!-- <dict> -->
								<!-- <key>Domains</key> -->
								<!-- <array> -->
									<!-- <string>*.local</string> -->
									<!-- <string>*.fritz.box</string> -->
									<!-- <string>fritz.box</string> -->
								<!-- </array> -->
								<!-- <key>DomainAction</key> -->
								<!-- <string>ConnectIfNeeded</string> -->
							<!-- </dict> -->
						<!-- </array> -->
					<!-- </dict> -->
					<dict>
						<!-- VPN bei ausgewählten WLAN-Netzen deaktivieren -->
						<key>InterfaceTypeMatch</key>
						<string>WiFi</string>
						<key>SSIDMatch</key>
						<array>
							<string>Name of my Home Network</string>
							<string>Company WiFi</string>
						</array>
						<key>Action</key>
						<string>Disconnect</string>
					</dict>
					<dict>
						<!-- VPN bei aktiver WLAN-Verbindung aktivieren -->
						<key>InterfaceTypeMatch</key>
						<string>WiFi</string>
						<key>Action</key>
						<string>Connect</string>
					</dict>
					<dict>
						<!-- VPN im Mobilfunknetz nicht aktivieren -->
						<key>InterfaceTypeMatch</key>
						<string>Cellular</string>
						<key>Action</key>
						<string>Disconnect</string>
					</dict>
					<dict>
						<!-- VPN Default state -->
						<key>Action</key>
						<string>Disconnect</string>
					</dict>
				</array>
				<!-- VPN-On-Demand Codeblock ENDE-->
			</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>com.apple.vpn.managed.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string>
			<key>PayloadType</key>
			<string>com.apple.vpn.managed</string>
			<key>PayloadUUID</key>
			<!-- PayloadUUID -->
			<string>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string>
			<key>PayloadVersion</key>
			<real>1</real>
			<key>Proxies</key>
			<dict>
				<key>HTTPEnable</key>
				<integer>0</integer>
				<key>HTTPSEnable</key>
				<integer>0</integer>
			</dict>
			<key>UserDefinedName</key>
			<string>VPN FRITZ!Box</string>
			<key>VPNType</key>
			<string>IPSec</string>
		</dict>
	</array>
	<key>PayloadDisplayName</key>
	<string>VPN on Demand-Profildatei</string>
	<key>PayloadIdentifier</key>
	<!-- PayloadIdentifier -->
	<string>xxxxxxxxxxxxxxxxxx</string>
	<key>PayloadRemovalDisallowed</key>
	<false/>
	<key>PayloadType</key>
	<string>Configuration</string>
	<key>PayloadUUID</key>
	<!-- PayloadUUID -->
	<string>xxxxxxxxxxxxxxxxxx</string>
	<key>PayloadVersion</key>
	<integer>1</integer>
</dict>
</plist>

Die Datei muss mit der Dateiendung .mobileconfig gespeichert werden, z.B. vpn.mobileconfig

Diese Profildatei wurde erfolgreich unter iOS 13.4.1 getestet.

* XML = Extensible Markup Language