Skip to main content

Implementarea prin profiluri .mobileconfig

Creați un profil Apple .mobileconfig pentru a instala un tunel Vylos WireGuard ca element de sistem gestionat și doar în citire.

Alegerea tipului de profil

ObiectivTip de payload VPNCerințe de livrare
Direcționarea traficului eligibil al dispozitivului printr-un tunelcom.apple.vpn.managedInstalare directă sau livrare prin MDM.
Direcționarea aplicațiilor gestionate atribuite prin Vyloscom.apple.vpn.managed.applayerAtribuirile de producție necesită MDM chiar dacă profilul VPN este instalat direct.

Ambele profiluri creează în Vylos un tunel gestionat. Ele sunt diferite de configurarea aplicației gestionate, care controlează aplicația, dar nu instalează un VPN.

Locul fiecărei configurări

FuncțieLoc în profil
Interfața și peerii WireGuardVendorConfig.WgQuickConfigBase64 sau WgQuickConfig
DNS separat și domenii de căutareVendorConfig.VylosConfigBase64 sau VylosConfig
Activare automatăVPN.OnDemandEnabled și VPN.OnDemandRules
Blocarea conexiunilor fără VPNVPN.IncludeAllNetworks
Activare per aplicațieOnDemandMatchAppEnabled și VPNUUID la nivel superior
Restricții și preferințe VylosConfigurație gestionată a aplicației, nu profilul VPN

Exemplele de mai jos folosesc formatul listă de proprietăți Apple. Dacă MDM afișează un formular, reproduceți aceeași imbricare a dicționarelor și aceleași tipuri; nu transformați numele cu puncte în chei literale.

Transmiterea configurației WireGuard

Introduceți o singură cheie dintre cele de mai jos în dicționarul VendorConfig al payload-ului VPN:

CheieValoare
WgQuickConfigConținutul UTF-8 nemodificat, pe mai multe linii, al fișierului WireGuard .conf.
WgQuickConfigBase64Același conținut UTF-8 .conf, codificat Base64 pe o singură linie.

Dacă un câmp MDM nu păstrează liniile noi, folosiți WgQuickConfigBase64. Dacă payload-ul conține ambele chei, Vylos îl respinge deoarece sursa dorită este ambiguă.

Base64 este o codificare de transport, nu criptare. Valoarea codificată este textul .conf, nu un fișier .vylos, o arhivă ZIP sau o cale către aceste fișiere.

Pe macOS, următoarea comandă copiază în clipboard o valoare gata de lipit:

bash
base64 -i "tunnel.conf" | tr -d '\n' | pbcopy

base64 codifică fișierul, tr -d '\n' elimină liniile noi, iar pbcopy pune rezultatul în clipboard. În editorul cheie-valoare MDM, lipiți rezultatul pentru WgQuickConfigBase64 și omiteți WgQuickConfig.

Transmiterea configurărilor DNS separat

Când tunelul gestionat folosește DNS separat, adăugați exact una dintre următoarele chei opționale în același dicționar VendorConfig:

CheieValoare
VylosConfigText UTF-8 pe mai multe linii cu configurările Vylos în format settings.conf.
VylosConfigBase64Codificarea Base64 pe o singură linie a aceluiași text.

Folosiți VylosConfigBase64 cu MDM pentru ca editorul cheie-valoare să nu elimine sau să modifice întreruperile de linie. Creați un fișier ca acesta:

settings.conf
ini
[SplitDNS]
Domains = corp.example.com, *.internal.example.com
SearchDomains = example.com

Apoi copiați valoarea codificată în macOS:

bash
base64 -i "settings.conf" | tr -d '\n' | pbcopy

Lipiți-o ca VylosConfigBase64. Configurația WireGuard trebuie să includă și cel puțin un server DNS în [Interface]. Domains selectează interogările care folosesc acele servere, SearchDomains adaugă sufixe numelor de gazdă scurte, iar AllowedIPs continuă să controleze rutarea traficului.

Kill switch pentru tunelurile gestionate

Folosiți cheia Apple IncludeAllNetworks în dicționarul VPN pentru a oferi funcția kill switch unui tunel gestionat la nivelul dispozitivului:

xml
<key>IncludeAllNetworks</key>
<integer>1</integer>

Plasați-o lângă RemoteAddress și AuthenticationMethod. Configurați separat activarea automată prin OnDemandRules.

IncludeAllNetworks nu extinde rutele WireGuard din AllowedIPs. Împiedică traficul obișnuit să ocolească VPN-ul, dar AllowedIPs continuă să stabilească destinațiile pe care le poate transporta fiecare peer. Pentru un tunel dual-stack complet, folosiți 0.0.0.0/0 și ::/0. Rutele parțiale devin o listă strictă de permisiuni și trebuie să acopere fiecare server DNS din [Interface].

Apple păstrează excepții pentru traficul de control al rețelei și anumite servicii ale dispozitivului. Consultați câmpul IncludeAllNetworks al payloadului VPN înainte de implementare.

Profil la nivelul dispozitivului

Un tunel tradițional la nivelul dispozitivului folosește com.apple.vpn.managed. Înainte de implementare, înlocuiți toți identificatorii, UUID-urile, cheile, adresele și endpoint-urile din exemplu.

xml
<?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>

Generați UUID-uri unice cu uuidgen. Fiecare tunel suplimentar este un alt dicționar com.apple.vpn.managed în lista exterioară PayloadContent.

Pentru o valoare pe o singură linie, înlocuiți cheia WgQuickConfig și șirul multiliniar din exemplu cu:

xml
<key>WgQuickConfigBase64</key>
<string>BASE64_ENCODED_CONF</string>

Înlocuiți în același mod și cheia VylosConfig împreună cu șirul său multiliniar:

xml
<key>VylosConfigBase64</key>
<string>BASE64_ENCODED_SETTINGS_CONF</string>

Profil per aplicație

Folosiți com.apple.vpn.managed.applayer și furnizorul de tunel de pachete Vylos pentru rutarea WireGuard per aplicație. Payload-ul acceptă aceleași variante WgQuickConfig și WgQuickConfigBase64, plus configurările opționale DNS separat din VylosConfig sau VylosConfigBase64.

ConfigurareValoare
PayloadTypecom.apple.vpn.managed.applayer
VPNTypeVPN
VPNSubTypeio.cbnventures.vylos
VPN.ProviderBundleIdentifierio.cbnventures.vylos.packet-tunnel
VPN.ProviderTypepacket-tunnel
VPNUUIDValoare unică partajată de fiecare aplicație gestionată atribuită acestui VPN.
OnDemandMatchAppEnabledSetați true pentru conectare automată când aplicația atribuită începe comunicarea în rețea.

Dicționarul următor poate înlocui dicționarul VPN la nivelul dispozitivului din lista PayloadContent a profilului:

xml
<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>

Instalarea payload-ului creează VPN-ul, dar nu îi atribuie aplicații. Continuați cu Configurarea VPN per aplicație pentru a asocia aplicațiile gestionate cu același VPNUUID și pentru câmpurile de rutare acceptate.

Instalarea și eliminarea profilurilor

Livrați profilurile prin MDM pentru administrarea centralizată a proprietății, înlocuirii și eliminării. Dacă MDM nu este disponibil, utilizatorul poate instala direct un profil la nivelul dispozitivului și apoi îl poate elimina din configurările de administrare a profilurilor ale sistemului.

În ambele cazuri, Vylos îl tratează ca element deținut de profil și doar în citire. Metoda acceptată de modificare este actualizarea sau eliminarea profilului, nu editarea tunelului în Vylos.

Pentru experiența finală în aplicație, consultați Implementarea tunelurilor gestionate. Convențiile complete Apple se află în referințele VPN și AppLayerVPN.