Déployer avec des profils .mobileconfig
Créez des profils Apple .mobileconfig qui installent les tunnels WireGuard Vylos en tant qu’entrées système gérées et en lecture seule.
Choisir un type de profil
| Objectif | Type de payload VPN | Condition de distribution |
|---|---|---|
| Acheminer le trafic admissible de l’appareil par un tunnel | com.apple.vpn.managed | Installer directement ou distribuer par MDM. |
| Acheminer les apps gérées attribuées par Vylos | com.apple.vpn.managed.applayer | Le MDM est obligatoire pour les attributions d’apps en production, même si le profil VPN a été installé directement. |
Les deux types de profils créent dans Vylos un tunnel géré. Ils sont distincts de la configuration d’app gérée, qui contrôle le comportement de l’app sans installer de VPN.
Emplacement de chaque réglage
| Fonction | Emplacement dans le profil |
|---|---|
| Interface et pairs WireGuard | VendorConfig.WgQuickConfigBase64 ou WgQuickConfig |
| DNS fractionné et domaines de recherche | VendorConfig.VylosConfigBase64 ou VylosConfig |
| Activation automatique | VPN.OnDemandEnabled et VPN.OnDemandRules |
| Blocage des connexions sans VPN | VPN.IncludeAllNetworks |
| Activation par app | OnDemandMatchAppEnabled et VPNUUID au niveau supérieur |
| Restrictions et préférences Vylos | Configuration d’app gérée, pas le profil VPN |
Les exemples ci-dessous utilisent le format de liste de propriétés d’Apple. Si votre MDM présente un formulaire, reproduisez la même imbrication de dictionnaires et les mêmes types ; ne transformez pas les noms à points en clés littérales.
Transport de la configuration WireGuard
Placez exactement l’une des clés suivantes dans le dictionnaire VendorConfig du payload VPN :
| Clé | Valeur |
|---|---|
WgQuickConfig | Contenu UTF-8 multiligne brut d’un fichier WireGuard .conf. |
WgQuickConfigBase64 | Encodage Base64 sur une seule ligne du même contenu UTF-8 du fichier .conf. |
Utilisez WgQuickConfigBase64 lorsqu’un champ MDM ne conserve pas les sauts de ligne. Vylos refuse un payload contenant les deux clés, car la source à utiliser serait ambiguë.
Base64 est un encodage de transport, pas un chiffrement. La valeur encodée correspond au texte du fichier .conf lui-même : ce n’est ni un fichier .vylos, ni une archive ZIP, ni un chemin vers l’un d’eux.
Sous macOS, cette commande copie une valeur prête à coller dans le presse-papiers :
base64 -i "tunnel.conf" | tr -d '\n' | pbcopy
base64 encode le fichier, tr -d '\n' supprime les sauts de ligne de la sortie encodée et pbcopy place le résultat dans le presse-papiers. Dans l’éditeur clé-valeur d’un MDM, collez le résultat sous WgQuickConfigBase64 et omettez WgQuickConfig.
Transport des réglages DNS fractionné
Lorsque le tunnel géré utilise le DNS fractionné, ajoutez exactement l’une des clés facultatives suivantes au même dictionnaire VendorConfig :
| Clé | Valeur |
|---|---|
VylosConfig | Texte UTF-8 multiligne des réglages Vylos au format settings.conf. |
VylosConfigBase64 | Encodage Base64 sur une seule ligne du même texte. |
Utilisez VylosConfigBase64 avec un MDM afin que l’éditeur clé-valeur ne supprime ni ne modifie les sauts de ligne. Créez un fichier comme celui-ci :
[SplitDNS]
Domains = corp.example.com, *.internal.example.com
SearchDomains = example.com
Copiez ensuite la valeur encodée sous macOS :
base64 -i "settings.conf" | tr -d '\n' | pbcopy
Collez-la sous VylosConfigBase64. La configuration WireGuard doit aussi contenir au moins un serveur DNS dans [Interface]. Domains sélectionne les requêtes qui utilisent ces serveurs, SearchDomains ajoute des suffixes aux noms d’hôte courts et AllowedIPs continue de contrôler le routage du trafic.
Coupe-circuit des tunnels gérés
Utilisez la clé Apple IncludeAllNetworks dans le dictionnaire VPN afin de donner un comportement de coupe-circuit à un tunnel géré pour tout l’appareil :
<key>IncludeAllNetworks</key>
<integer>1</integer>
Placez-la à côté de RemoteAddress et AuthenticationMethod. Configurez séparément l’activation automatique avec OnDemandRules.
IncludeAllNetworks n’élargit pas les routes WireGuard de AllowedIPs. Cette clé empêche le trafic ordinaire de contourner le VPN, mais AllowedIPs détermine toujours les destinations que chaque pair peut transporter. Utilisez 0.0.0.0/0 et ::/0 pour un tunnel complet double pile ; les routes partielles deviennent une liste d’autorisation stricte et elles doivent aussi couvrir chaque serveur DNS de [Interface].
Apple conserve des exceptions pour le trafic de contrôle du réseau et certains services de l’appareil. Consultez le champ IncludeAllNetworks du payload VPN avant le déploiement.
Profil pour tout l’appareil
Utilisez com.apple.vpn.managed pour un tunnel conventionnel couvrant tout l’appareil. Remplacez chaque identifiant, UUID, clé, adresse et point de terminaison d’exemple avant le déploiement.
<?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>PayloadDisplayName</key>
<string>Vylos Managed Tunnel</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000003</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadDisplayName</key>
<string>VPN</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn.corp</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000004</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserDefinedName</key>
<string>Corporate VPN</string>
<key>VPNType</key>
<string>VPN</string>
<key>VPNSubType</key>
<string>io.cbnventures.vylos</string>
<key>VendorConfig</key>
<dict>
<key>WgQuickConfig</key>
<string>[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
Address = 10.0.0.2/32
DNS = 10.0.0.1
[Peer]
PublicKey = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=
AllowedIPs = 0.0.0.0/0
Endpoint = vpn.example.com:51820
PersistentKeepalive = 25
</string>
<key>VylosConfig</key>
<string>[SplitDNS]
Domains = corp.example.com, *.internal.example.com
SearchDomains = example.com
</string>
</dict>
<key>VPN</key>
<dict>
<key>RemoteAddress</key>
<string>vpn.example.com</string>
<key>AuthenticationMethod</key>
<string>Password</string>
</dict>
</dict>
</array>
</dict>
</plist>
Générez des UUID uniques avec uuidgen. Chaque tunnel supplémentaire correspond à un autre dictionnaire com.apple.vpn.managed dans le tableau PayloadContent externe.
Pour utiliser une valeur sur une seule ligne, remplacez la clé WgQuickConfig d’exemple et sa chaîne multiligne par :
<key>WgQuickConfigBase64</key>
<string>BASE64_ENCODED_CONF</string>
Remplacez de la même manière la clé VylosConfig et sa chaîne multiligne :
<key>VylosConfigBase64</key>
<string>BASE64_ENCODED_SETTINGS_CONF</string>
Profil VPN par app
Utilisez com.apple.vpn.managed.applayer avec le fournisseur de tunnel de paquets Vylos pour le routage WireGuard par app. Le payload accepte les mêmes alternatives WgQuickConfig et WgQuickConfigBase64, ainsi que les réglages DNS fractionné facultatifs dans VylosConfig ou VylosConfigBase64.
| Réglage | Valeur |
|---|---|
PayloadType | com.apple.vpn.managed.applayer |
VPNType | VPN |
VPNSubType | io.cbnventures.vylos |
VPN.ProviderBundleIdentifier | io.cbnventures.vylos.packet-tunnel |
VPN.ProviderType | packet-tunnel |
VPNUUID | Valeur unique partagée avec chaque app gérée attribuée à ce VPN. |
OnDemandMatchAppEnabled | true pour se connecter lorsqu’une app attribuée commence à communiquer sur le réseau. |
Le dictionnaire suivant peut remplacer le dictionnaire VPN pour tout l’appareil dans le tableau PayloadContent du profil :
<dict>
<key>PayloadDisplayName</key>
<string>Vylos Per-App VPN</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn.per-app</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed.applayer</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000005</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserDefinedName</key>
<string>Corporate Per-App VPN</string>
<key>VPNType</key>
<string>VPN</string>
<key>VPNSubType</key>
<string>io.cbnventures.vylos</string>
<key>VPNUUID</key>
<string>00000000-0000-0000-0000-000000000006</string>
<key>OnDemandMatchAppEnabled</key>
<true/>
<key>VendorConfig</key>
<dict>
<key>WgQuickConfigBase64</key>
<string>BASE64_ENCODED_CONF</string>
<key>VylosConfigBase64</key>
<string>BASE64_ENCODED_SETTINGS_CONF</string>
</dict>
<key>VPN</key>
<dict>
<key>AuthenticationMethod</key>
<string>Password</string>
<key>RemoteAddress</key>
<string>vpn.example.com</string>
<key>ProviderBundleIdentifier</key>
<string>io.cbnventures.vylos.packet-tunnel</string>
<key>ProviderType</key>
<string>packet-tunnel</string>
<key>OnDemandEnabled</key>
<integer>1</integer>
</dict>
</dict>
L’installation de ce payload crée le VPN, mais ne lui attribue aucune app. Poursuivez avec Configurer le VPN par app pour associer les apps gérées au même VPNUUID et comprendre les champs de routage pris en charge.
Installer et supprimer des profils
Distribuez les profils par MDM pour centraliser leur propriété, leur remplacement et leur suppression. En l’absence de MDM, un utilisateur peut aussi installer directement un profil couvrant tout l’appareil, puis le supprimer dans les réglages de gestion des profils du système d’exploitation.
Vylos considère les deux méthodes comme gérées par le profil et en lecture seule. Pour modifier le tunnel, il faut mettre à jour ou supprimer le profil, et non le modifier dans Vylos.
Consultez Déployer des tunnels gérés pour l’expérience obtenue dans l’app. Pour le contrat de payload complet d’Apple, consultez les références VPN et AppLayerVPN.