opened image

WireGuard на MikroTik CHR

WireGuard на MikroTik RouterOS (CHR) — это лёгкий и быстрый способ поднять VPN-шлюз/exit-node прямо на виртуальном роутере. Однако у CHR есть важный нюанс: лицензионные ограничения по скорости (Free — до ~1 Мбит/с на интерфейс), о которых обязательно нужно помнить при планировании нагрузки.

 

В этой статье разберём:

  • какую роль играет лицензия CHR в скорости WireGuard;

  • базовую схему «MikroTik CHR как VPN-роутер + exit-node»;

  • команды RouterOS CLI с пояснениями;

  • пример клиентского конфига WireGuard;

  • проверку и отладку производительности.

 

Статья ориентирована на администраторов, уже знакомых с базовыми концепциями IP-сетей и MikroTik (WinBox/WebFig/CLI).

 

 

Лицензирование MikroTik CHR и влияние на скорость WireGuard

 

Для облачных/виртуальных сред MikroTik предлагает Cloud Hosted Router (CHR). У него есть несколько уровней лицензий:

  • CHR Free — бесплатная лицензия, ограничение ~1 Мбит/с на каждый интерфейс (tx/rx). Подходит только для тестов или очень низкой нагрузки.

  • CHR P1 — до 1 Гбит/с.

  • CHR P10 — до 10 Гбит/с.

  • CHR P-Unlimited — без ограничений скорости.

 

 

Проверка текущей лицензии

/system license print

 

 

Что важно в выводе:

  • nlevel=free — это CHR Free (лимит 1 Мбит/с).

  • nlevel=p1 / p10 / p-unlimited — лицензии с повышенными лимитами.

Вывод: если WireGuard «упирается» в 0.7–0.9 Мбит/с при корректных настройках NAT/маршрутизации, первым делом смотрим на nlevel. На CHR Free это ожидаемое поведение.

 

 

Обновление/активация лицензии

 

Общий алгоритм:

  1. Регистрируем учётку на сайте MikroTik.

  2. На CHR:

    /system license print
    /system license renew
    

    RouterOS запросит логин/пароль от аккаунта MikroTik.

  3. В личном кабинете MikroTik привязываем/покупаем нужную лицензию (например, P1).

  4. На CHR снова:

    /system license renew
    

 

 

 

         5. После этого nlevel меняется, и лимит скорости увеличивается в соответствии с лицензией.

 

 

Базовая схема WireGuard на CHR

 

Классическая схема для CHR как VPN-роутера/exit-node:

  • WAN-интерфейс (например, ether1) — получает публичный IP от провайдера/облака.

  • WireGuard-интерфейс wg1 — внутренняя подсеть для VPN-клиентов, например 10.0.88.0/24.

  • NAT (masquerade) — исходящий трафик клиентов через ether1.

  • Firewall / mangle — при необходимости:

    • разрешение форвардинга wg1 ↔ ether1,

    • MSS clamping для избежания проблем с MTU.

    •  

Далее — всё в CLI для RouterOS v7 (где WireGuard встроен).

 

 

Настройка WireGuard на MikroTik CHR через CLI

 

Создание WireGuard-интерфейса

/interface wireguard
add name=wg1 listen-port=13231 comment="wg-iface"

Что делает команда:

  • создаёт интерфейс WireGuard с именем wg1;

  • listen-port=13231 — порт, на котором CHR будет ждать входящие WG-подключения;

  • comment — произвольная подпись для удобства.

 

Проверить результат:

/interface wireguard print detail

 

 

После создания RouterOS сам сгенерирует ключи (public/private). При необходимости можно задать private-key вручную.

 

 

Назначение IP-адреса на wg1

 

Предположим, что подсеть для VPN-клиентов — 10.0.88.0/24, а шлюзом будет сам CHR: 10.0.88.1.

/ip address
add address=10.0.88.1/24 interface=wg1 comment="wg-ip"

 

Что делает:

  • назначает IP 10.0.88.1 интерфейсу wg1;

  • задаёт маску /24 (от 10.0.88.1 до 10.0.88.254 под клиентов);

  • позволяет CHR маршрутизировать трафик между этой подсетью и WAN.

 

Проверка:

/ip address print detail where interface~"wg"

 

 

 

 Настройка peer (клиента WireGuard)

 

Сначала на CHR нужно знать public-key клиента. Его можно получить, сгенерировав пару ключей на стороне клиента (Linux/wg, Windows, Android и т.д.).

Пример добавления клиента с адресом 10.0.88.3/32:

/interface wireguard peers
add interface=wg1 name="client1" \
    public-key="<PUBLIC_KEY_CLIENT>" \
    allowed-address=10.0.88.3/32 \
    persistent-keepalive=25s

 

Разбор параметров:

  • interface=wg1 — привязка peer’а к нашему wg-интерфейсу;

  • name="client1" — удобное имя peer’а;

  • public-key — публичный ключ клиента;

  • allowed-address=10.0.88.3/32 — IP, который клиент будет использовать внутри туннеля;

  • persistent-keepalive=25s — периодический keepalive, полезен при NAT.

 

Проверка:

/interface wireguard peers print detail

 

 

Важно:
На стороне CHR мы не прописываем allowed-address=0.0.0.0/0 для клиента, чтобы не ломать таблицу маршрутизации самого роутера. Full-tunnel достигается настройкой на клиенте.

 

 

NAT (masquerade) для подсети WireGuard

 

Чтобы клиенты из 10.0.88.0/24 выходили в интернет через ether1, добавляем правила srcnat:

/ip firewall nat
add chain=srcnat src-address=10.0.88.0/24 out-interface=ether1 action=masquerade comment="WG->WAN masquerade"

Что делает:

  • берёт трафик от клиентов с адресом 10.0.88.0/24;

  • подменяет исходный IP на IP интерфейса ether1 (masquerade);

  • позволяет клиентам выглядеть как сам CHR снаружи.

 

Проверка:

/ip firewall nat print detail where chain=srcnat

 

 

 

Firewall и форвардинг

 

Если firewall на CHR включён и используются правила drop в цепочке forward, нужно явно разрешить трафик между wg1 и ether1.

Простейший вариант:

/ip firewall filter
add chain=forward in-interface=wg1 out-interface=ether1 action=accept comment="Allow WG->WAN"
add chain=forward in-interface=ether1 out-interface=wg1 action=accept comment="Allow WAN->WG (established/related)"

Часто также добавляют более строгие правила с использованием connection-state=established,related, но конкретная политика зависит от вашей общей схемы безопасности.

 

 

MSS clamping (решение проблем с MTU и низкой скоростью)

 

Виртуальные среды + VPN часто страдают от неправильного MTU, что приводит к фрагментации или сбросу пакетов, и в итоге — к «тормозам» TCP-соединений. На Mikrotik это решается правилом mangle с change-mss.

/ip firewall mangle
add chain=forward action=change-mss new-mss=clamp-to-pmtu \
    passthrough=yes protocol=tcp tcp-flags=syn out-interface=wg1 \
    comment="Clamp MSS for WG"

 

Что делает:

  • перехватывает TCP SYN-пакеты, выходящие через wg1;

  • автоматически подстраивает MSS под фактический путь (Path MTU);

  • помогает избежать проблем с «зависанием» или сильным падением скорости на больших пакетах.

 

Проверка:

/ip firewall mangle print detail where chain=forward

 

 

 

 

Пример клиентского конфига WireGuard (full-tunnel)

 

Допустим, CHR имеет публичный IP 203.0.113.10, wg1 слушает 13231, а клиенту мы назначили 10.0.88.3/32.

 

Конфиг клиента (Windows/Linux/macOS/Android)

[Interface]
PrivateKey = <PRIVATE_KEY_CLIENT>
Address    = 10.0.88.3/32
DNS        = 1.1.1.1, 8.8.8.8
MTU        = 1320

[Peer]
PublicKey  = <PUBLIC_KEY_CHR>
Endpoint   = 203.0.113.10:13231
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

 

Ключевые моменты:

  • AllowedIPs = 0.0.0.0/0, ::/0 — это делает full-tunnel: весь IPv4/IPv6-трафик клиента идёт через VPN.

  • MTU = 1320 — часто оптимальное значение для туннеля через виртуализацию; при проблемах со скоростью стоит поэкспериментировать.

  • В клиентских приложениях обычно есть опции:

    • “Block untunneled traffic / Kill switch”;

    • “Route all traffic through VPN”.

 

Для строгого exit-node важно включить эти опции на стороне клиента — сервер не может заставить клиент не использовать локальный интернет, это задача его ОС/файрвола.

 

 

Тестирование и диагностика скорости

 

После базовой настройки CHR и клиента стоит проверить:

  1. Маршрутизацию и IP:

    • с клиента зайти на любой сервис «what is my IP»;

    • IP должен совпадать с публичным IP CHR.

  2. Скорость:

    • выполнить speedtest с клиента при включённом WireGuard;

    • сравнить со speedtest без VPN.

  3. На стороне CHR:

    /interface wireguard peers print detail
    

    Обратить внимание на поля:

    • rx/tx — растут ли счётчики трафика;

    • last-handshake — актуален ли рукопожатие.

  4. Проверить лицензию:

    Если при идеальной конфигурации скорость стабильно около 0.7–0.9 Мбит/с, почти всегда причина — CHR Free:

    /system license print
    

     

 

Если nlevel=free, то для 100–200 Мбит/с и выше понадобится минимум CHR P1.

 

 

Резюме

  1. WireGuard на MikroTik CHR настраивается довольно просто:

    • создать интерфейс wg1 и назначить адрес;

    • добавить peers с их public-key и allowed-address;

    • настроить NAT (masquerade) для подсети WG на WAN;

    • при необходимости — firewall и MSS clamping.

  2. Full-tunnel/exit-node реализуется за счёт:

    • AllowedIPs = 0.0.0.0/0 на стороне клиента;

    • kill-switch/route-all-traffic в VPN-клиенте.

  3. Производительность WireGuard на CHR напрямую зависит от:

    • лицензии (Free vs P1/P10/P-Unlimited);

    • мощности CPU и виртуализационной платформы;

    • корректной настройки MTU/MSS.

  4. Если при корректном конфиге VPN упирается в ~1 Мбит/с — первым делом нужно проверить /system license print и убедиться, не работает ли CHR в режиме Free.

 

Такой подход позволяет строить как тестовые стенды, так и полноценные производительные VPN-узлы на базе MikroTik CHR, при этом понимая, где заканчивается конфигурация админа и начинаются ограничения лицензий и инфраструктуры.