Что такое WireGuard и зачем он нужен на MikroTik
WireGuard — это современный VPN-протокол с открытым исходным кодом, который работает поверх UDP. Его ключевая особенность — минималистичный код (несколько тысяч строк против десятков тысяч у OpenVPN), что упрощает аудит безопасности и повышает производительность. Протокол использует современную криптографию: Curve25519 для обмена ключами, ChaCha20 для шифрования и Poly1305 для аутентификации.
На маршрутизаторах MikroTik поддержка WireGuard появилась нативно в RouterOS версии 7. Это означает, что для работы не нужно устанавливать дополнительные пакеты, использовать контейнеры или собирать модули ядра — всё уже встроено в операционную систему. Это выгодно отличает WireGuard от OpenVPN или L2TP/IPsec, которые требуют больше ресурсов и сложнее в обслуживании на том же оборудовании.
Основной сценарий использования на MikroTik — защита трафика локальной сети. Роутер выступает клиентом VPN-провайдера (Proton VPN, Mullvad, NordVPN и других) и направляет трафик выбранных устройств через зашифрованный туннель. Альтернативный сценарий — объединение двух офисов в единую сеть (site-to-site), где каждая точка может быть одновременно и сервером, и клиентом, что позволяет строить mesh-топологии.
Простота настройки WireGuard достигается за счёт отсутствия сертификатов. Вместо них используются пары ключей: публичный и приватный. Каждая точка имеет уникальный приватный ключ, а для соединения стороны обмениваются публичными ключами. Это одновременно и плюс, и минус: нет инфраструктуры сертификатов, но и тонкого управления клиентами, как в OpenVPN, тоже нет. Например, WireGuard не умеет раздавать индивидуальные DNS-серверы или маршруты разным клиентам на одном сервере.
Проверка версии RouterOS и подготовка к установке
Прежде чем приступать к настройке, убедитесь, что ваш MikroTik работает на RouterOS версии 7 или новее. Проверить это просто: подключитесь к роутеру через Winbox и посмотрите версию в заголовке окна. Либо выполните команду /system resource print в терминале — строка version покажет актуальную сборку.
Если у вас установлена версия 6.x, WireGuard в меню не появится. В этом случае необходимо обновить операционную систему. Стандартный способ — через меню System → Packages → Check for Updates. Если автоматическое обновление не работает, загрузите файл с официального сайта MikroTik. Важно знать архитектуру процессора вашего устройства — она видна в заголовке Winbox (например, mipsbe, arm, arm64, tile). Скачайте соответствующий файл с расширением .npk, загрузите его в роутер через Files, затем перезагрузите устройство. После перезагрузки WireGuard появится в меню слева.
Перед началом настройки соберите все необходимые данные. Для сценария клиент-сервер (когда MikroTik подключается к VPN-провайдеру) вам понадобятся четыре параметра, которые обычно приходят в конфигурационном файле от провайдера:
- Private Key — ваш приватный ключ, назначается интерфейсу MikroTik.
- Public Key — публичный ключ удалённого сервера, используется для аутентификации peer.
- Endpoint — IP-адрес или доменное имя сервера и UDP-порт (обычно 51820).
- Allowed IPs — диапазон адресов, которым разрешён доступ через туннель (часто
0.0.0.0/0для полного туннеля).
Для сценария site-to-site дополнительно нужно спланировать внутренние подсети обеих сторон и адреса туннельных интерфейсов. Рекомендуется заранее составить таблицу со всеми параметрами: имена точек, адреса, endpoint'ы, публичные ключи и разрешённые сети — это сильно упростит отладку, особенно если точек несколько.
Создание интерфейса WireGuard в Winbox
Первый шаг настройки — создание интерфейса WireGuard. Откройте Winbox, в левом меню выберите пункт WireGuard (он появился после обновления до RouterOS 7). В открывшемся окне нажмите кнопку + (плюс) для добавления нового интерфейса.
В поле Name задайте осмысленное имя, например, WG-Client. В поле Private Key вставьте приватный ключ, полученный от VPN-провайдера. Если вы настраиваете site-to-site соединение и ключа ещё нет, оставьте поле пустым — MikroTik сгенерирует его автоматически, и вы сможете скопировать соответствующий публичный ключ. Поле Port оставьте по умолчанию (13231) или укажите порт, который слушает удалённая сторона. Нажмите OK.
После создания интерфейса обратите внимание: MikroTik автоматически вывел публичный ключ в списке интерфейсов. Этот ключ нужно передать удалённой стороне — она добавит его как публичный ключ вашего peer.
Теперь назначьте IP-адрес туннельному интерфейсу. Перейдите в меню IP → Addresses, нажмите +. В поле Address введите адрес, который провайдер выделил для вашего туннеля, например, 10.66.66.2/32. Важно использовать именно /32, так как точка-клиент не должна маршрутизировать чужие адреса. В поле Interface выберите созданный интерфейс WireGuard (например, WG-Client). Нажмите OK.
Для сценария site-to-site адресация выглядит иначе: точка А получает адрес 10.10.10.1/24, точка Б — 10.10.11.1/24. Это разные подсети, и они нужны только для работы самого туннеля. Локальные сети (например, 192.168.100.0/24 и 192.168.200.0/24) остаются нетронутыми — связь между ними будет настроена позже через маршруты.
Настройка peer для подключения к серверу
Peer — это удалённая сторона, с которой устанавливается соединение. В интерфейсе WireGuard перейдите на вкладку Peers и нажмите +.
Заполните следующие поля:
- Interface — выберите созданный ранее интерфейс (например,
WG-Client). - Public Key — вставьте публичный ключ удалённого сервера (или другой точки MikroTik).
- Endpoint Address — IP-адрес или доменное имя сервера.
- Endpoint Port — UDP-порт, на котором сервер слушает входящие подключения (обычно 51820, но уточните у провайдера).
- Allowed Address — список разрешённых адресов. Для полного туннеля укажите
0.0.0.0/0. Если нужно пропускать только определённые подсети, перечислите их через запятую, например,10.10.11.1/32,192.168.200.0/24. - Persistent Keepalive — интервал отправки keepalive-пакетов в секундах. Рекомендуется установить значение
10, особенно если клиент находится за NAT или файрволом. Это гарантирует, что NAT-таблица не протухнет и соединение не оборвётся.
Поле Allowed Address важно понимать правильно: оно не маршрутизирует трафик само по себе. Оно лишь сообщает WireGuard, какие адреса принадлежат данному peer и должны быть доступны через туннель. Фактическая маршрутизация настраивается отдельно — через таблицу маршрутов или правила firewall.
Для сценария site-to-site настройка симметрична. На точке А в качестве Allowed Address указываются адреса точки Б: её туннельный адрес (10.10.11.1/32) и её локальная сеть (192.168.200.0/24). На точке Б — наоборот. Публичные ключи также меняются местами: точка А добавляет публичный ключ точки Б и наоборот. Endpoint — это реальный внешний IP-адрес или домен удалённой стороны.
Маршрутизация по политике (PBR): выбор устройств для VPN
Часто нет необходимости направлять через VPN весь трафик локальной сети. Достаточно выбрать конкретные устройства, например, рабочий ноутбук, которому нужен доступ к географически ограниченному сервису, или медиасервер, обрабатывающий чувствительные данные. Для этого используется маршрутизация по политике (Policy-Based Routing, PBR).
Механизм PBR в MikroTik состоит из двух частей: правила Mangle, которые маркируют пакеты, и отдельной таблицы маршрутизации, которая обрабатывает только маркированные пакеты.
Сначала создайте правило Mangle. Перейдите в IP → Firewall → Mangle, нажмите +. Заполните поля:
- Chain —
prerouting. Это важно, так как пакеты должны быть обработаны до принятия решения о маршрутизации. - Src. Address — IP-адрес устройства в локальной сети, трафик которого нужно пустить через VPN. Например,
192.168.88.50. - Action —
mark routing. - New Routing Mark — задайте имя метки, например,
via-wireguard. - Pass Through — снимите галочку. Если оставить её включённой, последующие правила могут перезаписать метку, и туннель не будет работать.
Важное замечание: правило применяется ко всем пакетам от указанного источника, включая ответные. Это гарантирует, что весь диалог устройства с внешним миром пойдёт через туннель.
Если нужно направить через VPN несколько устройств, создайте отдельное правило Mangle для каждого из них. Для целой подсети можно указать диапазон в поле Src. Address, например, 192.168.88.0/28 — тогда через туннель пойдёт трафик всех устройств в этом диапазоне.
Настройка маршрутов и Kill Switch для защиты от утечек
После создания метки необходимо настроить таблицу маршрутизации. Перейдите в IP → Routes и нажмите +. Создайте маршрут со следующими параметрами:
- Gateway — выберите интерфейс WireGuard (
WG-Client). - Routing Table — укажите имя таблицы, совпадающее с меткой Mangle (
via-wireguard). - Distance — значение
1(чем меньше, тем приоритетнее маршрут).
Теперь добавьте второй маршрут в ту же таблицу (via-wireguard), который будет выполнять функцию Kill Switch. Kill Switch — это механизм защиты от утечек: если туннель WireGuard падает, трафик маркированных устройств не должен уходить напрямую через интернет-провайдера. Вместо этого он должен быть отброшен.
Для создания Kill Switch добавьте маршрут с параметрами:
- Type —
blackhole. - Routing Table —
via-wireguard. - Distance — значение больше, чем у основного маршрута, например,
10.
Как это работает: пока туннель активен, в таблице маршрутизации присутствует обычный маршрут с дистанцией 1, и весь маркированный трафик идёт через WireGuard. Если туннель падает, маршрут с дистанцией 1 автоматически удаляется из таблицы, и активируется blackhole-маршрут с дистанцией 10. Пакеты с меткой via-wireguard попадают в blackhole и тихо отбрасываются. В результате никаких утечек DNS, IP или нешифрованного трафика через WAN не происходит.
Критически важно соблюдать порядок дистанций: рабочий маршрут должен иметь меньшую дистанцию, чем blackhole. Если перепутать местами, blackhole станет основным маршрутом, и туннелированный трафик пропадёт, даже когда туннель полностью исправен.
Настройка файрвола и правил для входящего трафика
Для корректной работы WireGuard необходимо открыть порт, который слушает интерфейс, во входящем трафике. Это актуально как для сценария клиент-сервер, где MikroTik должен принимать ответные пакеты от VPN-сервера, так и для site-to-site, где роутер ожидает входящие подключения от удалённой точки.
Перейдите в IP → Firewall → Filter Rules. Добавьте новое правило с параметрами:
- Chain —
input. - Protocol —
udp. - Dst. Port — порт, который слушает интерфейс WireGuard (обычно 13231 или 51820).
- In. Interface — выберите интерфейс WAN (или список интерфейсов
WAN, если он создан). - Action —
accept. - Comment — добавьте пояснение, например,
WireGuard WG-Client.
Важно не открывать порт на всех интерфейсах без ограничений. Ограничение по In. Interface гарантирует, что правило применится только к трафику, приходящему из интернета, а не из локальной сети. Список интерфейсов WAN создаётся по умолчанию в RouterOS, но если его нет, создайте вручную через Interfaces → Interface Lists и добавьте туда ваш WAN-интерфейс.
Если правило файрвола отсутствует или настроено неверно, peer будет показывать нулевые счётчики трафика, и соединение не установится. Это одна из самых частых ошибок при настройке.
Дополнительно стоит проверить, нет ли в вашем файрволе общих правил, которые блокируют весь входящий UDP-трафик. Если такие правила стоят выше правила accept для WireGuard, они перекроют доступ. Порядок правил в MikroTik имеет значение: правила проверяются сверху вниз, и первое совпавшее правило определяет действие.
Site-to-site соединение: объединение двух офисов
Один из самых частых сценариев использования WireGuard на MikroTik — объединение двух офисов в единую локальную сеть. Рассмотрим его на конкретном примере.
Пусть офис А имеет внешний адрес 111.111.111.111 и локальную сеть 192.168.100.0/24. Офис Б имеет внешний адрес 222.222.222.222 и локальную сеть 192.168.200.0/24. Задача — сделать так, чтобы устройства из сети офиса А могли обращаться к устройствам в сети офиса Б и наоборот, как будто они находятся в одной сети.
Для этого на каждой точке создаётся интерфейс WireGuard. На точке А интерфейс получает адрес 10.10.10.1/24, на точке Б — 10.10.11.1/24. Это внутренние адреса туннеля, они не должны пересекаться с локальными сетями.
Далее на точке А создаётся peer со следующими параметрами:
- Public Key — публичный ключ точки Б.
- Endpoint —
222.222.222.222, порт13231. - Allowed Address —
10.10.11.1/32,192.168.200.0/24.
На точке Б параметры зеркальны:
- Public Key — публичный ключ точки А.
- Endpoint —
111.111.111.111, порт13231. - Allowed Address —
10.10.10.1/32,192.168.100.0/24.
После создания peer необходимо добавить маршруты. На точке А нужно создать маршрут к сети 192.168.200.0/24 с gateway — интерфейсом WireGuard. На точке Б — маршрут к сети 192.168.100.0/24 аналогичным образом. В RouterOS 7 маршрут можно добавить через IP → Routes, указав Dst. Address — удалённую подсеть, а Gateway — интерфейс WireGuard.
Скрипт для автоматизации этого процесса доступен в статье на Habr. Он создаёт адреса, правила файрвола, peer и маршруты на обеих точках. При использовании скрипта достаточно заполнить переменные в начале и запустить его поочерёдно на каждом роутере, указав, какая точка настраивается — А или Б.
Проверка работы туннеля и диагностика неисправностей
После завершения настройки необходимо убедиться, что туннель работает корректно. Самый простой способ — зайти с устройства, которое направлено через VPN, на сайт типа ifconfig.me или 2ip.ru. Если туннель активен, сайт покажет IP-адрес VPN-сервера, а не вашего интернет-провайдера.
Более технически точный способ — проверить состояние peer в Winbox. Перейдите в WireGuard → Peers. У работающего peer должны быть видны счётчики байт RX и TX, которые увеличиваются по мере генерации трафика. Если счётчики остаются на нуле, соединение не установлено.
Самые частые причины неработающего туннеля:
- Неверный endpoint port — проверьте, что порт в настройках peer совпадает с портом, который слушает удалённая сторона.
- Файрвол блокирует исходящий UDP — убедитесь, что на WAN-интерфейсе нет правил, блокирующих UDP-трафик на нужный порт.
- Неправильный публичный ключ — сверьте ключи, переданные сторонами друг другу. Ошибка даже в одном символе приведёт к невозможности установить соединение.
- Отсутствует маршрут — проверьте таблицу маршрутов. Если маршрут к удалённой подсети отсутствует, пакеты не пойдут через туннель.
- Некорректный Allowed Address — если в Allowed Address указан не тот диапазон, WireGuard будет игнорировать пакеты для других подсетей.
Ещё одна особенность WireGuard: протокол не пытается агрессивно повторять рукопожатия, когда endpoint недоступен. Если VPN-провайдер ротирует серверы или меняет их IP-адреса, соединение может не восстановиться автоматически. В этом случае нужно обновить endpoint в настройках peer. Для домашних и офисных соединений с динамическими IP-адресами рекомендуется использовать DDNS и указывать в качестве endpoint доменное имя, а не IP.
Также обратите внимание на параметр Persistent Keepalive. Если он не задан (равен 0), WireGuard не будет отправлять keepalive-пакеты, и соединение за NAT может разорваться через несколько минут простоя. Рекомендуемое значение — 10–25 секунд.
WireGuard против OpenVPN: что выбрать для MikroTik
Выбор между WireGuard и OpenVPN зависит от конкретной задачи. Оба протокола поддерживаются MikroTik, но имеют принципиально разные характеристики.
Производительность. WireGuard заметно быстрее OpenVPN на том же оборудовании. Это связано с тем, что код WireGuard занимает всего несколько тысяч строк, а используемые криптографические примитивы (ChaCha20, Poly1305, Curve25519) отлично оптимизированы для современных процессоров. На слабых устройствах MikroTik разница в скорости может достигать двукратной величины.
Простота настройки. WireGuard не требует создания и управления сертификатами. Для установления соединения достаточно обменяться публичными ключами. OpenVPN, напротив, предполагает наличие инфраструктуры PKI: корневого сертификата, сертификатов сервера и клиентов. Это добавляет сложности в обслуживании, особенно если клиентов много.
Гибкость. OpenVPN позволяет более тонко управлять клиентами: раздавать индивидуальные маршруты, DNS-серверы, настраивать политики доступа для каждого клиента отдельно. WireGuard не умеет этого из коробки — все клиенты на сервере получают одинаковые параметры.
Модель соединений. WireGuard использует одноранговую модель (peer-to-peer), где каждая точка может быть и сервером, и клиентом. Это удобно для построения mesh-сетей. OpenVPN работает по классической схеме клиент-сервер.
Особенности MikroTik. Для WireGuard на MikroTik маршруты для каждой подсети нужно настраивать вручную. Для Windows-клиентов маршруты определяются автоматически на основе Allowed Address. Этот нюанс часто вызывает путаницу у администраторов, привыкших к другим реализациям WireGuard.
Практический вывод: для связи аппаратных роутеров между собой (site-to-site) и для клиентских подключений, где важна скорость, лучше выбрать WireGuard. Для внешних пользователей, которым нужен индивидуальный доступ к ресурсам, может быть удобнее OpenVPN. В любом случае WireGuard настраивается быстрее и работает стабильнее — принцип «настроил и забыл» здесь работает лучше всего.
Вопросы и ответы
На каких версиях RouterOS работает WireGuard?
WireGuard доступен нативно начиная с RouterOS версии 7. В версиях 6.x поддержки нет, поэтому для использования протокола необходимо обновить операционную систему. Проверить версию можно через Winbox (заголовок окна) или командой /system resource print в терминале.
Чем WireGuard отличается от OpenVPN на MikroTik?
WireGuard быстрее, проще в настройке (не требует сертификатов) и использует одноранговую модель соединений. OpenVPN даёт больше гибкости: можно индивидуально раздавать маршруты и DNS клиентам. Для связи роутеров между собой обычно выбирают WireGuard, а для внешних клиентов с индивидуальными настройками — OpenVPN.
Что такое Kill Switch и зачем он нужен?
Kill Switch — это механизм защиты от утечек трафика. Если туннель WireGuard падает, маршрут через него исчезает, и пакеты могут уйти напрямую через интернет-провайдера. Чтобы этого избежать, в таблицу маршрутизации добавляется blackhole-маршрут с большей дистанцией. Когда туннель недоступен, blackhole активируется и отбрасывает трафик, не выпуская его в открытый интернет.
Как направить через VPN только определённые устройства в локальной сети?
Используйте маршрутизацию по политике (PBR). Создайте правило в IP → Firewall → Mangle с Chain prerouting, укажите Src. Address устройства и Action mark routing с уникальной меткой (например, via-wireguard). Затем добавьте маршрут в таблицу с этой меткой через интерфейс WireGuard. Все пакеты от указанного устройства будут идти через VPN.
Почему peer в WireGuard показывает нулевые счётчики трафика?
Это значит, что соединение не установлено. Частые причины: неверный endpoint port, файрвол блокирует исходящий UDP на WAN, неправильный публичный ключ peer, отсутствует маршрут к удалённой подсети или некорректный Allowed Address. Проверьте эти параметры по порядку, начиная с файрвола.
Как настроить WireGuard для объединения двух офисов?
Создайте интерфейс WireGuard на каждом роутере и назначьте туннельные адреса из разных подсетей (например, 10.10.10.1/24 и 10.10.11.1/24). Добавьте peer на каждой стороне: укажите публичный ключ удалённого роутера, его внешний адрес и порт, а в Allowed Address — туннельный адрес и локальную подсеть удалённой стороны. Затем добавьте маршруты к удалённым локальным сетям через интерфейс WireGuard.
Нужно ли открывать порт в файрволе MikroTik для WireGuard?
Да, если роутер должен принимать входящие подключения. Добавьте правило в IP → Firewall → Filter Rules: Chain input, Protocol udp, Dst. Port — порт интерфейса WireGuard, In. Interface — ваш WAN. Действие — accept. Без этого правила удалённая сторона не сможет установить соединение.