Развёртывание с помощью профилей .mobileconfig
Создайте профиль Apple .mobileconfig, чтобы установить туннель Vylos WireGuard как управляемый системный объект только для чтения.
Выбор типа профиля
| Цель | Тип данных VPN | Требования |
|---|---|---|
| Направить подходящий трафик устройства через один туннель | com.apple.vpn.managed | Прямая установка или доставка через MDM. |
| Направить назначенные управляемые приложения через Vylos | com.apple.vpn.managed.applayer | Для рабочих назначений приложений требуется MDM, даже если VPN-профиль установлен напрямую. |
Оба профиля создают в Vylos управляемый туннель. Они отличаются от управляемой конфигурации приложения, которая управляет поведением приложения, но не устанавливает VPN.
Где задаётся каждый параметр
| Возможность | Расположение в профиле |
|---|---|
| Интерфейс и пиры WireGuard | VendorConfig.WgQuickConfigBase64 или WgQuickConfig |
| Раздельная DNS и поисковые домены | VendorConfig.VylosConfigBase64 или VylosConfig |
| Автоматическая активация | VPN.OnDemandEnabled и VPN.OnDemandRules |
| Блокировка соединений без VPN | VPN.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 следующая команда копирует готовое значение в буфер обмена:
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, чтобы редактор «ключ — значение» не удалил и не изменил переносы строк. Создайте файл следующего вида:
[SplitDNS]
Domains = corp.example.com, *.internal.example.com
SearchDomains = example.com
Затем скопируйте закодированное значение в macOS:
base64 -i "settings.conf" | tr -d '\n' | pbcopy
Вставьте результат в VylosConfigBase64. Конфигурация WireGuard также должна содержать хотя бы один сервер DNS в разделе [Interface]. Domains выбирает запросы для этих серверов, SearchDomains добавляет суффиксы к коротким именам узлов, а AllowedIPs по-прежнему управляет маршрутизацией трафика.
Аварийная блокировка управляемых туннелей
Чтобы включить аварийную блокировку для управляемого общесистемного туннеля, используйте ключ Apple IncludeAllNetworks в словаре VPN:
<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 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 и многострочное значение на:
<key>WgQuickConfigBase64</key>
<string>BASE64_ENCODED_CONF</string>
Таким же образом замените ключ VylosConfig и его многострочное значение:
<key>VylosConfigBase64</key>
<string>BASE64_ENCODED_SETTINGS_CONF</string>
Профиль для отдельных приложений
Для маршрутизации WireGuard по приложениям используйте com.apple.vpn.managed.applayer и поставщик пакетного туннеля Vylos. Поддерживаются те же варианты WgQuickConfig и WgQuickConfigBase64, а также необязательные параметры раздельной DNS в VylosConfig или VylosConfigBase64.
| Параметр | Значение |
|---|---|
PayloadType | com.apple.vpn.managed.applayer |
VPNType | VPN |
VPNSubType | io.cbnventures.vylos |
VPN.ProviderBundleIdentifier | io.cbnventures.vylos.packet-tunnel |
VPN.ProviderType | packet-tunnel |
VPNUUID | Уникальное значение, общее для всех управляемых приложений, назначенных этому VPN. |
OnDemandMatchAppEnabled | Установите true для автоматического подключения при начале сетевой активности приложения. |
Следующий словарь заменяет общесистемный словарь VPN в массиве PayloadContent профиля:
<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.