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

17 минут чтенияАвтор: Евгений Коржиков, сертифицированный тренер MikroTik
WireGuard на MikroTik: настройка VPN между двумя офисами

Как настроить WireGuard на MikroTik и соединить два офиса в одну сеть: ключи, пиры, allowed-address, правило firewall и маршрут. Команды для роутера офиса и зеркальные для филиала, подключение ноутбука и телефона и разбор ошибок, когда рукопожатие есть, а пинга нет.

Нет роутера под рукой? На открытом уроке стенд уже включён и ждёт вас. Подробнее ↓

Что такое WireGuard и чем он проще IPsec и OpenVPN

WireGuard — современный протокол VPN. Он появился как замена тяжёлым IPsec и OpenVPN: в RouterOS он есть начиная с версии 7.1. Конфигурация короткая: интерфейс, пир, адрес и маршрут, без фаз IKE, сертификатов и наборов шифров на выбор. Алгоритмы фиксированы и современные, поэтому настраивать «безопасность» отдельно не нужно, а нагрузка на процессор роутера обычно ниже, чем у IPsec и OpenVPN.

Вместо логина и пароля у каждой стороны своя пара ключей: приватный (никому не показывается) и публичный (передаётся собеседнику). Туннель поднимается только между теми, кто заранее знает публичный ключ друг друга. Обмен идёт по UDP, по умолчанию на порту 51820.

Схема site-to-site: офис 192.168.88.0/24 и филиал 192.168.10.0/24 соединены туннелем WireGuard wg1 10.0.0.1 и 10.0.0.2 по 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, маршрутизировать будет нечего.

В примере используются такие адреса:

ОфисФилиал
LAN192.168.88.0/24, роутер 192.168.88.1192.168.10.0/24, роутер 192.168.10.1
WAN (белый IP)203.0.113.1203.0.113.2
Адрес туннеля wg110.0.0.1/3010.0.0.2/30
Порт WireGuard5182051820
Важно. Туннельная сеть 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.

Важно. Для стандартной конфигурации RouterOS, где WAN задан списком интерфейсов, удобно добавить 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 из этой статьи

Тренер рядом

Разбор ваших вопросов вживую

Ближайший урок: [ДАТА И ВРЕМЯ УРОКА]

Читайте также