OpenWrt · WireGuard
18 минут чтения

WireGuard на OpenWrt: пошаговая настройка через LuCI и консоль UCI

OpenWrt даёт два равнозначных пути настройки WireGuard: через веб-интерфейс LuCI для наглядности и через консоль UCI для воспроизводимой конфигурации, которую легко перенести на другой роутер или сохранить как шаблон. В этой инструкции мы пройдём оба пути параллельно, настроим firewall с полноценным kill switch, разберёмся с DNS-утечками и научимся диагностировать типичные проблемы установления соединения.

Получить готовую конфигурацию

Выполняйте шаги последовательно и сохраняйте резервную копию. Названия пунктов могут незначительно отличаться в разных версиях прошивки.

ШАГ 01

Требования к роутеру и версии прошивки

WireGuard встроен в ядро Linux начиная с версии 5.6, и большинство актуальных сборок OpenWrt 21.02 и новее уже используют совместимое ядро, поэтому отдельно собирать модуль не требуется. На старых версиях 19.07 и ниже поддержка идёт через отдельный kmod-пакет, который иногда приходится собирать под конкретную архитектуру вручную.

Проверьте объём свободной флеш-памяти перед установкой: пакеты luci-proto-wireguard и wireguard-tools вместе с зависимостями занимают около 1-2 МБ, что может быть критично для роутеров с 8 МБ флеш-памяти без встроенного расширения.

Убедитесь, что у роутера достаточно вычислительной мощности для шифрования на скорости вашего интернет-канала: на слабых одноядерных MIPS-платформах WireGuard редко превышает 40-60 Мбит/с даже без дополнительной нагрузки, тогда как современные двухъядерные ARM-модели легко тянут 300+ Мбит/с.

ШАГ 02

Установка пакетов

Обновите индекс пакетов и установите протокол WireGuard для LuCI вместе с набором консольных утилит wg и wg-quick. На новых сборках ядро уже содержит необходимый модуль, поэтому отдельный kmod чаще всего подтягивается автоматически как зависимость.

После установки перезапустите веб-сервер uhttpd, чтобы LuCI подхватил новый протокол в списке доступных при создании интерфейса — без этого шага новый пункт WireGuard VPN может не появиться в выпадающем списке сразу после установки пакета.

CONFIG / TERMINAL
opkg update
opkg install luci-proto-wireguard wireguard-tools
/etc/init.d/uhttpd restart

Нужны параметры без ручного подбора?

Получите готовый профиль для своего роутера — ключи, endpoint и параметры обфускации уже заполнены.

Получить готовую конфигурацию
ШАГ 03

Генерация и подготовка ключей

Если провайдер VPN-сервиса не выдал готовый профиль, ключевую пару можно сгенерировать прямо на роутере через SSH-консоль штатной утилитой wg. Приватный ключ никогда не покидает устройство и не должен передаваться администратору сервера — ему нужен только публичный ключ, полученный на втором шаге.

Храните приватный ключ в защищённом месте отдельно от конфигурационных файлов, которые вы можете случайно выложить в публичный репозиторий или переслать в мессенджере при обращении в поддержку.

CONFIG / TERMINAL
wg genkey | tee privatekey | wg pubkey > publickey
cat privatekey
cat publickey

Публичный ключ передайте администратору сервера, приватный — оставьте только на роутере.

ШАГ 04

Настройка через LuCI

Откройте «Сеть → Интерфейсы», добавьте новый интерфейс WG0 и выберите протокол WireGuard VPN из выпадающего списка. Вставьте приватный ключ, адрес интерфейса в формате CIDR (например 10.8.0.2/32) и, при необходимости, задайте MTU вручную вместо значения по умолчанию.

Перейдите на вкладку Peers и добавьте peer с публичным ключом сервера, адресом и портом endpoint и разрешёнными адресами AllowedIPs. Для полного туннелирования укажите 0.0.0.0/0, для раздельного доступа — только подсеть удалённой сети, например 10.8.0.0/24.

Включите опцию Route Allowed IPs, чтобы LuCI автоматически создал системный маршрут на основе указанных AllowedIPs — без этой галочки трафик будет шифроваться, но система не будет знать, что его нужно направлять именно в туннель.

  1. 1Создайте интерфейс WG0 с адресом из полученного профиля.
  2. 2Добавьте peer и включите Route Allowed IPs для автоматической маршрутизации.
  3. 3Укажите 0.0.0.0/0 для полного туннеля или конкретную подсеть для раздельного доступа.
  4. 4Установите Persistent Keep Alive 25 секунд, если клиент или сервер находятся за NAT.
  5. 5Привяжите интерфейс WG0 к нужной firewall-зоне на вкладке «Физические настройки».
ШАГ 05

Та же настройка через UCI

Команды удобно хранить как шаблон и версионировать в личном менеджере паролей или защищённом хранилище заметок — это упрощает перенос настройки на новый роутер при замене оборудования. Замените значения в угловых скобках на свои и не сохраняйте приватный ключ в публичном репозитории или системе тикетов поддержки.

После выполнения всех команд обязательно закоммитьте изменения в постоянное хранилище UCI и перезапустите сетевую службу — без commit конфигурация останется только в оперативной памяти и исчезнет при перезагрузке роутера.

CONFIG / TERMINAL
uci set network.wg0='interface'
uci set network.wg0.proto='wireguard'
uci set network.wg0.private_key='<PRIVATE_KEY>'
uci add_list network.wg0.addresses='10.8.0.2/32'
uci set network.wg0.mtu='1380'

uci add network wireguard_wg0
uci set network.@wireguard_wg0[-1].public_key='<SERVER_PUBLIC_KEY>'
uci set network.@wireguard_wg0[-1].endpoint_host='<SERVER_HOST>'
uci set network.@wireguard_wg0[-1].endpoint_port='51820'
uci set network.@wireguard_wg0[-1].route_allowed_ips='1'
uci add_list network.@wireguard_wg0[-1].allowed_ips='0.0.0.0/0'
uci set network.@wireguard_wg0[-1].persistent_keepalive='25'
uci commit network
/etc/init.d/network restart

Получить готовый конфиг

Если не хотите собирать профиль вручную, возьмите готовую конфигурацию и продолжайте инструкцию с шага импорта.

Получить готовую конфигурацию
ШАГ 06

Firewall, зоны и полноценный kill switch

Создайте отдельную firewall-зону wg, разрешите forwarding из зоны LAN в зону wg и включите masquerading для исходящего трафика через туннель. Это стандартная связка для клиентского сценария, когда роутер прячет за WireGuard весь домашний трафик или его выбранную часть.

Для строгого kill switch не разрешайте выбранным клиентам прямой выход LAN → WAN в обход туннеля: если интерфейс wg0 упадёт, трафик этих устройств должен просто прерываться, а не молча уходить через провайдера в открытом виде. Это критично, если основная цель настройки — конфиденциальность, а не только смена IP-адреса.

Дополнительно можно добавить правило, блокирующее исходящий трафик на порт 53 (DNS) из зоны LAN напрямую в зону WAN, оставив разрешённым только DNS-запрос внутрь туннеля — это закрывает частый сценарий утечки, когда VPN работает, а DNS резолвится напрямую через провайдера.

CONFIG / TERMINAL
uci add firewall zone
uci set firewall.@zone[-1].name='wg'
uci add_list firewall.@zone[-1].network='wg0'
uci set firewall.@zone[-1].input='REJECT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='REJECT'
uci set firewall.@zone[-1].masq='1'
uci commit firewall

uci add firewall forwarding
uci set firewall.@forwarding[-1].src='lan'
uci set firewall.@forwarding[-1].dest='wg'
uci commit firewall
/etc/init.d/firewall restart

Сначала проверьте туннель без строгого kill switch, чтобы не потерять удалённый доступ к роутеру в случае ошибки конфигурации.

ШАГ 07

Настройка DNS внутри туннеля

По умолчанию OpenWrt может продолжать использовать DNS-сервер провайдера даже при поднятом WireGuard, если явно не указать другой резолвер для интерфейса. Пропишите нужные DNS-серверы в настройках интерфейса WG0 и, при необходимости, настройте dnsmasq так, чтобы для клиентов из выбранной зоны использовался именно туннельный DNS.

Проверить отсутствие утечки можно специализированными онлайн-сервисами определения DNS-серверов или прямым запросом nslookup с указанием ожидаемого адреса резолвера — если ответ приходит не от того сервера, который вы указали в профиле, значит запрос ушёл в обход туннеля.

ШАГ 08

Проверка маршрута и итоговая диагностика

Проверьте состояние handshake, таблицу маршрутов и корректность DNS-запроса. Новый внешний IP-адрес должен совпадать с адресом сервера, а счётчики transfer в выводе wg show — увеличиваться при генерации любого исходящего трафика.

Если handshake не устанавливается вовсе, в первую очередь проверьте доступность endpoint по указанному порту снаружи (файрвол сервера может блокировать порт), совпадение публичных ключей и синхронизацию времени на обеих сторонах. Если handshake есть, а трафик не идёт — смотрите на AllowedIPs, firewall-forwarding и masquerade.

CONFIG / TERMINAL
wg show
ip route show
nslookup example.com
curl -4 https://ifconfig.co
logread | grep -i wireguard

Частые вопросы

Готовы подключить роутер?

Возьмите готовую конфигурацию и используйте эту инструкцию для установки и проверки.

Получить готовую конфигурацию

Продолжите настройку

Все руководства — настройка роутеров, MTU, DNS и устройств.