06 — Сравнение клиентов
Какой клиент чем платит. Контекст: нужен удалённый реконфиг (миграция региона, смена endpoint) без обязательного MDM, и стык с WG-сервером на MikroTik. Главное узкое место — iOS.
Кратко
| Клиент | Удалённый реконфиг без MDM | Стык с MikroTik WG | iOS | Цена |
|---|---|---|---|---|
| Штатный WireGuard-app | нет (только MDM или ручной импорт) | да, нативно | ограничен MDM | минимум усилий, нет автообновления |
| Свой клиент (NetworkExtension/VpnService) | да | да | очень тяжело | разработка + поддержка + всё равно MDM для раздачи |
| sing-box | да (подписка) | да (WG как транспорт) | да, но фон ненадёжен | лишнее приложение + ключ в конфиге |
| IKEv2 | нет (переустановка профиля) | да (нативно на ROS) | нативно, без приложения | ручной реконфиг на каждое изменение |
| Headscale/Tailscale | да (через свой координатор) | нет (своя модель) | да, надёжно | заменяет твой control plane |
Подробно
Штатный WireGuard-app
Нативно стыкуется с MikroTik. Но на iOS переконфигурируется только через MDM (песочница не даёт другому приложению трогать его VPN), автообновления по URL нет. Без MDM — ручной импорт пользователем. Годится для управляемого парка как простой вариант, но не даёт удалённого реконфига для BYOD.
Свой клиент
На Linux/Windows свой агент — отличный путь (см. файлы 01, 03): держит device-credential, генерит ключ локально (приватник не едет), применяет конфиг. На Android своё приложение-VpnService реально. На iOS — свой NetworkExtension/WireGuardKit-клиент технически возможен и вернул бы агентский путь, но это тяжело (App Store, поддержка), и распространять на парк всё равно через MDM. Если бы был дешёвый способ сделать своё на всех платформах — это был бы идеал; реальность ломает iOS.
sing-box (выбранный для кросс-платформы)
Аналог «VLESS-подписки», но для WireGuard. Говорит стандартный WG на проводе → стыкуется с MikroTik как обычный пир. Графический клиент по спецификации обязан поддерживать remote-профили по URL с HTTP Basic и автообновлением → твой control plane отдаёт per-device конфиг, приложение само подтягивает обновления. Миграция = обновил отдаваемый конфиг. Платит: (1) приватник лежит в отдаваемом конфиге (URL подписки = bearer-секрет, защищай TLS+токен); (2) на iOS фоновое автообновление ненадёжно → Telegram-пинок; (3) шаткая дистрибуция iOS-приложения. Детали — файл 05.
IKEv2 (резервный/легаси)
Нативный на iOS и Windows, настраивается на ROSv7. Доставляется подписанным .mobileconfig,
который пользователь ставит сам без MDM (Safari умеет ставить профиль). Но автообновления нет:
любое изменение = переустановка профиля (руками или через MDM). Подходит как простой нативный
вариант для директорских устройств, где реконфиг редкий. Грубо: IKEv2 меняет «нативно, без
приложения» на «ручной реконфиг на каждое изменение», тогда как sing-box — «лишнее приложение +
ключ в конфиге» на «удалённый реконфиг без MDM».
Headscale / Tailscale
Это система, которая «WG как транспорт + свой control plane + iOS-реконфиг без MDM» решает по-настоящему и надёжно (iOS-клиент переконфигурируется через свой координатор). Но она не стыкуется с голым WG-интерфейсом на MikroTik — клиенты Tailscale мешуются только через свой координатор со своей моделью ключей/ACL/DERP. То есть это «выкини свой control plane и возьми наш», а не «вставь в существующую схему». Раз ты осознанно строишь свою BGP/MikroTik-оркестрацию, sing-box ложится в неё, а Headscale бы её заместил. Держать в уме как ориентир/запасной паттерн, если iOS-надёжность станет критичной.
Рекомендованная гибридная раскладка
- Linux/Windows — свой лёгкий агент (keygen на клиенте, доставка по публичной сети, MDM не нужен).
- iOS/Android — sing-box с подпиской от control plane; MDM в лёгкой роли (раздать приложение
- при желании запушить URL подписки как managed-app-config); Telegram-пинок для применения на iOS.
- Директорские устройства с редким реконфигом — можно оставить IKEv2 (нативно, минимум софта).
- Headscale — не внедряем, держим как ориентир.