Прошивка роутера OpenWrt под VPN-клиент: WireGuard и OpenVPN
Стоковая прошивка большинства бытовых роутеров вообще не умеет WireGuard, а OpenVPN-клиент если и есть, то куцый — без гибкой маршрутизации и с редкими обновлениями. Третий путь, кроме покупки Mikrotik или Keenetic, — перепрошить уже имеющийся роутер в OpenWrt: это полноценный Linux, где WireGuard и OpenVPN ставятся одной командой и настраиваются через веб-интерфейс LuCI. Дальше — какие роутеры годятся, как поставить пакеты и довести туннель до реально работающего трафика, а не просто зелёного индикатора.
Содержание
- Что получится в итоге
- Словарь: что здесь означают все эти слова
- Каким роутерам подходит OpenWrt
- Устанавливаем пакеты через LuCI и opkg
- WireGuard-клиент: настройка через LuCI
- OpenVPN-клиент: импорт готового .ovpn
- Firewall-зона: без этого туннель поднимется, а трафика не будет
- MTU: почему мелкие сайты открываются, а крупные висят
- DNS: утечка, которую не видно глазами
- Как убедиться, что VPN реально работает
- Что происходит, когда туннель падает
- Перезагрузка и обновления
- Приёмы, о которых редко пишут
- Симптом, причина и что делать
- Шпаргалка команд
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что получится в итоге
Когда всё настроено, роутер сам держит подключение к вашему VPS и заворачивает в него трафик всей домашней сети.
- Ни на одном устройстве не нужен VPN-клиент. Телефоны, ноутбуки, приставки выходят наружу через сервер просто потому, что подключены к вашему Wi-Fi. Это единственный способ подружить с туннелем железо, где клиента не бывает в принципе — например, Smart TV без поддержки VPN.
- Внешний IP всех устройств — это IP сервера, сайты видят его страну и провайдера.
- Туннель поднимается сам после перезагрузки роутера и обрыва линии, а трафик можно разделять: одни устройства в туннель, другие напрямую.
Чего схема не даёт: мобильный интернет вне дома через неё не пойдёт, а скорость всей сети упирается в процессор роутера.
Словарь: что здесь означают все эти слова
Половина инструкций по VPN на роутере написана «для своих». Ниже — расшифровка терминов, которые встретятся дальше и в интерфейсе LuCI.
| Термин | Что это простыми словами |
|---|---|
| OpenWrt / LuCI | Прошивка-замена заводской (внутри обычный Linux) и её веб-панель в браузере |
| Интерфейс | lan — домашняя сеть, wan — провайдер, wgvpn — ваш туннель |
| Зона firewall | Группа интерфейсов с общими правилами. Пока интерфейс не в зоне, его трафик режется |
| Forwarding между зонами | Разрешение «из зоны A можно в зону B». Без правила lan → vpn дом в туннель не попадёт |
| NAT / Masquerading | Подмена адреса отправителя на адрес роутера. Без него сервер получит пакет от 192.168.1.50 и не поймёт, куда отвечать |
| Handshake | Обмен ключами с сервером раз в пару минут. «Свежее» рукопожатие = живое соединение |
| Peer / Endpoint | Вторая сторона туннеля (сервер) и адрес с портом, куда стучится роутер |
| Allowed IPs | Адреса, которые разрешено гонять через туннель. 0.0.0.0/0 — «весь интернет» |
| Route Allowed IPs | Галочка, превращающая Allowed IPs в маршруты. Без неё туннель есть, а трафик идёт мимо |
| Persistent Keepalive | Пустой пакет раз в N секунд, чтобы NAT провайдера не забыл о соединении на простое |
| MTU и фрагментация | Предельный размер пакета целиком. Что больше — режется на части, а части часто теряются |
| MSS clamping | Роутер сам подсказывает сторонам меньший размер сегмента. Лечит большинство проблем с MTU |
| dnsmasq | Программа в OpenWrt, раздающая устройствам адреса (DHCP) и их DNS-запросы |
| Kill switch | Правило «упал туннель — не выпускать трафик напрямую» |
| PBR | Маршрутизация по правилам: не «весь дом», а «вот эти устройства и домены» |
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверКаким роутерам подходит OpenWrt
OpenWrt — не надстройка над заводской прошивкой, а её полная замена, поэтому первый вопрос не «как настроить», а «можно ли поставить». Проверяется это на странице Table of Hardware: вбиваете модель и ревизию платы (обычно на наклейке снизу, например v1.2). Ревизия важна — у одной модели разные ревизии нередко несут разное железо.
Минимум для связки WireGuard + OpenVPN + LuCI: флеш от 8 МБ, лучше 16 МБ+ (на 4 МБ помещается только урезанный образ без веб-панели); ОЗУ от 128 МБ; CPU с аппаратным ускорением шифрования — актуально прежде всего для OpenVPN.
Цифры мегабит «для роутера вообще» не существует: разброс между бюджетным MIPS и современным ARM огромный, и чужие таблицы замеров к вашему железу отношения не имеют — померяйте у себя по методике из статьи про измерение скорости через iperf3.
| OpenWrt | Mikrotik | Keenetic | |
|---|---|---|---|
| Стоимость железа | от бюджетных TP-Link | от ~40-60$ | от ~50-100$ |
| WireGuard из коробки | нет, ставится пакетом | да, с RouterOS 7 | да |
| Гибкость | максимальная, это Linux | высокая, свой синтаксис | ограничена интерфейсом |
| Риск установки | есть, окирпичивание | нет, штатная ОС | нет, штатная ОС |
| Поддержка | community | официальная | официальная |
Обзор готовых альтернатив — в статье про проблемы WireGuard на Mikrotik и Keenetic, а сравнение подходов — в разборе VPN на роутере или на устройстве.
Устанавливаем пакеты через LuCI и opkg
Дальше предполагается, что OpenWrt уже установлен и LuCI открывается по адресу роутера (обычно 192.168.1.1). Через веб-интерфейс: System → Software → Update lists, найти пакет, Install. Через SSH то же самое одной командой:
opkg update
opkg install luci-proto-wireguard luci-app-wireguard wireguard-tools \
luci-app-openvpn openvpn-openssl
luci-proto-wireguard добавляет протокол в список при создании интерфейса и тянет модуль ядра. luci-app-wireguard — отдельный пакет со страницей Status → WireGuard, где видно время последнего рукопожатия; без него статус смотрится только из консоли, и многие на этом спотыкаются. openvpn-openssl предпочтительнее openvpn-mbedtls: совместимость с готовыми конфигами выше. В свежих сборках вместо opkg используется apk — команды тогда apk update и apk add <пакет>.
На устройствах с малым флешем проверьте место: df -h /overlay. Если не хватает, удалите лишние пакеты, соберите образ на firmware-selector.openwrt.org сразу с нужными или разверните extroot на USB-флешке.
WireGuard-клиент: настройка через LuCI
Network → Interfaces → Add new interface, имя (например, wgvpn — латиницей, без пробелов, до 15 символов), протокол WireGuard VPN.
- Private Key — приватный ключ клиента из конфига, который выдал сервер, либо кнопка генерации в LuCI.
- Listen Port — локальный UDP-порт, например
51820; для клиента непринципиален. - IP Addresses — адрес роутера внутри туннеля, формата
10.10.10.2/32. Именно/32: маску/24роутер поймёт как «вся эта сеть за туннелем» и может сломать маршрутизацию.
После сохранения появится публичный ключ клиента — скопируйте его и добавьте на сервере как peer, иначе сервер будет молча отбрасывать пакеты от неизвестного клиента, а вы будете смотреть на отсутствующее рукопожатие и гадать.
Вкладка Peers → Add peer: Public Key — публичный ключ сервера, не свой; Endpoint Host / Port — IP или домен сервера и его порт; Allowed IPs — 0.0.0.0/0 для полного туннеля или конкретная подсеть для частичного. Плюс два поля, которые решают всё:
- Route Allowed IPs — обязательно включите: именно этот чекбокс превращает Allowed IPs в маршруты. Без него интерфейс поднимется, рукопожатие пройдёт, а трафик пойдёт мимо туннеля.
- Persistent Keepalive —
25. Ставьте всегда, если роутер за NAT провайдера или за CGNAT: иначе соединение «засыпает» на простое и оживает только после того, как вы сами что-то откроете.
Сервер с нуля разворачивается по статье про установку WireGuard на VPS. И ещё тонкость про 0.0.0.0/0: этот маршрут конкурирует с маршрутом до самого сервера, который лежит через провайдера. Обычно netifd разруливает всё сам, но иногда получается петля — туннель поднимается и через несколько секунд отваливается. Лечение: указать вместо него две половины, 0.0.0.0/1 и 128.0.0.0/1.
OpenVPN-клиент: импорт готового .ovpn
Проще не собирать конфигурацию по полям, а импортировать файл .ovpn со встроенными сертификатами: VPN → OpenVPN (пункт появляется после установки luci-app-openvpn), в Template выбрать Start with import config, задать имя инстанса, Add instance, загрузить .ovpn целиком, включить Enabled, Save & Apply.
Проверка, что инстанс поднялся: logread -e openvpn, строка Initialization Sequence Completed. Если процесс падает сразу, виновато обычно одно из двух. Устаревший шифр: директива cipher BF-CBC в современных сборках больше не работает, надо согласовать с сервером data-ciphers AES-256-GCM:AES-128-GCM. Разошлись часы: TLS-рукопожатие ко времени чувствительно, а роутер без батарейки после перезагрузки стартует с «нулевой» датой — проверьте System → System → Time Synchronization.
Большинство .ovpn-конфигов содержат redirect-gateway def1 — она заворачивает весь трафик роутера в туннель. Для частичного туннеля строку перед импортом убирают и прописывают маршруты вручную в Network → Static Routes.
Сервер разворачивается по статье про установку OpenVPN на VPS, а выбор протокола разобран в материале WireGuard или OpenVPN. На слабом роутере разница ощутима: WireGuard живёт в ядре и стоит процессору дешевле.
Firewall-зона: без этого туннель поднимется, а трафика не будет
Здесь теряется больше всего времени: интерфейс включён, статус зелёный, интернета нет. Причина почти всегда одна — интерфейс не привязан ни к одной зоне межсетевого экрана, и его трафик режется правилами по умолчанию. Network → Firewall → Zones, два рабочих варианта:
- Добавить VPN-интерфейс в зону
wan— проще для полного туннеля, зона уже настроена с NAT. Откройтеwan, в Covered networks добавьтеwgvpn. - Отдельная зона
vpn— чище логически и удобнее для kill switch. Add, имяvpn, Input: reject, Output: accept, Forward: reject, обязательно включить Masquerading и MSS clamping. В Inter-Zone Forwarding разрешитьlan → vpn.
Без Masquerading сервер получит пакеты с адресом отправителя из локальной сети (192.168.1.x) и не будет знать, куда слать ответ — обратный трафик потеряется, хотя рукопожатие пройдёт успешно. Это и создаёт ложное ощущение «настроено, но не работает». Для маршрутизации отдельных устройств ставится пакет luci-app-pbr: правила привязываются к MAC- или IP-адресам, а не ко всей lan.
MTU: почему мелкие сайты открываются, а крупные висят
Узнаваемый симптом кривого MTU: ping идёт, лёгкие страницы и мессенджеры работают, а крупные сайты, загрузка файлов и видео виснут на середине. Домашняя сеть работает с пакетами до 1500 байт, VPN добавляет к каждому свои заголовки, и итоговый пакет уже не помещается: его либо режут на части, либо провайдер по дороге молча выбрасывает.
Первый ход — включить MSS clamping на зоне, куда входит VPN-интерфейс: роутер начинает сам подсказывать сторонам подходящий размер сегмента, и большинство проблем исчезает без подбора чисел.
Второй ход — занизить MTU интерфейса. Значение по умолчанию рассчитано на линию с MTU 1500; при PPPoE, мобильном операторе или двойной инкапсуляции полезного места меньше. Универсального числа нет, подбирается с компьютера в локальной сети:
ping -f -l 1400 1.1.1.1 # Windows: -f запрещает фрагментацию
ping -M do -s 1400 -c 3 1.1.1.1 # Linux (на macOS вместо -M do ключ -D)
Уменьшайте число, пока не пропадёт ошибка о необходимости фрагментации, затем прибавьте 28 (заголовки IP и ICMP) — получится рабочий MTU. Встроенный в OpenWrt busybox-ping запрет фрагментации может не поддерживать, поэтому меряйте именно с компьютера. Значение ставится в Advanced Settings → Override MTU. Разбор механики — в статье про фрагментацию и подбор MTU.
DNS: утечка, которую не видно глазами
Даже при работающем туннеле роутер может продолжать спрашивать имена сайтов у DNS-серверов провайдера. Внешний IP при этом честно показывается серверным, а список запрошенных доменов утекает мимо.
- Снимите «Use DNS servers advertised by peer» на интерфейсе
wan(Advanced Settings). Иначе провайдерские адреса будут прилетать при каждом переподключении и вставать первыми в очереди. - Пропишите нужный DNS в dnsmasq: Network → DHCP and DNS → General → DNS forwardings. Укажите адрес VPN-сервера внутри туннеля, если он раздаёт DNS, либо резолвер, до которого роутер ходит через туннель.
- Перехватывайте порт 53 принудительно. Телевизоры, приставки и часть телефонов игнорируют выданный по DHCP адрес и ходят к жёстко зашитым серверам. Правило в Network → Firewall → Port Forwards редиректит трафик на порт 53 из зоны
lanна сам роутер.
Методика проверки — в статье про утечку DNS. Отдельно про IPv6: если провайдер выдаёт IPv6, а туннель только IPv4, часть трафика уйдёт в обход. Либо заворачивайте в туннель и ::/0, либо отключайте интерфейс wan6 целиком.
Как убедиться, что VPN реально работает
Зелёный статус в LuCI означает ровно одно: интерфейс поднят. Ни свежести рукопожатия, ни того, что трафик идёт через сервер, он не гарантирует. Проверяйте по уровням, переходя к следующему после предыдущего.
Уровень 1. Соединение установлено. wg show по SSH или страница Status → WireGuard: в latest handshake должны быть секунды-минуты, а не часы. Для OpenVPN — строка Initialization Sequence Completed в логе. Если рукопожатия нет, дальше идти бессмысленно: проблема в ключах, порте или времени.
Уровень 2. Трафик проходит внутри туннеля. Пингуйте с роутера адрес сервера внутри туннеля, обычно 10.10.10.1: ответ означает, что шифрование и маршрут до пира живы.
Уровень 3. Внешний IP сменился. Откройте на домашнем компьютере 2ip.ru или whoer.net: IP и страна должны совпадать с сервером. Проверять надо именно с устройства в LAN, а не с роутера — они ходят наружу по разным правилам, и бывает, что для роутера туннель работает, а для дома нет. Подробнее — в статье как проверить IP и страну после туннеля.
Уровень 4. Нет утечек. dnsleaktest.com в расширенном режиме: серверов домашнего провайдера в списке быть не должно, плюс проверьте строку про IPv6 на whoer.net. И если ip route get 1.1.1.1 показывает dev wan, а не dev wgvpn, маршруты не применились — вернитесь к галочке Route Allowed IPs.
Что происходит, когда туннель падает
Сценарий выясняется постфактум: сервер перезагрузился, туннель отвалился, а роутер спокойно продолжил выпускать дом напрямую через провайдера. Интернет работает — и только через неделю обнаруживается, что трафик всё это время шёл в обход. Так ведёт себя конфигурация по умолчанию, если VPN-интерфейс добавлен в зону wan.
- Отдельная зона
vpnвместоwan. Разрешите forwarding толькоlan → vpnи уберитеlan → wan. Когда туннель падает, пакетам некуда идти — это и есть kill switch в чистом виде. - Strict enforcement в pbr. При недоступном интерфейсе правила не деградируют до прямого выхода, а блокируют трафик.
- Сторожевой скрипт в System → Scheduled Tasks:
*/5 * * * * ping -c2 -W3 10.10.10.1 >/dev/null 2>&1 || (ifdown wgvpn; sleep 3; ifup wgvpn)
Отдельная причина «внезапной смерти» туннеля — смена IP у сервера, если в Endpoint указан домен. Имя резолвится один раз при поднятии интерфейса и дальше не перепроверяется: роутер будет стучаться по старому адресу, пока интерфейс не перезапустят. Тот же скрипт лечит и это.
Перезагрузка и обновления
Интерфейс с галочкой Enabled поднимается при старте сети сам, отдельный сервис включать не нужно, но два подвоха всё же есть.
Часы. Роутер стартует с неверной датой и синхронизирует её по NTP уже после старта сети, поэтому OpenVPN может не поднять TLS с первой попытки. Убедитесь, что NTP-сервер доступен напрямую, а не только через туннель, иначе получается замкнутый круг. Похожие сценарии — в статье почему WireGuard не работает после перезагрузки.
Обновление прошивки. sysupgrade сохраняет настройки из /etc, но не доустановленные пакеты: после обновления конфигурация VPN на месте, а wireguard-tools и luci-app-openvpn — нет, и туннель не поднимается. Лечится повторной установкой пакетов либо через Attended Sysupgrade (luci-app-attendedsysupgrade), собирающий образ уже с вашим набором. Бэкап делается командой sysupgrade -b; держите его вне роутера, помня, что приватный ключ WireGuard лежит в /etc/config/network открытым текстом и попадает в архив.
Приёмы, о которых редко пишут
- Оставьте себе путь назад. Перед тем как заворачивать весь трафик, убедитесь, что роутер доступен по SSH из локальной сети: если с маршрутами что-то пойдёт не так, LuCI может стать недоступным, а консоль в LAN останется.
- Маршрутизация по доменам, а не по устройствам.
pbrработает вместе с dnsmasq и заворачивает в туннель не устройство целиком, а обращения к конкретным доменам: банковские приложения ходят напрямую. - Отдельная Wi-Fi-сеть «через VPN». Второй SSID со своим интерфейсом, завёрнутым в туннель: переключение сводится к выбору сети на телефоне.
- Второй туннель как запасной. WireGuard-интерфейс и OpenVPN-инстанс на разные серверы существуют одновременно: первый рабочий, второй выключенный. Переключение — одна галочка.
- Не выпускайте сам роутер в туннель без нужды. Обновления пакетов и NTP удобнее гонять напрямую: так они не создадут замкнутый круг при загрузке, когда часы ещё не синхронизированы.
Симптом, причина и что делать
| Симптом | Вероятная причина | Что делать |
|---|---|---|
| Рукопожатия нет вообще | Неверный ключ, закрыт порт, разошлись часы | Сверить ключи, проверить UDP-порт снаружи, включить NTP |
| Рукопожатие есть, интернета нет | Интерфейс не в зоне firewall или нет Masquerading | Добавить в зону, включить NAT, разрешить lan → vpn |
| На роутере работает, в LAN нет | Нет forwarding lan → vpn | Добавить правило в Inter-Zone Forwarding |
| Лёгкие сайты открываются, тяжёлые виснут | MTU и фрагментация | Включить MSS clamping, затем занизить MTU |
| IP серверный, но dnsleaktest показывает провайдера | Утечка DNS | Снять «Use DNS servers advertised by peer», задать DNS forwardings, редирект порта 53 |
| Туннель поднимается и через секунды падает | Петля маршрутов из-за 0.0.0.0/0 | Заменить на 0.0.0.0/1 и 128.0.0.0/1 |
| Работал, потом перестал сам по себе | Сменился IP сервера при доменном Endpoint или отпала сессия за NAT | Перезапустить интерфейс, Keepalive 25, сторожевой скрипт |
| После обновления прошивки VPN пропал | sysupgrade не сохраняет пакеты | Переустановить пакеты или использовать Attended Sysupgrade |
OpenVPN: TLS handshake failed | Часы или несовпадение шифров | Проверить NTP, привести data-ciphers к настройкам сервера |
Шпаргалка команд
wg show # ключи, рукопожатие, счётчики байт
logread -e openvpn # лог OpenVPN (-f — в реальном времени)
ubus call network.interface.wgvpn status # что думает об интерфейсе netifd
ip route get 1.1.1.1 # через какой интерфейс уйдёт пакет
nft list ruleset # действующие правила firewall
ifdown wgvpn && ifup wgvpn # перезапустить туннель
/etc/init.d/network reload # применить изменения сети
uci set network.wgvpn.mtu=1412 # задать MTU (затем uci commit network)
ping -c3 10.10.10.1 # сервер внутри туннеля
uclient-fetch -qO- https://ipinfo.io/ip # внешний IP глазами роутера
sysupgrade -b /tmp/backup.tar.gz # архив настроек
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Какой роутер купить, если своего под OpenWrt ещё нет?
Смотрите Table of Hardware, берите модель с флешем от 16 МБ и ОЗУ от 128 МБ. Не хотите прошивать сами — устройства GL.iNet идут с похожей прошивкой из коробки.
Что лучше для VPN-клиента: OpenWrt, Mikrotik или Keenetic?
Фирменные прошивки надёжнее и без риска при установке, но требуют покупки железа. Если подходящий роутер уже есть — OpenWrt почти всегда выгоднее.
Можно ли держать WireGuard и OpenVPN одновременно?
Да. Включённым для всего трафика держат один, второй хранят запасным или разводят между устройствами через PBR.
Роутер стал заметно медленнее после включения VPN?
Это нормально: шифрование считает его процессор, а он слабее и сервера, и ноутбука. Насколько именно — зависит от железа, измеряйте iperf3.
Внешний IP сменился, а сайты всё равно определяют мою страну.
Дело в DNS или IPv6: имена спрашиваются у провайдера либо часть трафика идёт мимо туннеля. Проверьте оба пункта на whoer.net.
Что будет с домашним интернетом, если сервер выключится?
По умолчанию трафик молча пойдёт в обход. Чтобы этого не случилось, вынесите VPN в отдельную зону и уберите forwarding lan → wan.
Нужно ли пробрасывать порт на домашнем роутере?
Нет, роутер здесь клиент и сам инициирует соединение. Проброс нужен в обратной схеме, когда сервер поднимается дома.
Хватит ли роутера с 4 МБ флеша?
Для одного WireGuard на урезанном образе без LuCI теоретически да, но вместе с OpenVPN и веб-интерфейсом места не хватит.
Что делать, если после прошивки роутер не загружается?
Большинство устройств поддерживают recovery-режим (TFTP или reset при включении) — процедура описана на странице модели в Table of Hardware.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →