
WireGuard хорошо подходит для удалённого доступа к MikroTik, когда нужны простой клиент, высокая скорость и короткая конфигурация. В протоколе нет отдельной роли «сервер»: каждый участник является peer, имеет собственную пару ключей и список адресов, которые разрешено принимать от другой стороны. Сервером в бытовом смысле называют MikroTik с постоянным адресом и открытым UDP-портом, к которому первым обращается ноутбук или телефон.
В примере MikroTik слушает UDP 51820, туннельная сеть — 10.77.1.0/24, офисная сеть — 10.20.0.0/24, DNS — 10.20.0.53, а разрешённый сервер приложений — 10.20.0.25. Клиент получает 10.77.1.2/32. Команды рассчитаны на RouterOS 7; свойства автоматического клиентского экспорта client-allowed-address появились в 7.21, поэтому для более ранних версий профиль надо исправлять на клиенте вручную.
Понять три разных смысла AllowedIPs
Главная причина ошибок WireGuard — попытка читать allowed-address как обычный список маршрутов. На MikroTik это одновременно селектор исходящего peer и проверка допустимого адреса источника от этого peer. На клиенте AllowedIPs дополнительно определяет, какой трафик операционная система отправит в туннель.
Для road warrior peer на MikroTik указывают только уникальный адрес клиента 10.77.1.2/32. Если добавить каждому peer всю офисную сеть, адресные диапазоны на одном WireGuard-интерфейсе пересекутся, и RouterOS не сможет однозначно выбрать получателя. Офисная сеть 10.20.0.0/24 указывается на клиенте, потому что именно клиент должен направлять её к MikroTik.
| Место настройки | Значение в примере | Смысл |
|---|---|---|
| Peer на MikroTik | 10.77.1.2/32 | Этот peer имеет право присылать пакеты с таким source IP |
| Peer на клиенте | 10.20.0.0/24, 10.77.1.0/24 | Эти назначения отправлять через MikroTik |
| Адрес интерфейса клиента | 10.77.1.2/32 | Собственный адрес клиента в туннеле |
| Endpoint клиента | vpn.example.ru:51820 | Публичный адрес и UDP-порт MikroTik |

Проверить исходную сеть и сохранить конфигурацию
Проверьте RouterOS, внешний адрес, маршруты, firewall и отсутствие пересечения 10.77.1.0/24. Если домашняя сеть сотрудника тоже использует 10.20.0.0/24, split tunnel к офису работать не будет однозначно: локальный маршрут клиента может победить VPN. В таком случае меняют офисную адресацию, публикуют узкий translated-сегмент или используют отдельный jump host.
/system resource print
/system package print
/ip address print
/ip route print
/ip firewall filter print stats
/ip firewall nat print
/interface wireguard print detail
/export hide-sensitive file=before-wireguard
/system backup save name=before-wireguard password=<BACKUP_PASSWORD>
WireGuard использует только UDP. Публичное DNS-имя помогает пережить смену внешнего IP, но не устраняет CGNAT: если провайдер не пропускает входящие соединения, нужен белый адрес, port forwarding или промежуточный узел с доступным адресом.
Создать WireGuard-интерфейс и получить только публичный ключ
При добавлении интерфейса RouterOS генерирует ключевую пару. Закрытый ключ должен остаться на MikroTik. Для переноса клиенту нужен только public key, который безопасно выводится отдельной командой.
/interface wireguard add name=wg-roadwarrior \
listen-port=51820 mtu=1420 \
comment="Remote employees"
/ip address add address=10.77.1.1/24 interface=wg-roadwarrior \
comment="WireGuard roadwarrior gateway"
:put [/interface wireguard get \
[find where name=wg-roadwarrior] public-key]
/interface wireguard print where name=wg-roadwarrior
/ip address print where interface=wg-roadwarrior
Не публикуйте /interface wireguard export show-sensitive и не отправляйте полный экспорт в заявку: он может содержать private key интерфейса и preshared keys peers. Если закрытый ключ MikroTik утёк, его нельзя «сменить паролем» — создайте новую пару и обновите все клиенты.
MTU 1420 является распространённой отправной точкой при внешнем MTU 1500. Для PPPoE, LTE и вложенных туннелей может потребоваться меньшее значение. Меняйте его после измерения, а не по случайной рекомендации.
Создать ключи на клиенте и передать public key
В официальном клиенте WireGuard создайте пустой туннель. Приложение сгенерирует PrivateKey и PublicKey. Закрытый ключ остаётся на устройстве; в RouterOS передаётся только PublicKey. На Linux то же самое можно сделать локально с ограниченными правами:
umask 077
wg genkey | tee client-private.key | wg pubkey > client-public.key
cat client-public.key
Файл client-private.key является секретом. Не копируйте его в чат, документацию или RouterOS. Если нужно усилить защиту отдельным симметричным ключом, можно сгенерировать preshared key командой wg genpsk, но его придётся безопасно установить на обе стороны и учитывать в процедуре отзыва.
Добавить peer на MikroTik
Подставьте публичный ключ клиента и уникальный адрес 10.77.1.2/32. Свойство responder=yes соответствует роли постоянно доступной стороны: MikroTik отвечает на handshake клиента и не пытается самостоятельно инициировать обмен через случайный маршрут. Это особенно полезно при нескольких WAN.
/interface wireguard peers add \
interface=wg-roadwarrior \
public-key="<CLIENT_PUBLIC_KEY>" \
allowed-address=10.77.1.2/32 \
responder=yes \
comment="Ivanov laptop; ticket <NUMBER>"
/interface wireguard peers print detail \
where interface=wg-roadwarrior
Для второго клиента используйте другой ключ и 10.77.1.3/32. Не копируйте первый peer и не оставляйте тот же allowed address: пересечение адресов делает выбор peer неоднозначным и ломает учёт.
Открыть UDP-порт на WAN
Добавьте узкое правило input и расположите его до общего запрета входящего WAN-трафика. Если внешний IP известен только у одного интерфейса, можно указать in-interface=ether1; в типовой конфигурации удобнее in-interface-list=WAN.
/ip firewall filter add chain=input action=accept \
in-interface-list=WAN protocol=udp dst-port=51820 \
comment="WG: accept UDP 51820 from Internet"
/ip firewall filter print
После добавления переместите правило выше общего WAN drop в своей политике. Не удаляйте drop. Ограничить source IP полезно для филиала с постоянным адресом, но для ноутбука в мобильной сети это часто невозможно.
Разрешить только нужные сервисы из туннеля
Handshake показывает лишь криптографическую связность. Доступ в LAN контролирует forward, а доступ к самому MikroTik — input. В примере разрешены DNS на 10.20.0.53, HTTPS и RDP на 10.20.0.25, затем остальная офисная сеть запрещена.
/ip firewall filter add chain=forward action=accept \
in-interface=wg-roadwarrior src-address=10.77.1.0/24 \
dst-address=10.20.0.53 protocol=udp dst-port=53 \
comment="WG: internal DNS UDP"
/ip firewall filter add chain=forward action=accept \
in-interface=wg-roadwarrior src-address=10.77.1.0/24 \
dst-address=10.20.0.53 protocol=tcp dst-port=53 \
comment="WG: internal DNS TCP"
/ip firewall filter add chain=forward action=accept \
in-interface=wg-roadwarrior src-address=10.77.1.0/24 \
dst-address=10.20.0.25 protocol=tcp dst-port=443,3389 \
comment="WG: approved applications"
/ip firewall filter add chain=forward action=drop \
in-interface=wg-roadwarrior src-address=10.77.1.0/24 \
dst-address=10.20.0.0/24 \
comment="WG: deny other LAN access"
/ip firewall filter print stats where comment~"^WG:"
Правила ставят после разрешения established,related и до широкого drop. Если клиенту не нужен RDP, удалите 3389. Для управления самим MikroTik не добавляйте широкое input accept in-interface=wg-roadwarrior: разрешите конкретный source IP клиента, протокол и сервис, а /ip service ограничьте списком адресов.
Настроить обратный маршрут без лишнего NAT
Если MikroTik — основной шлюз 10.20.0.0/24, ответ серверов вернётся через него. При другом шлюзе добавьте на нём маршрут 10.77.1.0/24 via <LAN-IP-MikroTik>. Тогда внутренние журналы сохранят реальный адрес VPN-клиента.
Fallback NAT допустим, когда основной маршрутизатор изменить нельзя:
/ip firewall nat add chain=srcnat action=masquerade \
src-address=10.77.1.0/24 dst-address=10.20.0.0/24 \
comment="WG fallback NAT to LAN"
Это решение скрывает клиентов за адресом MikroTik. Не применяйте его, если обратный маршрут уже есть, и зафиксируйте ограничение в документации.
Собрать split-tunnel конфигурацию клиента
Подставьте private key клиента, public key MikroTik и реальное публичное имя. В AllowedIPs перечислены только туннельная и офисная сети, поэтому обычный интернет продолжит идти через локальный провайдер клиента.
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.77.1.2/32
DNS = 10.20.0.53
[Peer]
PublicKey = <MIKROTIK_PUBLIC_KEY>
Endpoint = vpn.example.ru:51820
AllowedIPs = 10.77.1.0/24, 10.20.0.0/24
PersistentKeepalive = 25
PersistentKeepalive = 25 полезен для клиента за NAT: он поддерживает отображение UDP. На стороне MikroTik responder этот параметр не нужен. Готовый шаблон конфигурации не содержит ключей и не должен использоваться без заполнения.
Для full tunnel клиент указывает 0.0.0.0/0, ::/0, но тогда на MikroTik нужны политика выхода в интернет, DNS, IPv6 и NAT. Не превращайте split tunnel в full tunnel только изменением одной строки: иначе часть трафика уйдёт в чёрную дыру или IPv6 обойдёт политику.
Автоматический экспорт и QR-код в RouterOS 7.21+
RouterOS умеет формировать клиентский профиль из свойств peer. Начиная с 7.21, client-allowed-address позволяет задать split tunnel; раньше экспорт жёстко подставлял 0.0.0.0/0, ::/0, что неожиданно превращало профиль в full tunnel.
/interface wireguard peers set \
[find where comment="Ivanov laptop; ticket <NUMBER>"] \
client-address=10.77.1.2/32 \
client-dns=10.20.0.53 \
client-endpoint=vpn.example.ru \
client-allowed-address=10.77.1.0/24,10.20.0.0/24
/interface wireguard peers show-client-config \
[find where comment="Ivanov laptop; ticket <NUMBER>"] \
qr
QR-код содержит private key и фактически является готовым доступом. Показывайте его только владельцу устройства, не делайте скриншот и не прикладывайте к тикету. После импорта закройте окно. На RouterOS до 7.21 обязательно исправьте AllowedIPs в клиенте вручную.
Проверить handshake, маршруты и ограничения
Подключите клиент из внешней сети и наблюдайте peer. Поле last-handshake должно обновиться, а rx/tx — расти. Нулевой handshake означает проблему endpoint, UDP firewall или ключей; живой handshake при отсутствии доступа указывает на маршруты и filter.
/interface wireguard peers print detail \
where interface=wg-roadwarrior
/ip firewall filter print stats where comment~"^WG:"
/ip firewall connection print where protocol=udp and dst-port=51820
/tool sniffer quick interface=wg-roadwarrior
На Windows:
Get-NetIPConfiguration
Get-NetRoute -AddressFamily IPv4 | Sort-Object DestinationPrefix
Resolve-DnsName internal.example.ru -Server 10.20.0.53
Test-NetConnection 10.20.0.25 -Port 443
Test-NetConnection 10.20.0.30 -Port 445
На Linux:
sudo wg show
ip address show
ip route get 10.20.0.25
resolvectl query internal.example.ru
curl -vk --connect-timeout 5 https://10.20.0.25/
Ожидается свежий handshake, маршрут к 10.20.0.25 через WireGuard, работа DNS и разрешённого HTTPS. Проверка несогласованного SMB должна завершиться отказом. Дополнительно отключите VPN и убедитесь, что офисный адрес больше недоступен.
Найти ошибку по симптому
Если handshake отсутствует, проверьте DNS endpoint, внешний port forwarding, UDP 51820 и правильность public keys. Если handshake появляется только после активации клиента и затем пропадает за NAT, включите PersistentKeepalive = 25 у клиента. Если handshake есть, но счётчик receive равен нулю, проверьте AllowedIPs и адрес интерфейса клиента.
Если открывается MikroTik, но не LAN, почти всегда нет forward-правила или обратного маршрута. Если доступна LAN по IP, но не по имени, проверьте маршрут до DNS, разрешение UDP и TCP 53, а также настройку DNS клиента. Если часть сайтов или файлов зависает, измерьте Path MTU и уменьшите MTU с обеих сторон небольшими шагами.
Отозвать один клиент и заменить ключи
WireGuard не использует логин и пароль. Отзыв выполняется удалением или отключением peer. Активное соединение перестанет проходить сразу после изменения.
/interface wireguard peers disable \
[find where comment="Ivanov laptop; ticket <NUMBER>"]
/interface wireguard peers print detail \
where interface=wg-roadwarrior
Для нового устройства создайте новую пару ключей и новый peer. Не переносите private key со старого ноутбука. Если скомпрометирован ключ самого MikroTik, требуется сменить интерфейсную пару и public key во всех клиентских профилях.
Откатить конфигурацию
Откат выполняйте по комментариям и именам объектов. Сначала отключите интерфейс, затем удалите firewall и NAT, адрес и сам WireGuard-интерфейс.
/interface wireguard disable [find where name=wg-roadwarrior]
/ip firewall filter remove [find where comment~"^WG:"]
/ip firewall nat remove [find where comment="WG fallback NAT to LAN"]
/ip address remove [find where interface=wg-roadwarrior]
/interface wireguard remove [find where name=wg-roadwarrior]
Перед удалением проверьте find, чтобы комментарий не совпал с чужим правилом. После отката внешний UDP 51820 должен быть закрыт, а маршрута 10.77.1.0/24 не должно остаться.
Результат рабочей настройки
После приёмки каждый клиент имеет уникальный ключ и /32, MikroTik принимает WireGuard только на одном UDP-порту, firewall разрешает конкретные внутренние сервисы, а LAN знает обратный маршрут. Администратор видит время последнего handshake и счётчики, может отключить один peer без влияния на остальных и не хранит private keys в тикетах.
Сохраните заполненный протокол приёмки WireGuard: public keys/fingerprints без private key, адреса, AllowedIPs, тесты split tunnel, DNS, разрешённые и запрещённые сервисы, MTU, смену сети, отзыв и откат.
Команды и поведение сверены с руководством WireGuard для RouterOS 7.26 и CLI-справочником WireGuard peers.
