Настройка VPN-клиента WireGuard на Mikrotik
Mikrotik держит WireGuard прямо в ядре RouterOS — без отдельного пакета, без потери производительности на шифровании, и один раз настроенный туннель разом закрывает VPN для всех устройств дома: смарт-ТВ, консоли, гостевого Wi-Fi. Расплата — настройка честная, роутерная: подключение к серверу собирается из пяти отдельных кусочков (интерфейс, ключи, peer, адрес, маршрут), и если забыть один — получите зелёный индикатор и туннель, через который не идёт ни байта. Ниже — вся цепочка по порядку, с командами RouterOS 7 и точками, где чаще всего расходится «выглядит настроенным» и «реально работает».
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что нужно подготовить до начала
Дальше всё написано в предположении, что WireGuard-сервер уже поднят — если его ещё нет, сначала разверните его, например на VPS: как это сделать с нуля, разобрано в статье про установку WireGuard на VPS. Общую логику «весь дом через один туннель» и зачем это вообще нужно смотрите в статье про VPN на роутере для всего дома — здесь сразу к конкретике по Mikrotik.
Перед началом настройки под рукой должно быть:
- Публичный ключ сервера — генерируется при установке WireGuard на сервере, хранится в конфиге интерфейса.
- Адрес и порт сервера — публичный IP и UDP-порт, на котором слушает WireGuard (по умолчанию
51820). - Диапазон VPN-сети — например,
10.10.10.0/24, и свободный адрес в нём для роутера. - Доступ к самому Mikrotik — через Winbox, WebFig (веб-интерфейс) или SSH-терминал, с правами администратора.
- RouterOS версии 7.x — нативная поддержка WireGuard появилась именно в седьмой ветке. Проверить версию:
/system resource print, строкаversion. Если стоит 6.x, нужен апгрейд через/system package update check-for-updates— в шестой ветке WireGuard шёл отдельным экспериментальным пакетом с другим синтаксисом команд, эта статья описывает именно седьмую.
Все команды ниже вводятся в терминале RouterOS — открыть его можно в Winbox кнопкой New Terminal, в WebFig разделом Terminal, либо просто по SSH на IP роутера.
Создаём интерфейс WireGuard
Первый шаг — сам интерфейс. В RouterOS 7 он создаётся одной командой, ключевая пара генерируется автоматически, если не указать приватный ключ вручную:
/interface wireguard add name=wg-home listen-port=13231 comment="VPN client to home server"
listen-port — локальный UDP-порт, на котором Mikrotik слушает входящие пакеты этого интерфейса; для клиентского подключения его значение не принципиально, но зафиксируйте его — пригодится, если позже будете открывать порт на firewall явно. Название wg-home — произвольное, но дальше оно понадобится во всех остальных командах, так что выбирайте короткое и понятное.
Публичный ключ, который нужно передать на сервер (добавить туда как peer), смотрите командой:
/interface wireguard print
В выводе будет колонка public-key — именно её копируете и добавляете в конфигурацию сервера как разрешённого клиента. Если сервер уже настроен на приём нескольких клиентов, там же на сервере укажите, какой VPN-адрес будет закреплён за этим роутером.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверPeer: подключаем роутер к серверу
Peer описывает, к кому подключается сам интерфейс — то есть параметры сервера с точки зрения Mikrotik:
/interface wireguard peers add interface=wg-home public-key="ПУБЛИЧНЫЙ_КЛЮЧ_СЕРВЕРА" \
endpoint-address=203.0.113.10 endpoint-port=51820 allowed-address=0.0.0.0/0 persistent-keepalive=25s
По каждому полю:
public-key— публичный ключ сервера (не путать с ключом роутера из предыдущего шага — это два разных ключа, каждая сторона знает публичный ключ другой).endpoint-address/endpoint-port— куда роутер отправляет пакеты: IP сервера и его UDP-порт.allowed-address— не просто «разрешённый» диапазон, а фактическое указание, какой трафик заворачивать в туннель.0.0.0.0/0означает «весь трафик, идущий на любой адрес назначения, отправлять через wg-home». Если нужен не полный, а частичный туннель — сюда вписывается конкретная подсеть вместо0.0.0.0/0, и остальной трафик пойдёт как обычно, мимо VPN.persistent-keepalive=25s— роутер каждые 25 секунд шлёт серверу пустой пакет, чтобы NAT провайдера не «забыл» о соединении на простое. Без этой опции туннель может проседать в пинге после нескольких минут без активного трафика — переподключение занимает время.
Адрес интерфейса и проверка подключения
Ключи и peer настроены, но у самого интерфейса пока нет адреса в VPN-сети — без него роутер не сможет ни принимать, ни отправлять пакеты внутри туннеля:
/ip address add address=10.10.10.2/24 interface=wg-home
Адрес и маска должны соответствовать тому, что выделено этому клиенту на сервере — обычно сервер сам сообщает или фиксирует в своей конфигурации, какой адрес закреплён за каждым peer.
Проверка, что криптографическое рукопожатие прошло:
/interface wireguard peers print
Смотрите на колонку current-handshake: если там дата и время в пределах последних двух минут — рукопожатие свежее, всё в порядке. Если стоит бесконечно растущий 0s или прочерк — сервер не отвечает. Частая, но неочевидная причина именно на Mikrotik — рассинхронизация системного времени: WireGuard использует временные метки в протоколе рукопожатия, и если часы роутера сильно уехали (а без NTP это случается после перезагрузки), рукопожатие может не проходить, хотя сеть в остальном исправна. Проверьте /system clock print и включите NTP-клиент: /system ntp client set enabled=yes. Более широкий разбор ситуации «рукопожатие идёт, а трафика нет» — в статье про WireGuard с рукопожатием, но без трафика.
Маршрутизация всего трафика дома через VPN
Рукопожатие прошло, но интернета через туннель ещё нет — интерфейс сам по себе не меняет маршрутизацию, это отдельный шаг, и именно на нём чаще всего спотыкаются. Если добавить маршрут по умолчанию через wg-home в лоб, легко получить замкнутый круг: пакеты к самому серверу (на endpoint-address) тоже попытаются пойти через ещё не поднятый туннель, потому что для них теперь тоже действует маршрут 0.0.0.0/0.
Решение — сначала явно закрепить маршрут до IP сервера через обычный WAN-шлюз, и только потом добавить общий маршрут через туннель:
/ip route add dst-address=203.0.113.10/32 gateway=<IP_ШЛЮЗА_ПРОВАЙДЕРА> distance=1 comment="server IP, bypass tunnel"
/ip route add dst-address=0.0.0.0/0 gateway=wg-home distance=1 comment="all traffic via VPN"
Маршрут /32 более специфичен, чем 0.0.0.0/0 — RouterOS всегда выбирает наиболее точное совпадение по длине префикса, независимо от distance, поэтому пакеты к самому серверу гарантированно уходят через провайдера, а не в петлю через VPN. Второй командой становится основным маршрут по умолчанию через туннель — весь остальной трафик дома пойдёт через сервер.
Если хочется сохранить исходный интернет как запасной вариант на случай падения туннеля (а не полное отключение интернета — своего рода анти-killswitch), не удаляйте исходный маршрут провайдера, а просто повысьте ему значение distance (например, 254), оставив маршрут через wg-home с distance=1 — он будет приоритетным, пока туннель жив, а при обрыве роутер автоматически переключится обратно на WAN. Обратный вариант — жёсткий killswitch, когда при падении VPN интернета не остаётся вовсе — обеспечивается тем, что запасного маршрута попросту нет: тогда при обрыве туннеля устройства дома останутся без сети до восстановления соединения, зато утечки трафика мимо VPN гарантированно не будет.
NAT, firewall и типичные ошибки
Маршрут добавлен, но без NAT сервер получит от локальных устройств пакеты с обратным адресом из домашней сети провайдера — и не сможет доставить на них ответ. Правило маскарадинга подменяет исходный адрес на адрес самого роутера в VPN-сети перед отправкой в туннель:
/ip firewall nat add chain=srcnat out-interface=wg-home action=masquerade comment="NAT for VPN tunnel"
Ещё три места, где стоит проверить настройки, если после маршрута и NAT трафик всё равно не идёт:
| Проблема | Где искать | Что сделать |
|---|---|---|
| FastTrack перехватывает пакеты мимо туннеля | IP → Firewall → Filter Rules, правило с действием fasttrack-connection | Временно отключить или исключить из него интерфейс wg-home |
| Firewall режет форвардинг через новый интерфейс | IP → Firewall → Filter Rules, цепочка forward | Добавить разрешающее правило для in-interface=wg-home и обратно |
| Сайты не открываются по имени, хотя пинг по IP проходит | DNS | WireGuard не раздаёт DNS-сервер автоматически (в отличие от некоторых других протоколов) — пропишите DNS вручную: /ip dns set servers=1.1.1.1,8.8.8.8 |
Если рукопожатие есть, маршрут и NAT настроены, а трафик всё равно теряется где-то по пути — стоит сверить весь чек-лист причин ещё раз: часть из них специфична именно для роутеров и уже разобрана в статье про типичные проблемы WireGuard на Mikrotik и Keenetic, включая более редкие случаи вроде конфликта MTU на нестабильных мобильных каналах провайдера.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Как узнать, поддерживает ли мой Mikrotik WireGuard нативно?
Нативная поддержка есть в RouterOS 7.x на любом оборудовании, которое вообще способно обновиться до седьмой ветки — архитектура (ARM, MIPS, x86) значения не имеет. Проверьте версию через /system resource print и при необходимости обновитесь через /system package update check-for-updates.
Можно ли пускать через VPN не весь дом, а только отдельные устройства?
Да, через policy-based routing: вместо общего маршрута 0.0.0.0/0 создаётся правило в /ip firewall mangle с action=mark-routing, которое метит трафик от конкретных адресов или подсетей, и отдельная таблица маршрутизации с этой меткой ведёт только их через wg-home. Остальные устройства продолжают выходить в интернет напрямую через провайдера.
Почему после полного заворачивания трафика через VPN снизилась скорость?
Это ожидаемо: пакет теперь идёт лишний участок сети до сервера и обратно, плюс шифрование грузит процессор роутера — на бюджетных моделях с слабым CPU это может быть заметно на канале от 100 Мбит/с и выше. Конкретные цифры сильно зависят от модели роутера и удалённости сервера — универсального ориентира здесь нет, стоит измерить на своём оборудовании.
Нужно ли открывать порт WireGuard на firewall со стороны input?
Для клиентского подключения — обычно нет: роутер сам инициирует соединение к серверу, и ответные пакеты проходят по established/related, если такое правило уже есть в стандартной конфигурации firewall. Отдельно открывать listen-port на вход нужно только если сервер, наоборот, должен сам подключаться к роутеру (нетипичная схема для домашнего клиента).
Что делать, если после перезагрузки роутера туннель не поднимается сам?
Убедитесь, что конфигурация сохранена (/interface wireguard print должен показывать интерфейс и после /system reboot) и что включён NTP-клиент — без верного системного времени рукопожатие может не проходить именно в первые секунды после старта, пока время ещё не синхронизировалось с сервером NTP.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →