Перейти к основному содержимому

Развёртывание с помощью профилей .mobileconfig

Создайте профиль Apple .mobileconfig, чтобы установить туннель Vylos WireGuard как управляемый системный объект только для чтения.

Выбор типа профиля

ЦельТип данных VPNТребования
Направить подходящий трафик устройства через один туннельcom.apple.vpn.managedПрямая установка или доставка через MDM.
Направить назначенные управляемые приложения через Vyloscom.apple.vpn.managed.applayerДля рабочих назначений приложений требуется MDM, даже если VPN-профиль установлен напрямую.

Оба профиля создают в Vylos управляемый туннель. Они отличаются от управляемой конфигурации приложения, которая управляет поведением приложения, но не устанавливает VPN.

Где задаётся каждый параметр

ВозможностьРасположение в профиле
Интерфейс и пиры WireGuardVendorConfig.WgQuickConfigBase64 или WgQuickConfig
Раздельная DNS и поисковые доменыVendorConfig.VylosConfigBase64 или VylosConfig
Автоматическая активацияVPN.OnDemandEnabled и VPN.OnDemandRules
Блокировка соединений без VPNVPN.IncludeAllNetworks
Активация для приложенийOnDemandMatchAppEnabled и VPNUUID верхнего уровня
Ограничения и параметры VylosУправляемая конфигурация приложения, не VPN-профиль

В примерах ниже используется формат списка свойств Apple. Если MDM показывает форму, воспроизведите ту же вложенность словарей и типы значений; не превращайте имена с точками в буквальные ключи.

Передача конфигурации WireGuard

Поместите в словарь VendorConfig данных VPN только один из ключей:

КлючЗначение
WgQuickConfigНеизменённое многострочное содержимое UTF-8 файла WireGuard .conf.
WgQuickConfigBase64То же содержимое UTF-8 .conf, закодированное в одну строку Base64.

Если поле MDM не сохраняет переносы строк, используйте WgQuickConfigBase64. Если присутствуют оба ключа, Vylos отклонит данные из-за неоднозначного источника.

Base64 — транспортное кодирование, а не шифрование. Кодируется сам текст .conf, а не файл .vylos, ZIP-архив или путь к ним.

В macOS следующая команда копирует готовое значение в буфер обмена:

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

base64 кодирует файл, tr -d '\n' удаляет переносы строк, а pbcopy помещает результат в буфер обмена. В редакторе MDM вставьте результат как WgQuickConfigBase64 и не добавляйте WgQuickConfig.

Передача параметров раздельной DNS

Если управляемый туннель использует раздельную DNS, добавьте ровно один из следующих необязательных ключей в тот же словарь VendorConfig:

КлючЗначение
VylosConfigМногострочный текст UTF-8 с параметрами Vylos в формате settings.conf.
VylosConfigBase64Однострочная кодировка Base64 того же текста.

При развёртывании через MDM используйте VylosConfigBase64, чтобы редактор «ключ — значение» не удалил и не изменил переносы строк. Создайте файл следующего вида:

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

Затем скопируйте закодированное значение в macOS:

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

Вставьте результат в VylosConfigBase64. Конфигурация WireGuard также должна содержать хотя бы один сервер DNS в разделе [Interface]. Domains выбирает запросы для этих серверов, SearchDomains добавляет суффиксы к коротким именам узлов, а AllowedIPs по-прежнему управляет маршрутизацией трафика.

Аварийная блокировка управляемых туннелей

Чтобы включить аварийную блокировку для управляемого общесистемного туннеля, используйте ключ Apple IncludeAllNetworks в словаре VPN:

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

Разместите его рядом с RemoteAddress и AuthenticationMethod. Автоматическую активацию настройте отдельно с помощью OnDemandRules.

IncludeAllNetworks не расширяет маршруты WireGuard в AllowedIPs. Он не позволяет обычному трафику обходить VPN, но AllowedIPs по-прежнему определяет доступные через каждый пир адреса. Для полного туннеля с IPv4 и IPv6 используйте 0.0.0.0/0 и ::/0. Частичные маршруты становятся строгим списком разрешённых адресов и должны также охватывать каждый DNS-сервер из [Interface].

Apple сохраняет исключения для трафика управления сетью и некоторых служб устройства. Перед развёртыванием ознакомьтесь с полем IncludeAllNetworks VPN-профиля.

Общесистемный профиль

Обычный общесистемный туннель использует com.apple.vpn.managed. Перед развёртыванием замените все примерные идентификаторы, UUID, ключи, адреса и конечные точки.

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>

Создайте уникальные UUID командой uuidgen. Каждый дополнительный туннель — ещё один словарь com.apple.vpn.managed во внешнем массиве PayloadContent.

Для однострочного значения замените ключ WgQuickConfig и многострочное значение на:

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

Таким же образом замените ключ VylosConfig и его многострочное значение:

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

Профиль для отдельных приложений

Для маршрутизации WireGuard по приложениям используйте com.apple.vpn.managed.applayer и поставщик пакетного туннеля Vylos. Поддерживаются те же варианты WgQuickConfig и WgQuickConfigBase64, а также необязательные параметры раздельной DNS в VylosConfig или VylosConfigBase64.

ПараметрЗначение
PayloadTypecom.apple.vpn.managed.applayer
VPNTypeVPN
VPNSubTypeio.cbnventures.vylos
VPN.ProviderBundleIdentifierio.cbnventures.vylos.packet-tunnel
VPN.ProviderTypepacket-tunnel
VPNUUIDУникальное значение, общее для всех управляемых приложений, назначенных этому VPN.
OnDemandMatchAppEnabledУстановите true для автоматического подключения при начале сетевой активности приложения.

Следующий словарь заменяет общесистемный словарь VPN в массиве PayloadContent профиля:

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>

Установка данных создаёт VPN, но не назначает ему приложения. Перейдите к разделу Настройка VPN для отдельных приложений, чтобы связать управляемые приложения с тем же VPNUUID и узнать о поддерживаемых полях маршрутизации.

Установка и удаление профилей

Доставляйте профили через MDM для централизованного управления принадлежностью, заменой и удалением. Если MDM недоступен, пользователь может установить общесистемный профиль напрямую, а затем удалить его в системных настройках управления профилями.

В обоих случаях Vylos считает туннель принадлежащим профилю и доступным только для чтения. Поддерживаемый способ изменения — обновить или удалить профиль, а не редактировать туннель в Vylos.

Итоговый вид в приложении описан в разделе Развёртывание управляемых туннелей. Полные правила Apple см. в справочниках VPN и AppLayerVPN.