WireGuard на MikroTik: настройка VPN между двумя офисами

Как настроить WireGuard на MikroTik и соединить два офиса в одну сеть: ключи, пиры, allowed-address, правило firewall и маршрут. Команды для роутера офиса и зеркальные для филиала, подключение ноутбука и телефона и разбор ошибок, когда рукопожатие есть, а пинга нет.
Нет роутера под рукой? На открытом уроке стенд уже включён и ждёт вас. Подробнее ↓Что такое WireGuard и чем он проще IPsec и OpenVPN
WireGuard — современный протокол VPN. Он появился как замена тяжёлым IPsec и OpenVPN: в RouterOS он есть начиная с версии 7.1. Конфигурация короткая: интерфейс, пир, адрес и маршрут, без фаз IKE, сертификатов и наборов шифров на выбор. Алгоритмы фиксированы и современные, поэтому настраивать «безопасность» отдельно не нужно, а нагрузка на процессор роутера обычно ниже, чем у IPsec и OpenVPN.
Вместо логина и пароля у каждой стороны своя пара ключей: приватный (никому не показывается) и публичный (передаётся собеседнику). Туннель поднимается только между теми, кто заранее знает публичный ключ друг друга. Обмен идёт по UDP, по умолчанию на порту 51820.
Чем WireGuard удобен на практике:
- Простая настройка: пять–шесть команд на каждый роутер.
- Скорость: низкие задержки и высокая пропускная способность.
- Работает за NAT: достаточно
persistent-keepalive(в WinBox поле Persistent Keepalive принимает время в виде00:00:25, а не25s), чтобы провайдерский NAT не закрывал соединение. - Подходит и для site-to-site, и для удалённого доступа: два офиса, ноутбук, телефон.
Что понадобится и как устроена схема
- Два роутера MikroTik с RouterOS 7: в офисе и в филиале. На RouterOS 6 интерфейса WireGuard нет.
- Белый (публичный) IP-адрес хотя бы у одного роутера. Если белых адресов два, инициатором может быть любая сторона; если только один, на втором роутере задаётся адрес первого, а первому достаточно знать ключ.
- Подключение к обоим роутерам по WinBox или в терминале. Если вы ещё не подключались, начните со статьи «WinBox: первое подключение к MikroTik за 10 минут».
- Разные адресные пространства у офисов: если в обоих LAN 192.168.88.0/24, маршрутизировать будет нечего.
В примере используются такие адреса:
| Офис | Филиал | |
|---|---|---|
| LAN | 192.168.88.0/24, роутер 192.168.88.1 | 192.168.10.0/24, роутер 192.168.10.1 |
| WAN (белый IP) | 203.0.113.1 | 203.0.113.2 |
| Адрес туннеля wg1 | 10.0.0.1/30 | 10.0.0.2/30 |
| Порт WireGuard | 51820 | 51820 |
10.0.0.0/30 содержит ровно два рабочих адреса, по одному на роутер. Её не должно быть ни в одном LAN.Команды проверены на RouterOS 7.22. Первые шаги выполняются на обоих роутерах: публичные ключи нужно обменять, прежде чем настраивать пиры. Блоки команд подписаны: «на роутере офиса» и «на роутере филиала».
Шаг 1. Создайте интерфейс WireGuard и ключи
В WinBox откройте WireGuard в левом меню, нажмите + и задайте имя wg1 и порт 51820. Пара ключей создаётся автоматически при создании интерфейса, отдельно генерировать её не нужно: приватный ключ остаётся на роутере, а в колонке и поле Public Key виден публичный.
На роутере офиса (и точно так же на роутере филиала):
/interface wireguard add name=wg1 listen-port=51820
Публичный ключ показывает print. Приватный в списке не выводится:
/interface wireguard print
Чтобы забрать ключ в виде одной строки, например в скрипт, используйте:
:put [/interface wireguard get wg1 public-key]
Скопируйте публичный ключ каждого роутера и передайте второй стороне любым способом: это не секрет. В примерах ниже КЛЮЧ_ФИЛИАЛА и КЛЮЧ_ОФИСА нужно заменить на реальные значения.



Как это выглядит в WinBox 3 (Windows)



Шаг 2. Назначьте адрес туннеля
Интерфейсу wg1 нужен адрес из туннельной сети: по нему роутеры видят друг друга внутри туннеля. Адреса разные на двух сторонах и из одной подсети.
На роутере офиса:
/ip address add address=10.0.0.1/30 interface=wg1
На роутере филиала:
/ip address add address=10.0.0.2/30 interface=wg1
В WinBox это IP → Addresses → New. Маршрут на сеть 10.0.0.0/30 через wg1 роутер добавит сам.

Как это выглядит в WinBox 3 (Windows)

Шаг 3. Добавьте пир
Пир описывает собеседника: его публичный ключ, адрес и порт, а также какие адреса можно отправлять в туннель. Самое важное поле здесь allowed-address: WireGuard пропускает через туннель только адреса из этого списка, а пакеты для остальных отбрасывает. Для соединения двух сетей в нём должны быть и туннельный адрес партнёра, и вся его LAN.
На роутере офиса (пир описывает филиал):
/interface wireguard peers add interface=wg1 public-key="КЛЮЧ_ФИЛИАЛА" endpoint-address=203.0.113.2 endpoint-port=51820 allowed-address=10.0.0.2/32,192.168.10.0/24 persistent-keepalive=25s comment="Филиал"
На роутере филиала (пир описывает офис, адреса зеркальные):
/interface wireguard peers add interface=wg1 public-key="КЛЮЧ_ОФИСА" endpoint-address=203.0.113.1 endpoint-port=51820 allowed-address=10.0.0.1/32,192.168.88.0/24 persistent-keepalive=25s comment="Офис"
endpoint-addressиendpoint-port: куда стучаться. Если белый IP только у офиса, на роутере офиса эти поля можно не задавать: адрес филиала он узнает из его первого пакета.allowed-address: туннельный адрес партнёра и его LAN. Без LAN рукопожатие пройдёт, но трафик в сеть филиала не пойдёт (см. разбор проблем).persistent-keepalive=25s: раз в 25 секунд роутер посылает пакет, чтобы NAT не закрыл соединение. Нужен стороне за NAT или инициатору соединения.- Публичный ключ в команде берётся от собеседника, а не от себя.
generate-key=yes у пира нет, и кнопки «Generate Key Pair» в окне пира тоже нет: ключи интерфейса создаются автоматически на шаге 1. Если роутер пишет failure: no key set, вы не указали public-key.


Как это выглядит в WinBox 3 (Windows)



Шаг 4. Откройте UDP 51820 в firewall
Если на WAN у роутера работает firewall с правилом drop в цепочке input, входящие пакеты WireGuard будут отброшены, и рукопожатия не случится: в списке пиров не появится last-handshake. Нужно разрешающее правило, и оно обязано стоять выше запрещающего.
На роутере офиса (на роутере филиала порт тоже нужно открыть, если он принимает входящие соединения):
/ip firewall filter add chain=input protocol=udp dst-port=51820 action=accept comment="WireGuard" place-before=0
Параметр place-before=0 ставит правило самым первым. Если вам нужно именно перед конкретным запрещающим правилом, используйте place-before=[find comment="drop all from WAN"]. В WinBox правило перетаскивают мышью выше drop: IP → Firewall → Filter Rules.
in-interface-list=WAN. Не указывайте в правиле порт, который входит в bridge: RouterOS ответит in/out-interface matcher not possible when interface is slave, и правило станет недействительным.




Как это выглядит в WinBox 3 (Windows)



Шаг 5. Добавьте маршрут в сеть филиала
Роутеру нужно знать, что сеть филиала лежит за туннелем. Маршрутом к LAN партнёра указываем интерфейс wg1 (можно и адрес партнёра в туннеле, на реальных двух роутерах он работает так же).
На роутере офиса:
/ip route add dst-address=192.168.10.0/24 gateway=wg1
На роутере филиала:
/ip route add dst-address=192.168.88.0/24 gateway=wg1
В WinBox это IP → Routes → New: Dst. Address и Gateway wg1.
0.0.0.0/0 через туннель для соединения двух офисов не нужен: он уведёт через филиал весь интернет-трафик роутера. Такой сценарий («весь трафик через VPN») строят осознанно: в allowed-address пира добавляют 0.0.0.0/0, а до адреса самого пира (endpoint) оставляют отдельный маршрут через WAN, иначе сам туннель окажется внутри туннеля.Если в цепочке forward есть запрещающие правила, убедитесь, что трафик между bridge и wg1 они не режут.


Как это выглядит в WinBox 3 (Windows)

Шаг 6. Проверьте туннель
Сначала посмотрите на состояние пира. Живой туннель показывает время в поле last-handshake и растущие счётчики rx и tx:
/interface wireguard peers print detail
Если last-handshake пуст, рукопожатия не было: проверьте ключи, endpoint и правило firewall. Затем пропингуйте второй конец туннеля, а потом компьютер или роутер в LAN филиала:
/ping 10.0.0.2 /ping 192.168.10.1
И последняя проверка: с компьютера в офисе пропингуйте 192.168.10.1. Команда tracert 192.168.10.1 (в Linux traceroute) покажет два шага: 192.168.88.1 (роутер офиса) и сразу 192.168.10.1. Отдельного шага 10.0.0.2 не будет: на втором шаге отвечает сам роутер филиала, адресом, к которому вы обращались.


Как это выглядит в WinBox 3 (Windows)


Подключение ноутбука или телефона
Тот же роутер можно использовать как сервер удалённого доступа. Установите приложение WireGuard (Windows, macOS, Linux, Android, iOS) и подготовьте пир для клиента. Пара ключей клиента может быть создана самим роутером: параметр private-key=auto, затем роутер соберёт готовый конфиг.
Адрес клиента не должен лежать в туннельной сети филиала 10.0.0.0/30, там нет свободных адресов. Выделите клиентам отдельную подсеть, например 10.0.1.0/24, и добавьте на wg1 роутера второй адрес из неё: так появится маршрут до клиентов.
На роутере офиса:
/ip address add address=10.0.1.1/24 interface=wg1 /interface wireguard peers add interface=wg1 name=laptop allowed-address=10.0.1.2/32 private-key=auto /interface wireguard peers set [find name=laptop] client-endpoint=203.0.113.1 client-address=10.0.1.2/32 client-dns=192.168.88.1 client-allowed-address=192.168.88.0/24,10.0.1.0/24
Обратите внимание: client-endpoint задаётся без порта, порт роутер подставляет сам из listen-port. Если написать 203.0.113.1:51820, в конфиге клиента получится 203.0.113.1:51820:51820. Пир в консоли выбирают через [find name=laptop]: по голому имени команда set его не находит.
Теперь выведите готовую конфигурацию клиента:
/interface wireguard peers show-client-config [find name=laptop]
Вы получите блоки [Interface] (PrivateKey, Address, DNS) и [Peer] (PublicKey роутера, AllowedIPs, Endpoint). Вставьте их в новый туннель приложения WireGuard или отсканируйте QR-код, если ваша версия WinBox его показывает. В AllowedIPs попали только офисные сети, поэтому весь остальной трафик клиента пойдёт обычным путём. Чтобы отправлять через VPN всё, поставьте client-allowed-address=0.0.0.0/0.


Не работает: разбор проблем
| Симптом | Причина | Что сделать |
|---|---|---|
last-handshake пуст, rx и tx почти не растут | Входящий UDP 51820 режет firewall; неверный endpoint или порт; перепутаны ключи | Правило accept выше drop (шаг 4); в пире ключ собеседника, а не свой; проверьте endpoint и порт |
Рукопожатие есть, ping 10.0.0.2 идёт, а LAN филиала недоступен | В allowed-address нет сети филиала или нет маршрута | Добавьте 192.168.10.0/24 в allowed-address и маршрут через wg1 |
| Туннель работает в одну сторону | Зеркальный пир или маршрут настроены только на одном роутере | Проверьте, что на филиале есть пир офиса, allowed-address и маршрут в 192.168.88.0/24 |
| Туннель падает через минуты | Провайдерский NAT закрывает UDP-соединение | persistent-keepalive=25s на стороне за NAT |
| После настройки пропал интернет на роутере | Маршрут по умолчанию через туннель | Удалите 0.0.0.0/0 через wg1; для двух офисов он не нужен |
| Не видно сети за туннелем, адреса совпадают | Одинаковые LAN в офисе и филиале | Смените адресацию одного из филиалов |
failure: no key set при добавлении пира | Не указан public-key | Передайте публичный ключ собеседника или private-key=auto для клиента |
Рукопожатие есть, а ping в LAN филиала не идёт
Классическая ошибка: в allowed-address указан только туннельный адрес 10.0.0.2/32. Туннель при этом живой, и ping 10.0.0.2 проходит, но пакеты в 192.168.10.0/24 WireGuard не пропускает: у пира нет такого разрешённого адреса. В наших прогонах счётчик tx пира при пинге такого адреса вообще не менялся, а после добавления сети в allowed-address пакеты пошли в туннель и счётчик вырос. Исправление одной командой:
/interface wireguard peers set [find comment="Филиал"] allowed-address=10.0.0.2/32,192.168.10.0/24


Как это выглядит в WinBox 3 (Windows)


Безопасность
- Приватный ключ уникален для каждой стороны. Не передавайте его и не публикуйте выводы с ним.
- Порт 51820 можно открыть для всех: без подходящего ключа WireGuard не отвечает, а значит, порт не виден при сканировании. Если адреса партнёров известны, ограничьте правило через
src-address. - В
allowed-addressпускайте только нужные сети: так партнёр не сможет отправлять в туннель что-то лишнее. - Ограничивайте трафик из туннеля правилами firewall на
in-interface=wg1: туннель не отменяет фильтрацию между сетями.
Частые вопросы
Можно ли соединить больше двух офисов? Да. Добавьте по пиру на каждый офис и проверьте, что их LAN не пересекаются. Для схемы «звезда» с центральным офисом в allowed-address спиц добавляются сети всех остальных офисов.
Нужен ли белый IP у обоих роутеров? Нет, достаточно одного: второй за NAT инициирует соединение сам и держит его через persistent-keepalive.
Какой порт использовать? Любой UDP-порт, 51820 это просто значение по умолчанию. Если порт поменяли, поменяйте его и в правиле firewall, и в endpoint-port партнёра.
WireGuard быстрее IPsec? Обычно да: ему нужно меньше работы на процессоре роутера, а настройка проще. Точные цифры зависят от модели, поэтому сравнивайте на своём оборудовании.
Есть ли WireGuard на RouterOS 6? Нет, только на RouterOS 7 (начиная с 7.1). Для 6.49 используйте IPsec или OpenVPN.
Открытый урок · бесплатно
Поднимите WireGuard-туннель руками на живом стенде
Свой роутер не нужен. На каждом открытом уроке стенды уже прогреты: RouterOS загружена, доступ выдан. Вы создаёте интерфейс и пиры, открываете порт в firewall, добавляете маршруты и проверяете рукопожатие, а тренер отвечает на вопросы по ходу.
Стенд онлайн
Подключение за пару минут
Практика
Шаги 1–6 из этой статьи
Тренер рядом
Разбор ваших вопросов вживую
Ближайший урок: [ДАТА И ВРЕМЯ УРОКА]


