📡

OshaVPN Router: своя прошивка для MikroTik — VPN на весь офис

прошили заказчику MikroTik с Авито: весь офис за VPN, российское напрямую, зарубежное через туннель, на устройствах ничего не нужно ставить

Своя прошивка на OpenWrt для MikroTik hAP ac²: весь офис получает VPN без приложений на устройствах, российские сайты идут напрямую, при сбое зарубежное закрывается, обновления приходят по воздуху с откатом. Своя правка ядра Xray подняла скорость через VPN с 10 до 48 Мбит/с. Роутер заказчик купил сам на Авито за 6 000 ₽, за прошивку, программу, приложение и подписку на год заплатил нам 12 000 ₽.

Тестирование у заказчикаNDA
12 000 ₽
прошивка, программа, приложение и подписка на год; роутер заказчик купил сам на Авито за 6 000 ₽
10 → 48 Мбит/с
скорость через VPN на том же железе после своей правки ядра Xray
0 приложений
на устройствах сотрудников: VPN раздаёт роутер, российское идёт напрямую

Задача

Руководитель небольшого офиса хотел VPN «на весь офис». Сотрудники и он сам ничего не ставят на свои устройства, российские сервисы — банки, Госуслуги, маркетплейсы — работают напрямую, а зарубежное идёт через серверы OshaVPN. Если что-то сломалось, офис не должен молча выйти в интернет мимо VPN. И роутер должен обновляться сам, без выезда специалиста.

Бюджет — как у обычного роутера, а не как у корпоративного шлюза. Роутер заказчик купил сам: MikroTik hAP ac² с рук на Авито за 6 000 ₽. От нас — прошивка, программа и подписка.

Решение

Своя прошивка OshaVPN Router на основе OpenWrt и программа на USB-флешке. Что получил заказчик:

  • VPN на весь офис по Wi-Fi и кабелю, без приложений на устройствах.
  • Россия напрямую. 8 691 подсеть России и российские домены идут мимо VPN, остальное — через туннель.
  • Защита при отказе. Пока VPN не работает, зарубежное закрыто, российское работает. Защита живёт во внутренней памяти и включается, даже если вынуть флешку.
  • Обновления по воздуху с проверкой подписи, подтверждением и автоматическим откатом.
  • Страница OshaVPN в веб-интерфейсе роутера: состояние, срок подписки, смена подписки, проверка связи и журнал — без командной строки.
  • Запасная подписка: если основные серверы недоступны, трафик сам уходит на запасные и возвращается, когда основные ожили.
  • «Разведка» сети — около 65 проверок за 12 секунд: обычный интернет, сильные ограничения или белые списки.
  • Журнал, пульс и автоотчёты: причина любого сбоя видна без выезда, а помочь можно удалённо через защищённый туннель.

Как это устроено

Почему OpenWrt, а не RouterOS

Родная система MikroTik закрыта: своё VPN-ядро в неё не поставить, контейнеры на этой модели не поддерживаются, а встроенные средства не умеют протокол VLESS. WireGuard заказчик отверг: внутри российских сетей его режут. Поэтому роутер переведён на OpenWrt 25.12 — открытую систему для роутеров. Прошивка собрана официальным Image Builder и весит 9,8 МБ.

Роутер прошивается загрузкой по сети, без пароля от RouterOS, а перед прошивкой снимается полная копия флеша: вернуть заводскую систему можно в любой момент.

Путь трафика

DNS-запросы устройств перехватывает роутер: российские имена он спрашивает напрямую, остальные — через VPN. Дальше пакет разбирает межсетевой экран nftables. Частные адреса и подсети России уходят напрямую силами ядра Linux, с аппаратным ускорением, — VPN-программа их даже не видит. Всё прочее через TPROXY передаётся ядру Xray: оно по имени сайта решает, пустить соединение напрямую или в туннель, и выбирает самый быстрый живой вход по замеру раз в минуту.

Утечки закрыты мелочами: IPv6 в локальной сети выключен, «зашитые» DNS-серверы на устройствах перехватываются, DNS поверх TLS отбивается, порты Xray снаружи недоступны.

Флешка и внутренняя память

Ядро Xray весит 32 МБ, а во внутренней памяти роутера после OpenWrt остаётся около 5 МБ. Поэтому внутри — загрузчик и защита, а программа, ядро, списки, статистика и две версии для отката — на флешке. Без флешки роутер остаётся роутером: интернет и российские сайты работают, зарубежное закрыто, пока флешку не вернут.

Логика написана на ucode — встроенном языке OpenWrt. Второй процесс на Go рядом с Xray съел бы 15–20 МБ памяти, которой и так мало, а скрипты запускаются раз в минуту и ничего не держат.

Обновления, которые нельзя сломать

Тот же сервер и тот же ключ подписи, что у приложения OshaVPN. Роутер качает только изменившиеся файлы: обновление занимает 15–20 секунд. Новая версия сама подтверждает, что VPN поднялся; не поднялся за 90 секунд — откат и метка «плохая». Если новая версия не запускается вовсе, через 5 минут её откатывает загрузчик во внутренней памяти. Обновления проверены на настоящем роутере пять раз подряд.

День второй: почему «сетка валится», и разгон слабого железа

Роутер поработал на домашнем канале 500 Мбит/с, и пришла жалоба: связь иногда отваливается, а когда работает — медленно. За день вышло восемь версий, и все правки — по замерам, а не по догадкам:

  • Память. Профилировщик Go показал, что ядро тратит 70% процессора на сборку мусора: один из транспортов держал по 512 КБ буфера на каждое соединение. На роутере он переведён в другой режим — куча упала с 29 до 5–11 МБ.
  • Шифр. У процессора нет аппаратного AES: на одном ядре AES-GCM даёт 25 Мбит/с, ChaCha20 — 75. Своя правка Xray ставит ChaCha20 первым на таких процессорах, как делает настоящий Chrome на слабых ARM. Через VPN стало 42–48 Мбит/с вместо 10.
  • Кабель. «Медленно напрямую» оказалось битой парой в коннекторе WAN: порт падал до 100 Мбит/с. После переобжима — гигабит и до 350 Мбит/с.
  • Проверки на отказ вживую: выдернули питание — VPN поднялся сам за 2 минуты; отключили WAN — связь вернулась сама; вынули флешку — зарубежное закрылось, российское работало, после вставки VPN поднялся за 11 секунд.

Подробная история разгона — в статье «Как мы сделали заказчику VPN на весь офис из MikroTik с Авито».

Результат

  • Весь офис за одним роутером получает VPN без приложений на устройствах; российские сервисы работают напрямую.
  • Через VPN около 48 Мбит/с загрузки и 38 отдачи, напрямую до 350 Мбит/с на канале 500 Мбит/с.
  • Защита при отказе, обновления с откатом и восстановление после сбоев питания, WAN и флешки проверены на настоящем железе.
  • Наша работа стоила заказчику 12 000 ₽: прошивка, программа, приложение OshaVPN и подписка на год. Роутер он купил сам на Авито за 6 000 ₽.

Технологии: что и зачем

  • OpenWrt 25.12 — открытая система для роутеров вместо закрытой RouterOS; своя прошивка через Image Builder.
  • ucode — встроенный язык OpenWrt: вся логика программы без лишнего процесса в памяти.
  • Xray — VPN-ядро с протоколами VLESS, Reality и XHTTP, собранное из исходников со своей правкой выбора шифра.
  • nftables, TPROXY, dnsmasq — раздельная маршрутизация: Россия напрямую ядром Linux, остальное в Xray.
  • C и mbedTLS — маленькая программа проверки подписи обновлений: в OpenWrt нет openssl.
  • Docker — проверки без железа: OpenWrt в контейнере с настоящей системой запуска, обновлением и откатом.

Статус

Роутер прошит и прошёл проверки на канале 500 Мбит/с, включая отказ питания, WAN и флешки; передаётся заказчику. Ограничение железа: hAP ac² упирается в процессор около 48 Мбит/с через VPN, поэтому для офисов на 10+ устройств следующим кандидатом стоит мини-ПК на Intel N100 — программа под x86_64 уже собирается.

Роутер — четвёртая часть VPN-проекта вместе с приложением OshaVPN, биллингом Tech Poly VPN и трассой РФ → Европа.

Вопросы по проекту

Зачем VPN на роутере, если есть приложение на телефон?
Приложение нужно ставить на каждое устройство и следить, чтобы его не выключили. Роутер закрывает весь офис разом: ноутбуки, телефоны, телевизор, принтер и гостевые устройства получают VPN просто через Wi-Fi или кабель. Сотрудникам ничего не нужно устанавливать и настраивать, а российские банки, Госуслуги и маркетплейсы продолжают работать напрямую.
Какой роутер подходит и почему не родная система MikroTik?
В этом кейсе — MikroTik hAP ac², который заказчик купил с рук на Авито за 6 000 ₽: четыре ядра ARM, 128 МБ памяти, USB. RouterOS закрыта: своё VPN-ядро в неё не поставить, а встроенные средства не умеют нужный протокол VLESS. Поэтому роутер переведён на OpenWrt — открытую систему для роутеров. Программа от железа почти не зависит: под другую модель нужна только пересборка ядра и прошивки.
Что будет, если VPN перестанет работать?
Зарубежное закроется, российское продолжит работать. Так решил заказчик: иначе при сбое устройства молча пошли бы в интернет со своего настоящего адреса. Защита лежит во внутренней памяти роутера и включается, даже если вынуть флешку с программой. Режим «при отказе всё напрямую» включается одной командой.
Какая скорость через VPN?
Около 48 Мбит/с через VPN и до 350 Мбит/с напрямую на канале 500 Мбит/с. Сначала через VPN было около 10: у процессора роутера нет аппаратного AES. Мы поправили ядро Xray так, чтобы на таком процессоре первым предлагался шифр ChaCha20 — он здесь втрое быстрее. Российский трафик в VPN не заходит вовсе, его пересылает ядро Linux.
Сколько это стоит?
В этом кейсе роутер MikroTik hAP ac² заказчик купил сам, с рук на Авито за 6 000 ₽. Нам он заплатил 12 000 ₽: прошивка, программа для роутера, приложение OshaVPN для его устройств и подписка на год. Абонентской платы за роутер нет, обновления программы входят в подписку.
Как роутер обновляется и кто его чинит?
Обновления приходят по воздуху ночью, файлы проверяются по подписи, качаются только изменения. Новая версия сама подтверждает, что VPN поднялся, иначе через 90 секунд роутер откатывается на прежнюю. О сбоях роутер сам присылает отчёт с журналом, а помочь удалённо можно через защищённый туннель, без выезда в офис.

Нужно похожее?

Расскажите о задаче — покажем, как решали такое, и прикинем объём работ.