К контенту
habrforever
СКРЫТА #wireguard ≈2020 · ~8 мин чтения

Связываем две локальные сети с помощью Wireguard VPN на выделенном сервере — актуализация 2026

автор оригинала: Павел Мухатаев (pinoquinho)

оригинал на Хабре habr.com/…/599623
снимок Wayback web.archive.org
статус на Хабре (ноябрь 2026) скрыта (403/451)
права © автор, переиздание в архивных целях с указанием источника

Связываем две локальные сети с помощью Wireguard VPN на выделенном сервере

Архивное переиздание с актуализацией. Оригинал опубликован на Habr (≈2020), автор — Павел Мухатаев (pinoquinho). оригинал скрыт на Habr (HTTP 403/451), доступен только через Wayback Machine Снимок: Wayback Machine. Ниже — редакция ноября 2026: что работает сейчас, что изменилось и как правильно повторить рецепт сегодня. Полный текст оригинала — в конце, без купюр.

TL;DR — версия 2026

WireGuard — по-прежнему лучший «нормальный» VPN (ядро Linux 6.x, RouterOS 7, все клиентские ОС), но в РФ его голый хендшейк режется DPI: используйте AmneziaWG (обфусцированный форк) на нестандартном UDP-порту.

С момента публикации оригинала WireGuard из «модной новинки» стал инфраструктурной нормой: он в mainline-ядре, во всех роутерах RouterOS 7, в NetworkManager и в «Настройках» iOS/macOS как нативный L3-протокол. Но именно эта популярность его и выдала: ТСПУ (DPI-боксы) стоят у всех крупных российских провайдеров и умеют резать VPN-хендшейки WireGuard, OpenVPN и «голый» Shadowsocks, а хендшейк WireGuard — статичная сигнатура на фиксированных портах (51820 и популярных «пере-портовках»). по данным РКН, за 2025 год в России заблокировано 258 VPN-сервисов. Поэтому в 2026 есть простое правило: WireGuard для своих сетей — да, WireGuard «напрямую в интернет из РФ» — только в обфусцированном виде.

Статус оригинала

DNS: свою цепочку — обязательно

В 2026 нельзя оставлять системный DNS: провайдер резолвит «не тот» IP для заблокированных доменов. Минимум — DoT/DoH (dnscrypt-proxy как в оригинале, либо AdGuard Home), максимум — связка из оригинала Unbound+Pi-hole, где заблокированные домены уходят в отдельный upstream через туннель. Pi-hole с 2023 жив в v6 (FTL v6, web-интерфейс переписан), Unbound — в 1.2x.

AmneziaWG: WireGuard, который не видно

Форк AmneziaWG (AWG) добавляет в handshake мусорные пакеты, перемешивает порядок полей и прячет тип пакетов Initiation/Response — DPI не может собрать сигнатуру. Конфиги полностью совместимы с обычным wg (те же ключи, тот же Address/AllowedIPs), просто на обеих сторонах должен стоять amnezia-wg вместо vanilla wg. Варианты внедрения:

  • сервер: amnezia-wg из репозитория Amnezia или собрать из исходников; клиенты: приложение AmneziaVPN (все платформы) подхватит всё само;
  • панели: актуальные форки awg-easy (wg-easy с поддержкой AWG) — веб-интерфейс, QR-коды, как в оригинальной статье;
  • параметры обфускации (Jc, Jmin, Jmax, S1, S2, H1–H4) прописываются прямо в секции [Interface] конфига.

Сервер за 5 минут в 2026

Скрипт-установщик и Docker-образы из оригинала живы, но проверенные пути 2026:

# Debian 12/13, Ubuntu 24.04+
apt install amnezia-wg qrencode
awg genkey | tee privatekey      # ключ сервера
awg pubkey < privatekey          # публичный

wg0.conf/awg0.conf — тот же синтаксис, что в оригинале, плюс блок обфускации. Порт берите не 51820, а случайный высокий UDP (РКН исторически резал и 4500, и 9009, и 51820). Фаервол — как в оригинале: только ваш UDP-порт и SSH.

Site-to-Site и домашние сети: всё работает как раньше

Связка «две локалки через выделенный сервер» из оригинала не устарела ни на йоту: AllowedIPs с подсетями, PersistentKeepalive 25 на стороне за NAT. В 2026 добавились удобства: RouterOS 7 умеет WG нативно (/interface/wireguard), MikroTik hAP-стёки и GL.iNet Beryl AX прошиваются с AWG. Для(site-to-site) внутри РФ без выхода наружу обфускация вообще не нужна — режут только «наружные» хендшейки.

Что изменилось с ≈2020 года

  • wg в ядре Linux 6.x — kmod-WireGuard из DKMS больше не нужен
  • голый WG на 51820 режется DPI — обязателен AWG или нестандартный порт
  • wg-easy оригинальный не обновлялся — используйте живые форки (awg-easy и др.)
  • Cisco/meraki-стёки из «корпоративных» статей уступили zeroconf-альтернативам: Tailscale/Headscale/NetBird поверх WG
  • DNSCrypt-proxy из оригинала всё ещё жив, но чаще ставят AdGuard Home/Unbound
  • в тексте оригинала: у «ванильного» WireGuard статичный хендшейк — DPI его режет; обфусцированный вариант — AmneziaWG

Чек-лист 2026

  • AmneziaWG на обеих сторонах (сервер + клиенты)
  • случайный высокий UDP-порт
  • PersistentKeepalive 25 за NAT
  • свой DNS (DoH/DoT) внутри туннеля
  • MTU 1280–1420 при CDN/облаках, иначе фрагментация

Вердикт

WireGuard в 2026 — это «электричество» частных сетей: скучно, стандартизовано, везде работает. Из оригинального гайда выбросите только одно — наивную веру, что его не видно. Ставьте AWG, и статья снова актуальна слово в слово.


ОРИГИНАЛ СТАТЬИ (без изменений)

Эта статья - продолжение Настройка маршрутизации в сети с неподконтрольным роутером. Итак имеем домашнюю локальную сеть, роутер от провайдера без возможности прошивки и почти без возможности настройки. Ставим в локальной сети сервер. Настраиваем на сервере Wireguard VPN и связываем две локальные сети. Другая локальная сеть - маршрутизатор Xiaomi Mi Router 3G с прошивкой Padavan и установленным Entware.

В принципе инструкций по настройке Wireguard - масса. Но меня долго смущал дополнительный частный диапазон адресов для wireguard. Лично я долго не мог понять, да и сейчас не понимаю, зачем нужно каждому wg устройству назначать адрес из частного диапазона. Могу понять зачем это нужно для одного клиента - ему же нужен какой-то адрес. Но зачем это нужно для связывания двух разных сети - непонятно. У специалистов настройка wireguard вообще не вызывает никаких проблем, но я не они. Кстати мне больше всего понравилась инструкция на сайте keenetic - по ней я все и делал. Возможно данная статья кому-то поможет.

Параметры

Локальная сеть - 192.168.2.0/24

Роутер - 192.168.2.1

Сервер в локальной сети - 192.168.2.4, ethernet интерфейс - enp1s0

Другая локальная сеть (за xiaomi mi router) - 192.168.3.0/24

wireguard device network (частный диапазон IP адресов из которого назначаются адреса wireguard интерфейсам) - 10.253.1.0/24

сервер wireguard address - 10.253.1.2

android клиент - 10.253.1.10

xiaomi mi router wireguard address - 10.253.1.3

Dnsmasq

Чтобы все работало в локальной сети необходимо добавить два новых маршрута, которые мы анонсируем через DHCP, чтобы трафик в другую локальную сеть и wireguard device network шел через наш сервер: /etc/dnsmasq.d/dhcp.conf

На клиенте, который использует DHCP для получения IP адреса и конфигурации это должно выглядеть так:

# ip route default via 192.168.2.1 dev enp3s0 proto dhcp metric 100 10.252.0.0/14 via 192.168.2.4 dev enp3s0 proto dhcp metric 100 192.168.2.0/24 dev enp3s0 proto kernel scope link src 192.168.2.30 metric 100 192.168.3.0/24 via 192.168.2.4 dev enp3s0 proto dhcp metric 100

Для Windows клиента таблицу маршрутизации можно посмотреть командой route print.

Видим, что трафик для соседней LAN (192.168.3.0/24) и wg private interace (10.252.0.0/14) маршрутизируется через наш сервер (192.168.2.4). Строго говоря wg private interace у меня 10.253.1.0/24, но подсеть 10.254.0.0/16 используется для других нужд и тоже маршрутизируется через сервер, поэтому я написал одно более общее правило вместо двух.

Wireguard сервер

Ставим на сервер пакет wireguard: sudo apt install wireguard.

Генерируем пару ключей (открытый + закрытый) для сервера:

cd /etc/wireguard wg genkey > private-key wg pubkey > public-key < private-key

Создаем конфигурацию /etc/wireguard/wg0.conf

Запускаем wireguard sudo systemctl start wg-quick@wg0.service.

Включаем автозапуск для wireguard sudo systemctl enable wg-quick@wg0.service.

В ubuntu все работает - создается интерфейс wg0, создаются маршруты.

Проверить статус можно командой wg showconf wg0, wg show, маршруты командой ip route.

В настройках роутера пробрасываем wireguard порт до нашего сервера.

Android client

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

Padavan + Entware

Файлы настроек:

/opt/etc/wireguard/wg0.conf

/opt/etc/init.d/S50wireguard

Для работы Entware на прошивке Padavan нужна USB флешка. Как ставить entware написано в padavan wiki.

Ставим пакет wireguard-go: opkg install wireguard-go. Теоретически можно использовать утилиту wg-quick для настройки интерфейса и маршрутизатора, но у меня оно почему-то правильно не заработало. В принципе wg-quick - это простой bash скрипт, можно было и разобраться что именно не работает, но разбираться я не стал.

Итак настраиваем wireguard вручную как написано на официальном сайте. Создаем файл конфигурации /opt/etc/wireguard/wg0.conf. Я закоментировал строчку “Address=…” конфигурации wg0.conf из секции [Interfaces]. Это потому что по какой-то причине wg setconf ее не принял, ну и ладно, настроим адрес вручную (командой ip address add dev wg0 10.253.1.3/24).

Выполняем

wireguard-go wg0 ip address add dev wg0 10.253.1.3/24 wg setconf wg0 /opt/etc/wireguard/wg0.conf ip link set up dev wg0 ip route add 192.168.2.0/24 dev wg0 src 192.168.3.1 iptables -t filter -A INPUT -i wg0 -j ACCEPT iptables -t filter -A FORWARD -i wg0 -j ACCEPT

Примечание:

Маршрут ip route add 10.253.1.0/24 dev wg0 src 10.253.1.3 добавился сам, поэтому ручками добавляем только маршрут для 192.168.2.0/24.

Переопределяем iptables policy по умолчанию для цепочек INPUT, FORWARD таблицы filter - у меня значения по-умолчанию были DROP, с ними маршрутизация из локальной сети 192.168.2.0/24 в 192.168.3.0/24 (в мою локальную сеть) не работала.

Все эти команды для запуска и остановки wireguard сохраняем в /opt/etc/init.d/S50wireguard - теперь должно автоматически запускаться при старте маршрутизатора.

Настройка iptables

После некоторых обновлений конфигурации маршрутизатора (например обновление правил белых/черных списков по mac адресу - web интерфейс маршрутизатора -> Advanced settings -> Firewall -> MAC Filter) маршрутизатор с прошивкой padavan сбрасывает правила iptables. Чтобы все продолжало работать в прошивке есть файлик [/opt/etc/init.d/S10iptables](https://github.com/mpashka/home-incubator/blob/master/home-configuration/optware-router/opt/etc/init.d/S10iptables) (softlinkg) -> [/opt/bin/update_iptables.sh](https://github.com/mpashka/home-incubator/blob/master/home-configuration/optware-router/opt/bin/update_iptables.sh), который запускается после обновления конфигурации. В него заносим все правила iptables - у меня там правила для wireguard и правила, которые я настроил для прозрачного использования tor в локальной сети, который настроил по этой инструкции.

Доступ к роутеру из VPN

Поскольку на неподконтрольном роутере нашей основной сети таблицу маршрутизации мы настроить не можем, то не можем и получить к нему доступ из VPN напрямую. Чтобы получить web доступ к роутеру можно добавить nginx reverse proxy configuration. Можно поставить на любой хост из основной локальной сети - но логично поставить на сервер. Например на порту 8081. Ссылку на файл конфигурации надо добавить в директорию /etc/nginx/sites-enabled - обычно сам файл настроек помещают в /etc/nginx/sites-available/ а в sites-enabled создают символическую ссылкуln -s /etc/nginx/sites-available/local ./.

Перезагружаем конфигурацию nginx на сервере: sudo systemctl reload nginx.

Теперь роутер доступен по адресу http://192.168.2.4:8081.

по теме #wireguard