Наша почта:
В Москве:
РФ (звонок бесплатный):
Wi-Fi в транспорте на MikroTik - От прототипа на 150 бортов до 1000+ устройств
{ Основатель и Технический директор Integrasky }
Роман Козлов

Видео доклада

Презентация спикера

Wi-Fi в транспорте на MikroTik
Проект, о котором идёт речь, начинался как небольшая и не самая сложная задача: обеспечить Wi-Fi для пассажиров максимум на 150 транспортных средствах. На старте не было понимания, взлетит ли проект вообще и будет ли он живым. В итоге за пять лет парк вырос примерно до 1000 бортов, а архитектура, собранная как прототип за две-три недели, до сих пор остаётся в продуктиве.
Ниже разбираются архитектура решения на оборудовании MikroTik, путь от MVP до масштабной инсталляции, финансовые аспекты, которые привели к смене способов авторизации (SMS, Telegram, звонки), и выводы о том, что стоило бы сделать иначе.

Исходный запрос

Заказчик пришёл в 2020 году со следующими требованиями:
  • Обеспечить Wi-Fi для пассажиров. По требованиям того времени была нужна авторизация одним из способов: паспорт, номер телефона, ручная регистрация или Госуслуги. Выбор пал на номер телефона.
  • Доступ к Wi-Fi только через LTE — каждый следующий пункт несколько усложнял проект.
  • Авторизация по SMS плюс веб-портал: пассажир заходит на портал, вводит номер телефона, получает SMS и таким образом регистрируется. Цель — собирать номера телефонов на случай запросов от компетентных органов.
  • Рабочий прототип за 2–3 недели. Это было самым сложным пунктом: заказчик некоторое время прокрастинировал, и решение требовалось очень быстро.
  • Ограниченный бюджет и минимум разработки — прямое следствие бюджета.
  • Масштаб — до 150 бортов.

Первоначальная архитектура

Основная цель архитектуры — быстро запуститься: сделать прототип и «потом допилить нормально». Отсюда принцип: максимум стандартных возможностей MikroTik и никакой самодеятельности. Помогли Hotspot, User Manager (RADIUS-сервер от MikroTik) и CAPsMAN. Всё это работает практически из коробки — за исключением скрипта для отправки SMS.

Схема получилась следующая

Транспортное средство соединяется по VPN с центральным узлом. На борту находятся сервисы: видеонаблюдение, счётчик пассажиров, а также Wi-Fi и авторизация. За центральным узлом располагается инфраструктура клиента: видеонаблюдение и прочие сервисы, RADIUS, автоматизация на Ansible и NetFlow-коллектор для сбора статистики. Firewall присутствует и на центральном узле, и на всех бортах — для защиты разных периметров.

Почему L2TP + MPPE 128

  • 1.
    PPTP по современным меркам — очень старый протокол, который убирался из инфраструктур клиентов ещё в 2000-е. Есть проблемы с NAT, нужны хелперы. Этот вариант даже не рассматривался.
  • 2.
    SSTP — хороший вариант, но слишком тяжёлый для слабых роутеров.
  • 3.
    L2TP — лёгкий, работает через NAT и UDP. Шифрование служебного трафика базовое. Этот вариант и был выбран.
Центральный узел — небольшая виртуальная машина: 4 ядра, 2 ГБ оперативной памяти. На ней L2TP-сервер, OSPF в роли IGP и рядом RADIUS + User Manager. Пользовательский трафик на центральный узел не передаётся, поэтому серьёзной нагрузки на VPN нет: там ходят маленькие пакеты RADIUS, OSPF, BFD и немного менеджмента.

Маршрутизация

На каждый борт заводится отдельная OSPF-area. Дополнительно настроен BFD — он был придуман для ситуации, когда на борту несколько LTE-каналов, чтобы быстро переключаться между интерфейсами. Из нюансов: таймеры пришлось увеличить до 1 секунды, поскольку LTE иногда даёт высокие задержки, и слишком резкие переключения нивелировали бы пользу.
BGP на тот момент не подходил по простой причине: в RouterOS 6 не было ECMP, а именно ECMP был интересен для инсталляций с несколькими LTE-модемами. Такие инсталляции есть — ECMP на несколько LTE-интерфейсов с изменением gateway на внешние каналы через route filter, — но их немного.

Сетевые сегменты на борту

  • Первый сегмент
    служебные данные. Видеонаблюдение постоянно пишется локально, а архив синхронизируется с центром только по запросу: на LTE постоянную синхронизацию позволить себе нельзя. При необходимости оператор из центра заходит на локальный видеоархив и смотрит его.
  • Второй сегмент
    гостевой Wi-Fi для пассажиров с аутентификацией. Третий — VPN-туннель до центра для управления; поскольку туннель шифрованный, это даёт минимальный уровень безопасности.
Базовые правила firewall:
  • гостевая сеть в рабочую — drop forward;
  • из локальной сети в VPN — запрещено, кроме статистики; по большому счёту всё работает по established из центра, борт не может ходить в центр по своей инициативе, кроме отправки собственных данных микротиком;
  • центральный узел также занимается фильтрацией трафика с бортов: один борт к другому пройти не может.

Hotspot, RADIUS и CAPsMAN

Hotspot поднят на каждом борту, авторизация — через центр, через RADIUS. При подключении к Wi-Fi пассажиру показывается Captive Portal, он вводит номер телефона, запрос улетает на RADIUS, тот его обрабатывает, отправляется SMS — и человек входит в сеть. User Manager содержит базу сессий, по которой можно отследить, кто и когда был на борту. Настроены rate limit, session limit и ограничение частоты отправки SMS.
Идею централизованного управления Wi-Fi через CAPsMAN предложил сам заказчик. Сомнения были, но в целом не оправдались. Через контроллер задаются пароли, пользователи, access-list. Развёрнуты две сети: корпоративная (телеметрия на борту — часть устройств подключается проводами, часть без) и гостевая. CAPsMAN forwarding не используется, только local forwarding: трафик остаётся локально, обращения через центр нет, клиенты в Wi-Fi полностью изолированы друг от друга.
Отдельно стоит отметить:
если связи с центром нет, авторизовать клиентов невозможно, а значит, и Wi-Fi в этой ситуации не нужен — он просто выключается вместе с интернетом.

Оборудование

Проект не свежий, поэтому использовались специализированные модели для транспорта: влагозащищённый корпус, питание 12 В.
Важные нюансы по железу:
  • LtAP
    для инсталляций более чем с одним модемом.
  • LtAP mini
    когда модем один. Составляет большинство парка. Основной минус — 16 МБ флеш-памяти.
  • RBM33G
    для случаев, когда нужно больше двух модемов: две платы, 4 LTE-модема плюс hAP ac². Таких инсталляций меньше 1% от общего числа, но они есть.
Выбор вендора продиктован ценой LTE-возможностей. У заказчика есть и большой парк на другом вендоре, который в ряде ситуаций показывает себя хуже. Характерный пример — работа средств РЭБ, полное подавление LTE. После пропадания и восстановления LTE MikroTik чувствует себя нормально: подключается к центру и продолжает работать. У другого вендора этого не происходит, из-за чего приходилось писать скрипты, пингующие интернет и раз в 10 минут перезагружающие устройство, — другого способа поднять его найти не удалось.

Главное ограничение

Ресурсы маленьких устройств. У RBM33G и hAP ac² проблем нет, а вот LtAP mini, составляющий основной парк, ограничен 16 МБ флеш-памяти. По CPU проблем не замечено: на скоростях, которые обеспечивает LTE, их не возникает. Большая часть парка сейчас живёт на RouterOS 6.49.19 long-term, и с ней всё хорошо.

На флеш-память, кроме самой RouterOS, нужно записать видоизменённый портал Hotspot с брендированными изображениями. Из-за этого пришлось отказаться от идеи вести локальные логи посещений на случай, если понадобится восстановить информацию о том, кто и когда был на конкретном борту.

Каналы связи

Реальная скорость — от 0 до 70 Мбит/с на роутер. Ноль здесь не фигура речи. Пользователю выдаётся не более 5 Мбит/с через rate limit. Качество LTE — «как получится»: транспорт движется, заезжает в тоннели, под мосты, в зону действия РЭБ. Потери бывают серьёзные — свыше 30%. Средства РЭБ убивают весь эфир, и в рамках проекта бороться с этим невозможно: проводов нет, транспорт движется.

Автоматизация

Автоматизация делалась сразу, но была рассчитана на первоначальное количество устройств. Взяли Ansible и сделали генерацию конфигов: заливка по SSH, ключи везде, удобные массовые операции — готовое решение, которое не нужно писать самим.

Для операторов заказчика сделали веб-страницу: оператор по инструкции вводит номер борта и номер подсети, после чего генерируется полный конфиг — настройки VPN, OSPF, Hotspot, подсетей. Заливка нового роутера — далеко не главная проблема заказчика: подготовительные работы по каждому борту включают монтаж видеонаблюдения и многое другое, на фоне чего заливка микротика — мелочь. Доступны разные варианты страниц авторизации под разный брендинг; заливка возможна через страницу, через Ansible, по FTP/FTPS, а в резервном варианте — руками через FTP.

Ansible

Появились и регулярные задачи на Ansible — например, недавно нужно было прокатать SNMP community на все борта. Сценарии из центра запускаются несколько раз в день, поскольку борта то в сети, то нет: транспорт уехал, сегодня не на связи — отследить это сложно. Главная беда в том, что при прыгающем LTE вероятность того, что задача из центра до борта не доедет, далеко не нулевая.
Отдельный вопрос — обновление прошивок. Максимально удобным инструментом оказался CAPsMAN: в разделе Remote CAP видны все борта, выбирается нужное количество устройств, нажимается Upgrade — и остаётся только проверить результат. Именно так удалось докатиться до достаточно высокой версии.

Проблемы масштабирования

Экономика меняет архитектуру

Базовая схема авторизации: Wi-Fi → страница Hotspot → ввод номера телефона → SMS с кодом → ввод кода → доступ. Проблема в том, что SMS подорожали вплоть до 40 рублей.
  • Первый шаг
    доставка кода через Telegram, а если не доставлено, то SMS. Экономия составила порядка 30%, но и это не лучший вариант.
  • Второй шаг
    возврат к авторизации звонком. Пассажир вводит номер, звонит на указанный номер, после чего должен вернуться на страницу и нажать «Войти». На практике многие вместо этого начинали звонить снова — фиксировалось до 10 попыток на пользователя, из-за чего несколько лет назад от схемы отказались. Но соотношение цены изменило всё: условные 4000 единиц за звонки против 150 000 единиц за SMS. Экономика требует поменять решение, поэтому сейчас идёт переход обратно на звонки.
Дополнительно:
rate limit и session limit выдаются через RADIUS, действует ограничение частоты запросов SMS (не чаще раза в 5–10 минут). NetFlow с каждого борта — основной потребитель трафика: в connection tracking на центре виден бесконечный NetFlow, и это главный пожиратель денег в облаке.
Финал
Экономика меняет архитектуру — если решение становится слишком дорогим, другого варианта, кроме её изменения, нет. User Manager требует апгрейда на вырост: текущая версия закрывает потребности без проблем, но при следующем шаге роста, скорее всего, потребуется переход на FreeRADIUS. И главное — pull-модель для мобильных объектов работает отлично, push — нет.
В Москве:
РФ (звонок бесплатный):
Наша почта:
GetNet
Остались вопросы?
Группа компаний VoxLink © 2011-2026