mikrotik-wiki.ru
Главная
Загрузка...

WireGuard VPN на MikroTik

RouterOS 7.xVPN4 мин430 мар. 2026 г.
TelegramVK

WireGuard VPN на MikroTik — полное руководство

WireGuard — самый простой и быстрый VPN-протокол в RouterOS 7. В этом руководстве настроим site-to-site туннель между двумя офисами и remote access для мобильных клиентов.

WireGuard доступен начиная с RouterOS 7.x и установлен по умолчанию.

Как работает WireGuard

WireGuard использует UDP и работает по принципу peer-to-peer. Каждый участник имеет пару ключей (публичный и приватный). Для установки соединения достаточно обменяться публичными ключами.

Ключевые параметры:

  • Listen Port — UDP-порт, на котором WireGuard принимает подключения
  • Public Key — публичный ключ, передаётся противоположной стороне
  • Allowed Address — подсети, трафик которых разрешён через этого peer
  • Endpoint — IP-адрес и порт удалённой стороны (нужен только инициатору)

Site-to-Site: объединение двух офисов

Схема:

  • Офис A: WAN 203.0.113.1, LAN 192.168.10.0/24, WireGuard 10.255.255.1/30
  • Офис B: WAN 198.51.100.1, LAN 192.168.20.0/24, WireGuard 10.255.255.2/30

Настройка Офис A (сервер)

[admin@MikroTik] >
# Создаём интерфейс WireGuard
/interface wireguard add name=wg-tunnel listen-port=13231

# Смотрим сгенерированный публичный ключ
/interface wireguard print
# Запишите значение public-key — оно нужно для Офиса B

# Назначаем IP-адрес туннелю
/ip address add address=10.255.255.1/30 interface=wg-tunnel

# Добавляем peer (Офис B)
/interface wireguard peers add \
  interface=wg-tunnel \
  public-key="<ПУБЛИЧНЫЙ_КЛЮЧ_ОФИСА_B>" \
  allowed-address=10.255.255.2/32,192.168.20.0/24 \
  endpoint-address=198.51.100.1 \
  endpoint-port=13231

# Маршрут в сеть Офиса B через туннель
/ip route add dst-address=192.168.20.0/24 gateway=wg-tunnel

# Firewall: разрешить WireGuard UDP
/ip firewall filter add chain=input protocol=udp dst-port=13231 action=accept \
  comment="Allow WireGuard" place-before=0

# Firewall: разрешить forward через туннель
/ip firewall filter add chain=forward in-interface=wg-tunnel action=accept \
  comment="Allow WG forward" place-before=0

Настройка Офис B (клиент)

[admin@MikroTik] >
/interface wireguard add name=wg-tunnel listen-port=13231

/interface wireguard print
# Запишите public-key для Офиса A

/ip address add address=10.255.255.2/30 interface=wg-tunnel

/interface wireguard peers add \
  interface=wg-tunnel \
  public-key="<ПУБЛИЧНЫЙ_КЛЮЧ_ОФИСА_A>" \
  allowed-address=10.255.255.1/32,192.168.10.0/24 \
  endpoint-address=203.0.113.1 \
  endpoint-port=13231

/ip route add dst-address=192.168.10.0/24 gateway=wg-tunnel

/ip firewall filter add chain=input protocol=udp dst-port=13231 action=accept \
  place-before=0
/ip firewall filter add chain=forward in-interface=wg-tunnel action=accept \
  place-before=0

Проверка туннеля

[admin@MikroTik] >
# На Офисе A — пинг до Офиса B через туннель
/ping 10.255.255.2

# Пинг до хоста в сети Офиса B
/ping 192.168.20.1

# Статус handshake
/interface wireguard peers print
# last-handshake должен показывать время < 3 минут

Remote Access: подключение мобильных клиентов

Настроим MikroTik как WireGuard-сервер для подключения Windows, Android и iOS.

Сервер (MikroTik)

[admin@MikroTik] >
# Интерфейс (если ещё не создан)
/interface wireguard add name=wg-vpn listen-port=13231

# IP-адрес для VPN-сети
/ip address add address=10.10.10.1/24 interface=wg-vpn

# Peer для клиента #1
/interface wireguard peers add \
  interface=wg-vpn \
  public-key="<ПУБЛИЧНЫЙ_КЛЮЧ_КЛИЕНТА>" \
  allowed-address=10.10.10.2/32

# Peer для клиента #2
/interface wireguard peers add \
  interface=wg-vpn \
  public-key="<ПУБЛИЧНЫЙ_КЛЮЧ_КЛИЕНТА_2>" \
  allowed-address=10.10.10.3/32

# DNS для клиентов — через роутер
# (клиенты получат DNS из конфига WireGuard)

# Firewall
/ip firewall filter add chain=input protocol=udp dst-port=13231 action=accept
/ip firewall filter add chain=forward in-interface=wg-vpn action=accept

# NAT для выхода VPN-клиентов в интернет (если нужно)
/ip firewall nat add chain=srcnat src-address=10.10.10.0/24 \
  out-interface=ether1 action=masquerade

Конфиг для Windows/Android/iOS клиента

Создайте файл client.conf:

ini
[Interface]
PrivateKey = <ПРИВАТНЫЙ_КЛЮЧ_КЛИЕНТА>
Address = 10.10.10.2/32
DNS = 10.10.10.1

[Peer]
PublicKey = <ПУБЛИЧНЫЙ_КЛЮЧ_MIKROTIK>
Endpoint = 203.0.113.1:13231
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
  • AllowedIPs = 0.0.0.0/0 — весь трафик через VPN (full tunnel)
  • AllowedIPs = 10.10.10.0/24,192.168.10.0/24 — только трафик в указанные сети (split tunnel)
  • PersistentKeepalive = 25 — нужно для NAT traversal

Генерация ключей на клиенте

Windows/Linux:

bash
wg genkey | tee privatekey | wg pubkey > publickey

Android/iOS: ключи генерируются автоматически при создании туннеля в приложении WireGuard.

NAT traversal и dynamic IP

Если MikroTik за NAT провайдера — пробросьте UDP-порт 13231 на роутере провайдера, или используйте MikroTik Cloud DDNS:

[admin@MikroTik] >
/ip cloud set ddns-enabled=yes
/ip cloud print
# dns-name покажет ваш DDNS-адрес: xxxx.sn.mynetname.net

Используйте этот адрес как endpoint в конфигах клиентов.

Persistent Keepalive

Если один из peers за NAT — добавьте keepalive на стороне, которая за NAT:

[admin@MikroTik] >
/interface wireguard peers set [find public-key="..."] \
  persistent-keepalive=25s

Keepalive нужен только на стороне за NAT. На стороне с публичным IP — не нужен.

Типичные проблемы

  1. Нет handshake — проверьте что UDP-порт открыт в firewall, ключи правильные, endpoint доступен
  2. Handshake есть, но трафик не идёт — проверьте allowed-address (должны включать подсети обоих сторон) и маршруты
  3. allowed-address перекрываются — каждая подсеть может быть в allowed-address только одного peer на интерфейсе
  4. WebFig баг — сохранение peer без endpoint-address через WebFig устанавливает пустую строку вместо null. Используйте CLI
  5. Время не синхронизировано — WireGuard требует точных часов. Настройте NTP: /system ntp client set enabled=yes
[admin@MikroTik] >
# Создаём интерфейс WireGuard
/interface wireguard add name=wg-tunnel listen-port=13231

# Смотрим сгенерированный публичный ключ
/interface wireguard print
# Запишите значение public-key — оно нужно для Офиса B

# Назначаем IP-адрес туннелю
/ip address add address=10.255.255.1/30 interface=wg-tunnel

# Добавляем peer (Офис B)
/interface wireguard peers add \
  interface=wg-tunnel \
  public-key="<ПУБЛИЧНЫЙ_КЛЮЧ_ОФИСА_B>" \
  allowed-address=10.255.255.2/32,192.168.20.0/24 \
  endpoint-address=198.51.100.1 \
  endpoint-port=13231

# Маршрут в сеть Офиса B через туннель
/ip route add dst-address=192.168.20.0/24 gateway=wg-tunnel

# Firewall: разрешить WireGuard UDP
/ip firewall filter add chain=input protocol=udp dst-port=13231 action=accept \
  comment="Allow WireGuard" place-before=0

# Firewall: разрешить forward через туннель
/ip firewall filter add chain=forward in-interface=wg-tunnel action=accept \
  comment="Allow WG forward" place-before=0
/interface wireguard add name=wg-tunnel listen-port=13231

/interface wireguard print
# Запишите public-key для Офиса A

/ip address add address=10.255.255.2/30 interface=wg-tunnel

/interface wireguard peers add \
  interface=wg-tunnel \
  public-key="<ПУБЛИЧНЫЙ_КЛЮЧ_ОФИСА_A>" \
  allowed-address=10.255.255.1/32,192.168.10.0/24 \
  endpoint-address=203.0.113.1 \
  endpoint-port=13231

/ip route add dst-address=192.168.10.0/24 gateway=wg-tunnel

/ip firewall filter add chain=input protocol=udp dst-port=13231 action=accept \
  place-before=0
/ip firewall filter add chain=forward in-interface=wg-tunnel action=accept \
  place-before=0
# На Офисе A — пинг до Офиса B через туннель
/ping 10.255.255.2

# Пинг до хоста в сети Офиса B
/ping 192.168.20.1

# Статус handshake
/interface wireguard peers print
# last-handshake должен показывать время < 3 минут
# Интерфейс (если ещё не создан)
/interface wireguard add name=wg-vpn listen-port=13231

# IP-адрес для VPN-сети
/ip address add address=10.10.10.1/24 interface=wg-vpn

# Peer для клиента #1
/interface wireguard peers add \
  interface=wg-vpn \
  public-key="<ПУБЛИЧНЫЙ_КЛЮЧ_КЛИЕНТА>" \
  allowed-address=10.10.10.2/32

# Peer для клиента #2
/interface wireguard peers add \
  interface=wg-vpn \
  public-key="<ПУБЛИЧНЫЙ_КЛЮЧ_КЛИЕНТА_2>" \
  allowed-address=10.10.10.3/32

# DNS для клиентов — через роутер
# (клиенты получат DNS из конфига WireGuard)

# Firewall
/ip firewall filter add chain=input protocol=udp dst-port=13231 action=accept
/ip firewall filter add chain=forward in-interface=wg-vpn action=accept

# NAT для выхода VPN-клиентов в интернет (если нужно)
/ip firewall nat add chain=srcnat src-address=10.10.10.0/24 \
  out-interface=ether1 action=masquerade
- `AllowedIPs = 0.0.0.0/0` — весь трафик через VPN (full tunnel)
- `AllowedIPs = 10.10.10.0/24,192.168.10.0/24` — только трафик в указанные сети (split tunnel)
- `PersistentKeepalive = 25` — нужно для NAT traversal

#### Генерация ключей на клиенте

Windows/Linux:
Android/iOS: ключи генерируются автоматически при создании туннеля в приложении WireGuard.

### NAT traversal и dynamic IP

Если MikroTik за NAT провайдера — пробросьте UDP-порт 13231 на роутере провайдера, или используйте MikroTik Cloud DDNS:
Используйте этот адрес как endpoint в конфигах клиентов.

### Persistent Keepalive

Если один из peers за NAT — добавьте keepalive на стороне, которая за NAT:
VPN / WireGuard VPN на MikroTik