02 — Доставка через MDM
Как MDM реально доставляет конфиги, чем отличаются платформы, какие задержки ждать, и почему MDM нельзя класть в основу failover.
Что MDM делает на самом деле
MDM — это не транспорт, а две функции сразу:
- Тихое применение конфига без действий пользователя.
- Управляемый trust-anchor на устройстве (профиль ставится в системное хранилище, ключ уезжает в keychain мимо пользователя).
Если эти две функции заменить чем-то своим (агент + device-credential), MDM из схемы выпадает, и конфиги можно гонять по публичной сети напрямую (см. файл 03). Поэтому «нужен ли MDM» = «есть ли у меня другой способ тихо применить конфиг и держать доверие на устройстве».
Тихо — только на заэнролленном устройстве
«Тихо» — свойство managed-популяции, не схемы вообще. И степень тишины зависит от уровня управления:
- Apple supervised (корпоративные, через ADE) — полностью молча, включая установку профиля и приложения.
- Apple user-enrolled (BYOD) — молча на обновления, но первичный энроллмент требовал согласия пользователя; есть ограничения по разделению данных.
- Android Enterprise (под DPC) — managed config применяется молча.
- Unmanaged / BYOD без MDM — тихого пути нет в принципе.
По платформам — канал и нюансы
- Apple: профиль
.mobileconfigс VPN payload. Декларативно — заменил профиль, ОС применила. Для WireGuard на устройстве должно стоять приложение WireGuard (или своё на NetworkExtension); MDM может доставить и его (managed app). - Android: managed config через Android Enterprise. Тоже декларативно.
- Windows: у WireGuard нет Apple-подобного VPN-payload. «Тихо» = положить
.conf+ выполнить скрипт под агентом (wireguard /installtunnelservice, перезапуск службы). Императивно. - Linux: не MDM, а твой агент —
.conf+wg syncconf/wg-quick. Интервал и поведение полностью под твоим контролем.
Примерные задержки доставки
Гарантий нет ни у кого — всё best-effort, «цифра» это распределение с длинным хвостом. Для бодрствующего онлайн-устройства:
| Платформа | Типичная задержка (онлайн) | Хвост |
|---|---|---|
| Apple (iOS/macOS) | секунды – 1–2 мин (APNs будит, чекин, тянет команду) | спящее/офлайн — не ограничен |
| Android Enterprise | секунды – пара минут (триггер через FCM) | аналогично |
| Windows (Intune) | минуты; без форс-синка — часы (синки разрежены, ~до 8ч) | худший на доставку |
| Linux (свой агент) | сколько настроишь (хоть раз в минуту) | под твоим контролем |
Главное — хвост, а не среднее. Для спящего/офлайн устройства на Apple/Android доставка не ограничена по времени. Но спящее устройство и не гоняет трафик через туннель — failover ему в эту секунду не нужен. Когда проснётся и попробует туннель, его подхватит DNS-путь (см. файл 04), без зависимости от того, долетел ли MDM-пуш.
Порядок при смене конфига (важно)
MDM-пуш — это fire-and-forget: ты получаешь «профиль установлен», но не «туннель поднялся и гонит трафик». Поэтому при любой смене конфига (особенно миграции региона) порядок жёсткий — подробно в файле 03, кратко здесь:
- завести пира на новом сервере (его pubkey там — до переключения);
- запушить новый профиль через MDM;
- подтвердить по самому WG-серверу (видим handshake), а не по ответу MDM;
- только потом снять пира со старого сервера.
Нарушишь порядок — клиент прилетит на сервер, который его не знает, и «тихо» превратится в «тихо отвалился».
Почему MDM не годится для failover
Failover точки входа должен укладываться в секунды–десятки секунд. MDM — это timescale управления конфигурацией: даже «хороший случай» это минута–две, а хвост не ограничен. Завязать доступность на ре-пуш профиля = прицепить требование секундного масштаба к минутному и ненадёжному каналу. Failover делается на уровне DNS/маршрутизации/клиента (файл 04), а MDM остаётся для первичной выдачи и редкой катастрофы «упал весь регион».
Роль MDM при использовании sing-box
Если уходишь на подписочную модель (sing-box, файл 05), MDM не исчезает, но роль становится лёгкой:
- один раз доставить приложение (через MDM/VPP) на управляемые устройства;
- при желании запушить URL подписки как managed-app-config — тогда даже первичный импорт становится тихим.
Это разовая операция установки, а не пуш конфига на каждое изменение. Все последующие изменения (включая миграцию региона) едут по подписке, не по MDM.