WireGuard на OpenWrt позволяет поднять легкий и быстрый VPN, через который можно безопасно получать доступ к локальной сети, использовать локальный DNS роутера и выходить в интернет с IP домашнего маршрутизатора. В этом руководстве по шагам разбирается настройка WireGuard-сервера в LuCI и через конфиги, создание отдельной firewall-зоны для VPN, проброс порта с WAN, а также тонкости работы DNS через dnsmasq для корректного резолвинга локальных хостов и внешних доменов из VPN. Отдельный раздел посвящен типичным проблемам (нет доступа к LAN, не работает DNS в туннеле) и их решению, включая проверку того, что dnsmasq слушает интерфейс WireGuard.
Такой вариант настройки WireGuard на OpenWrt удобен прежде всего для безопасного удалённого доступа к своей домашней инфраструктуре. Пользователь получает зашифрованный туннель до роутера, из которого видит всю локальную сеть и использует тот же DNS, что и дома, включая резолвинг внутренних имён устройств (NAS, медиа‑сервер, контроллер умного дома и т.п.). Это полезно для удалённого администрирования, доступа к личным файлам и сервисам без открытия лишних портов наружу, а также для удобной работы с «частным» внутренним доменом и сервисами, которые изначально не предназначены для выхода в интернет.
Второе практическое применение — унификация выхода в интернет для личных устройств, когда важно, чтобы они всегда «выходили» в сеть с IP домашнего роутера. Это помогает, например, при работе с сервисами, которые привязаны к определённому местоположению или IP, для удалённой работы с корпоративными ресурсами через доверенный домашний узел, либо для того, чтобы обеспечить одинаковую политику фильтрации/логирования через свои DNS и файрвол. В результате ноутбук или смартфон за пределами дома логически становится частью домашней сети: использует один и тот же DNS, видит локальные ресурсы и выходит в интернет так, как если бы был подключён к Wi‑Fi дома.
1. Установка пакетов
- В LuCI: System → Software → Update lists.
- Установи пакеты:
kmod-wireguardwireguard-toolsluci-proto-wireguard
После установки перезапусти LuCI (или роутер, если хочется «чисто»).
2. Создание WireGuard‑интерфейса
- Network → Interfaces → Add new interface.
- Name:
wgs0(название произвольное, но дальше пример сwgs0). - Protocol: WireGuard VPN.
- В настройках интерфейса
wgs0:
- Generate keypair → сохранить Private Key (остается на роутере) и Public Key (для клиентов).
- Listen Port:
51820(или любой UDP, главное потом пробросить на WAN). - IP address: например
172.31.27.1/24— это внутренняя подсеть для VPN‑клиентов.
Сохрани (Save & Apply).
3. Добавление peer (клиента) на роутере
В интерфейсе wgs0 → вкладка Peers → Add peer.
Для каждого клиента (телефон, ноутбук):
- Description: что‑то вроде
phone. - Public Key: публичный ключ клиента (сгенерируешь на клиенте).
- Allowed IPs: например
172.31.27.2/24(уникальный IP клиента в VPN‑подсети). - Route Allowed IPs: включить (галка), чтобы OpenWrt анонсировал маршрут для сети клиента.
Если хочешь, чтобы один клиент имел несколько адресов/подсетей — можно добавить несколько Allowed IPs, но в типичном случае один /32.
4. Firewall: зона для WireGuard
Рекомендуется отдельная зона wg (или vpn), с доступом в LAN и WAN.
- Network → Firewall → Zones → Add:
- Name:
wg. - Covered networks: поставить галку на
wgs0. - Input:
accept(чтобы клиент мог достучаться до роутера и DNS). - Output:
accept. - Forward:
accept. - Masquerading: включить (нужно для выхода клиентов в интернет через WAN).
- MSS clamping: включить (желательно).
Сохрани.
- Там же внизу: Forwardings:
- Allow forward from
wgtolan(доступ из VPN в локалку). - Allow forward from
wgtowan(доступ из VPN в интернет).
Если нужно, чтобы LAN тоже могла ходить в VPN (редко нужно) — добавь lan → wg, но обычно это не
требуется.
- Открытие порта WireGuard с WAN:
Network → Firewall → Traffic Rules → Add.
- Name:
wan-local-wg. - Protocol:
UDP. - Source zone:
wan. - Destination zone:
device(илиthis device). - Destination port:
51820.
Сохранить и применить.
5. Доступ к локальной сети
При указанной выше схеме (зона wg разрешена в lan) клиент будет видеть всю LAN по IP‑адресам.
Важно:
- На клиенте в
AllowedIPsуказываем не только10.10.10.0/24, но и подсеть LAN, например192.168.1.0/24, если нужен доступ к локалке через VPN. - Про DNS и имена см. следующий раздел.
Если LAN не пингуется:
- Проверь, что интерфейс
wgs0добавлен в зонуwg, а не вwan/lanпо ошибке. - Убедись, что нет других правил, блокирующих forward
wg→lan.
6. Настройка локального DNS для клиентов
Задача: чтобы клиент через VPN использовал DNS роутера и мог резолвить локальные hostnames.
Вариант через WireGuard (per peer)
В конфигурации клиента (на стороне телефона/ноута):
- DNS (если клиент поддерживает, напр. Android/Windows):
172.31.27.1(IP роутера в LAN) или IPwgs0(172.31.27.1).
На роутере:
- DNS rebind protection: если используешь свой локальный домен (типа
home.lan,local), добавь его в whitelist в DHCP → DNS and DHCP → Domain whitelist или отключи rebind protection (менее безопасно).
Таким образом:
- Весь DNS‑трафик клиента пойдет на роутер.
- Роутер разруливает локальные имена (через dnsmasq/odhcpd) и внешние (через провайдера или твой апстрим‑DNS).
Вариант через DHCP на OpenWrt (если клиенты — за другим роутером)
Если WireGuard‑клиент — это отдельный роутер (travel‑router, второй OpenWrt и т.п.), то на нем в DHCP надо прописать DNS как IP главного роутера.
7. Полный туннель (интернет через IP роутера)
Чтобы весь трафик клиента шел через WireGuard и уходил в интернет с IP твоего OpenWrt:
- На клиенте в конфигурации:
AllowedIPs = 0.0.0.0/0, ::/0(full tunnel).- DNS = IP роутера (как в предыдущем разделе).
- На роутере:
- В зоне
wgвключено Masquerading (уже сделали выше). - Есть forward
wg→wan(тоже сделали).
Этого достаточно, чтобы:
- VPN‑клиент выходил в интернет с IP роутера.
- Клиент имел доступ в LAN и к самому роутеру.
Если интернет не ходит:
- Проверь, что у интерфейса
wgs0включенRoute Allowed IPs(при конфигурации peer на стороне OpenWrt). - Убедись, что основной маршрут клиента действительно через WireGuard (на Linux
ip route, на Windowsroute print, на Android — через GUI).
8. Пример конфигов (схематично)
/etc/config/network (фрагмент)
config interface 'wgs0'
option proto 'wireguard'
option private_key 'ROUTER_PRIVATE_KEY'
option listen_port '51820'
list addresses '172.31.27.1/24'
config wireguard_wgs0 'client1'
option public_key 'CLIENT1_PUBLIC_KEY'
list allowed_ips '172.31.27.2/32'
option route_allowed_ips '1'
/etc/config/firewall (фрагмент)
config zone
option name 'wg'
list network 'wgs0'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option masq '1'
option mtu_fix '1'
config forwarding
option src 'wg'
option dest 'lan'
config forwarding
option src 'wg'
option dest 'wan'
config rule
option name 'Allow-WireGuard-Inbound'
option src 'wan'
option dest_port '51820'
option proto 'udp'
option target 'ACCEPT'
9. Что прописать на клиенте (пример)
Например, мобильный клиент:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 172.31.27.2/32
DNS = 172.31.27.1
[Peer]
PublicKey = ROUTER_PUBLIC_KEY
Endpoint = YOUR_WAN_IP_OR_DDNS:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
DNS = 192.168.1.1— локальный DNS роутера (можно172.31.27.1).AllowedIPs = 0.0.0.0/0— весь трафик через VPN.
Если хочешь split‑tunnel (только доступ к LAN, интернет — мимо VPN) — меняешь AllowedIPs на
172.31.27.0/24, 192.168.1.0/24 и убираешь 0.0.0.0/0.
Решение проблем
- Если VPN поднимается, LAN пингуется, но не работает DNS‑резолвинг (домены и имена хостов), нужно
проверить настройки dnsmasq на OpenWrt. В Network → DHCP and DNS (или в
/etc/config/dhcp) убедись, что dnsmasq слушает все интерфейсы по умолчанию, либо явно перечислены интерфейсы, включаяwgs0(например, черезlist interface 'lan'иlist interface 'wgs0'). Если раньше ограничивал прослушивание толькоbr-lanили другими интерфейсами (interface=br-lanвdnsmasq.confилиoption interface 'lan'безwgs0), добавь туда WireGuard‑интерфейс или убери ограничение, и перезапусти dnsmasq (/etc/init.d/dnsmasq restart)