00 — Обзор архитектуры
Это входной документ. Он даёт картину целиком и ссылается на остальные. Цель системы: управляемый клиентский VPN для розничной сети — 12 регионов × 5–6 магазинов, роутеры MikroTik hAP ac² на RouterOS v7+ (нативный WireGuard), которыми управляет наш control plane через ROS API. Здесь документируется только клиентская часть (оркестрация самих роутеров — отдельная тема).
Из чего состоит система
Система делится на четыре слоя. Их полезно держать в голове раздельно, потому что они живут на разных временных масштабах и ломаются по-разному.
1. Data plane (между магазинами). Внутри региона между роутерами поднят full mesh WireGuard-туннелей — трафик магазин↔магазин идёт напрямую. Поверх туннелей бежит BGP.
2. Control plane маршрутизации (BGP). В каждом регионе одна точка входа выступает route-reflector'ом: роутеры держат iBGP-сессию с RR, а не друг с другом, и узнают маршруты через него. Next-hop сохраняется, поэтому трафик всё равно идёт напрямую по mesh-туннелям. То есть data plane — mesh, control plane — звезда к RR. Это не противоречие, а классическое разделение «full-mesh underlay + route-reflector overlay».
3. Региональная точка входа (WG-сервер для клиентов). Один узел на регион, к которому подключаются роуминговые клиенты (телефоны/ноуты сотрудников и директоров). Он же RR для региона. Клиентский трафик входит здесь и дальше по BGP уходит в нужный магазин.
4. Control plane клиентов. Наш сервис, который: выпускает доступ по одноразовой ссылке, ведёт реестр клиентов, регистрирует/снимает их как WG-пиры на региональных серверах, доставляет конфиги (через MDM или подписку sing-box) и выполняет миграцию между регионами.
Сбоку — Telegram-ассистент. Канал уведомлений, подтверждений (аппрув миграции, второй фактор) и «пинков» пользователю (особенно на iOS — «открой приложение, чтобы применить»).
Путь клиента в двух абзацах
Сотруднику выдаётся одноразовая ссылка. По клику control plane определяет канал доставки (Apple / Android / Windows / Linux), регистрирует клиента в БД, заводит его как WG-пира на региональной точке входа и доставляет конфиг — либо тихо через MDM (управляемые устройства), либо как подписку sing-box (см. файл 05). Клиент поднимает туннель и работает.
Если клиента надо перевести в другой регион, control plane заводит его пира на новой точке входа, обновляет отдаваемый конфиг (новый pool-IP, endpoint и серверный pubkey), дожидается рукопожатия на новом сервере и только потом снимает старого пира. Это не «смена endpoint», а перенос пира — подробности в файле 03.
Ключевые решения, принятые по ходу
- Модель адресации B (пул IP на регион): клиент получает разный tunnel-IP в каждом регионе. BGP остаётся чистым (каждый сервер владеет своим агрегатом), ценой большего числа изменений в конфиге при миграции. См. файл 01.
- Целевой RTO — минуты. Секундный failover не требуется; это разрешает использовать и DNS-failover, и подписочную модель доставки.
- iOS — узкое место. Штатный WireGuard-app переконфигурируется только через MDM. Чтобы получить удалённый реконфиг без MDM, выбран sing-box (WG как транспорт + подписка). См. 05–06.
Глоссарий
- Control plane — наш управляющий сервис (роутеры + клиенты).
- Точка входа / entry point — региональный WG-сервер, к которому подключаются клиенты; он же BGP RR.
- Re-homing (перенос пира) — перевод клиента с одной точки входа на другую; больше чем смена endpoint.
- MDM — Mobile Device Management (Fleet/Scalefusion); тихая доставка профилей на управляемые устройства.
- Подписка (subscription) — URL, по которому клиент (sing-box) сам тянет и обновляет конфиг.
- Managed / unmanaged — устройство, заэнролленное в MDM / личное (BYOD) без MDM.
- RTO — Recovery Time Objective, целевое время восстановления после сбоя.
Индекс документов
- 01 — Онбординг и жизненный цикл клиента — одноразовая ссылка, владение ключом, модель адресации, машина состояний клиента.
- 02 — Доставка через MDM — как доставляет MDM, по платформам, задержки, почему не годится для failover.
- 03 — Control plane ↔ клиент — миграция как перенос пира, порядок действий, доставка по публичной сети, Telegram.
- 04 — Failover точки входа — падение точки входа, DNS-failover, общий серверный ключ, keepalive, RTO.
- 05 — sing-box: устройство, конфиг, настройка — устройство sing-box, конфиг, рычаги настройки, грабли.
- 06 — Сравнение клиентов — sing-box vs WireGuard-app vs IKEv2 vs Headscale.