настройка WireGuard site-to-site VPN между MikroTik
WireGuard - современный VPN-протокол с простой настройкой и минимальным overhead.
Начиная с RouterOS v7 WireGuard встроен в систему и сейчас это один из самых удобных способов связать филиалы через интернет. WireGuard быстро устанавливает защищенный VPN tunnel между peer-ами, нормально работает за NAT и обычно требует меньше отладки, чем многие классические VPN решения.
WireGuard не требует сертификатов и PKI инфраструктуры.
Безопасность WireGuard строится на современной криптографии: Curve25519, ChaCha20, Poly1305 и Noise Protocol Framework.
WireGuard может автоматически обновлять endpoint удаленного peer-а после успешного handshake. Это удобно при динамических IP, CGNAT и резервных каналах.
Info
При изменении endpoint-address tunnel может продолжать работать до следующего handshake благодаря roaming механизму WireGuard.
WireGuard не использует TCP и работает только поверх UDP.
Инструкция проверялась на RouterOS v7.
По итогу получаем:
- постоянный site-to-site VPN
- маршрутизацию между филиалами
- доступ между LAN сетями
- минимальную нагрузку на роутеры
00. схема
Пример:
MikroTik-1
LAN: 192.168.10.0/24
MikroTik-2
LAN: 192.168.20.0/24
Tunnel subnet:
10.0.0.0/30
MikroTik-1
10.0.0.1
MikroTik-2
10.0.0.2
Для point-to-point VPN tunnel обычно используют /30 или /31 subnet.
01. требования
Нужно:
- RouterOS v7 на обоих роутерах
- хотя бы один endpoint должен быть reachable из интернета
- доступность UDP порта WireGuard
- разные LAN подсети на филиалах
Warning
- Одинаковые LAN сети между филиалами использовать нельзя.
- Если оба peer находятся за CGNAT/NAT и ни один не имеет reachable endpoint, WireGuard tunnel не сможет установить handshake напрямую.
02. создание WireGuard интерфейсов
MikroTik-1:
/interface wireguard
add name=wg-mikrotik-2 listen-port=51820 mtu=1420
MikroTik-2:
/interface wireguard
add name=wg-mikrotik-1 listen-port=51820 mtu=1420
MTU 1420 обычно нормально работает через NAT, PPPoE и большинство провайдеров, но оптимальное значение зависит от сетевой схемы и провайдера.
При проблемах с packet loss, нестабильным traffic или PPPoE может потребоваться уменьшение MTU.
03. tunnel IP адреса
MikroTik-1:
/ip address
add address=10.0.0.1/30 interface=wg-mikrotik-2
MikroTik-2:
/ip address
add address=10.0.0.2/30 interface=wg-mikrotik-1
04. public keys
WireGuard автоматически создает private-key и public-key. Public-key используется для подключения peer-ов друг к другу, а private-key остается только на своем роутере и используется для шифрования VPN tunnel.
Посмотреть ключи:
/interface wireguard print detail
Нужен параметр public-key.
Warning
Не используйте одинаковый private-key на нескольких роутерах.
Info
При изменении public-key peer-а tunnel перестанет работать до обновления peer configuration на противоположной стороне.
05. peer настройка
allowed-address в WireGuard одновременно определяет допустимые source addresses peer-а и создает маршруты к этим сетям.
Warning
-
Использование 0.0.0.0/0 в allowed-address изменяет routing behavior и обычно применяется только для full-tunnel VPN.
-
WireGuard peer идентифицируется по public-key и allowed-address. Неправильные или пересекающиеся allowed-address могут приводить к выбору неправильного peer.
-
endpoint-address должен быть доступен из интернета по UDP порту WireGuard.
-
Если IP динамический - лучше использовать DDNS.
-
allowed-address не должен пересекаться между разными peers.
endpoint-address поддерживает:
- IP адрес
- DNS имя
- MikroTik DDNS hostname
Info
В RouterOS WireGuard peers обрабатываются сверху вниз. При пересекающихся allowed-address может использоваться первый подходящий peer.
MikroTik-1:
/interface wireguard peers
add interface=wg-mikrotik-2 public-key="MIKROTIK_2_PUBLIC_KEY" endpoint-address=MIKROTIK_2_IP endpoint-port=51820 allowed-address=10.0.0.2/32,192.168.20.0/24 persistent-keepalive=25s
MikroTik-2:
/interface wireguard peers
add interface=wg-mikrotik-1 public-key="MIKROTIK_1_PUBLIC_KEY" endpoint-address=MIKROTIK_1_IP endpoint-port=51820 allowed-address=10.0.0.1/32,192.168.10.0/24 persistent-keepalive=25s
persistent-keepalive=25s обычно используют для NAT traversal при NAT, CGNAT и динамических подключениях.
Для peer-ов с публичным статическим IP без NAT persistent-keepalive обычно не нужен.
Для динамических IP на MikroTik можно использовать встроенный DDNS:
/ip cloud set ddns-enabled=yes
Проверить адрес:
/ip cloud print
При использовании dynamic routing (OSPF/BGP) allowed-address обычно ограничивают только tunnel IP адресами.
06. firewall
Разрешаем входящий WireGuard:
/ip firewall address-list
add list=WG_PEERS address=X.X.X.X
/ip firewall filter
add chain=input action=accept protocol=udp dst-port=51820 src-address-list=WG_PEERS comment="WireGuard"
Разрешаем трафик между филиалами:
/ip firewall filter
add chain=forward action=accept src-address=192.168.10.0/24 dst-address=192.168.20.0/24 comment="WG site-to-site"
add chain=forward action=accept src-address=192.168.20.0/24 dst-address=192.168.10.0/24 comment="WG site-to-site"
Если используется default masquerade:
/ip firewall nat
add chain=srcnat action=accept src-address=192.168.10.0/24 dst-address=192.168.20.0/24 comment="WG bypass"
add chain=srcnat action=accept src-address=192.168.20.0/24 dst-address=192.168.10.0/24 comment="WG bypass"
Эти правила нужны только если используется srcnat/masquerade.
Info
Правила NAT bypass должны стоять выше masquerade.
RouterOS v7 обычно автоматически создает dynamic routes (динамические маршруты) через allowed-address, проверить можно так:
/ip route print
При multi-WAN конфигурациях может потребоваться policy routing или routing rules для WireGuard traffic.
В сложных схемах с VRF, policy routing или multi-WAN может потребоваться ручная маршрутизация.
07. проверка
Проверяем peer:
/interface wireguard peers print
Если VPN tunnel поднялся - появится last-handshake и начнут увеличиваться rx/tx counters, например:
last-handshake: 10s ago
rx: 12.3 MiB
tx: 8.5 MiB
WireGuard peer не имеет отдельного connected/disconnected состояния.
WireGuard интерфейс не имеет отдельного tunnel state, как IPsec/OpenVPN. Основной индикатор работы - успешный handshake и traffic counters.
WireGuard не выполняет постоянную проверку доступности peer-а.
Tunnel считается активным только при успешном обмене traffic между peer-ами.
WireGuard инициирует handshake при наличии traffic или persistent-keepalive traffic. Отсутствие handshake при полном отсутствии traffic не всегда означает проблему.
Проверяем ping между LAN.
MikroTik-1 → MikroTik-2:
ping 192.168.20.1
MikroTik-2 → MikroTik-1:
ping 192.168.10.1
08. диагностика
Подробный peer status:
/interface wireguard peers print detail
Мониторинг интерфейса:
/interface wireguard monitor wg-mikrotik-2
monitor показывает current endpoint, latest handshake и rx/tx counters.
Статистика peer:
/interface wireguard peers print stats
Счетчики обновляются только при наличии traffic.
Логи:
/log print where topics~"wireguard"
Torch traffic capture:
/tool torch interface=wg-mikrotik-2
Torch может показывать не весь traffic при FastTrack или hardware offload.
Hardware offload также может влиять на диагностику traffic и rx/tx counters.
Альтернативно можно использовать sniffer:
/tool/sniffer quick interface=wg-mikrotik-2
Проверка tunnel IP:
/ping 10.0.0.2 interface=wg-mikrotik-2
Connections:
/ip firewall connection print where dst-port=51820
Routes:
/ip route print
09. типовые проблемы
handshake есть, но трафик не идет
Причины:
- firewall режет forward
- отсутствует NAT bypass
- конфликт подсетей
- неправильный allowed-address
- проблемы маршрутизации
tunnel постоянно reconnect
Причины:
- CGNAT
- ISP filtering
- нестабильный интернет
- отсутствует persistent-keepalive
пингуется только tunnel IP
Причины:
- LAN сеть не входит в allowed-address
- firewall режет forward
- NAT masquerade ломает routing
- конфликт маршрутов
не поднимается handshake
Проверить:
- доступность UDP 51820
- внешний IP
- endpoint-address
- NAT/port-forward
- правильность public-key
10. FastTrack и WireGuard
FastTrack обходит часть обработки firewall, connection tracking и queue processing.
FastTrack может вызывать проблемы в VPN схемах, где используются:
- mangle
- policy routing
- queue tree
- traffic accounting
Для диагностики VPN проблем FastTrack лучше временно отключить, либо исключить VPN traffic до FastTrack rules:
/ip firewall filter
add chain=forward action=accept src-address=192.168.10.0/24 dst-address=192.168.20.0/24 place-before=[find action=fasttrack-connection]
add chain=forward action=accept src-address=192.168.20.0/24 dst-address=192.168.10.0/24 place-before=[find action=fasttrack-connection]
11. итог
WireGuard в RouterOS v7 - простой и быстрый способ построить site-to-site VPN между филиалами.
При правильной настройке VPN tunnel стабильно работает через NAT, динамические IP, резервные каналы и обычных интернет провайдеров.
При этом WireGuard создает минимальную нагрузку на роутер, быстро устанавливает VPN tunnel, просто диагностируется и не требует сложной инфраструктуры.
полезные ссылки
WireGuard
https://www.wireguard.com/
MikroTik WireGuard
https://help.mikrotik.com/docs/display/ROS/WireGuard
MikroTik Connection Tracking
https://help.mikrotik.com/docs/display/ROS/Connection+tracking