mikrotik-wiki.ru
Главная
Загрузка...

VPN-клиент на MikroTik — подключение к серверу

RouterOS 7.xVPN13 мин30 мар. 2026 г.
TelegramVK

VPN-клиент на MikroTik — подключение к удалённому серверу

MikroTik часто используется не только как VPN-сервер, но и как VPN-клиент — для подключения офисной или домашней сети к удалённому VPN-серверу. Типичные сценарии: подключение филиала к корпоративной сети через VPN, маршрутизация всего интернет-трафика через VPS для обхода ограничений, доступ к ресурсам удалённой компании. В этом руководстве настроим MikroTik как VPN-клиент для всех основных протоколов — WireGuard, L2TP/IPsec, OpenVPN, SSTP и IPsec IKEv2, разберём маршрутизацию (full tunnel и split tunnel), настроим policy-based routing для направления трафика отдельных устройств через VPN и сравним протоколы.

Описание

Сценарии использования MikroTik как VPN-клиента

СценарийОписаниеРекомендуемый протокол
Филиал → головной офисПодключение сети филиала к корпоративнойIPsec IKEv2, WireGuard
Весь трафик через VPSМаршрутизация 0.0.0.0/0 через VPN-сервер на VPSWireGuard
Отдельные устройства через VPNСмартфон или ПК через VPN, остальные — напрямуюWireGuard + mangle
Доступ к ресурсам клиентаПодключение к VPN-серверу заказчикаL2TP/IPsec, OpenVPN
Резервный каналVPN как backup при падении основного ISPSSTP, OpenVPN (через TCP)

Сравнение VPN-протоколов

ПараметрWireGuardL2TP/IPsecOpenVPNSSTPIPsec IKEv2
Скорость на MikroTikВысокаяСредняяНизкаяСредняяВысокая
Простота настройкиПростаяСредняяСложнаяСредняяСложная
Проход через NATДа (UDP)ПроблемыДа (TCP 443)Да (TCP 443)Да (NAT-T)
ТранспортUDPUDPTCP (в ROS)TCPUDP
ШифрованиеChaCha20/Poly1305AES + ESPAESAES + TLSAES + ESP
СовместимостьLinux, VPSCisco, WindowsУниверсальнаяWindows, AzureCisco, Juniper
MTU overhead~60 байт~100 байт~80 байт~70 байт~60 байт
Поддержка в ROS 7ДаДаДа (ограниченно)ДаДа

Рекомендация: Если VPN-сервер поддерживает WireGuard — используйте WireGuard. Это самый быстрый и простой вариант. Для совместимости с корпоративным оборудованием — IPsec IKEv2 или L2TP/IPsec.

Настройка

WireGuard-клиент

WireGuard — самый простой протокол для настройки. Предположим, VPN-сервер уже настроен (Linux VPS с WireGuard).

Данные от сервера:

  • Endpoint: 198.51.100.1:51820
  • Server public key: SERVER_PUBLIC_KEY_HERE
  • Allowed IPs: 10.10.10.0/24
  • Client IP: 10.10.10.2/32
[admin@MikroTik] >
# Создаём интерфейс WireGuard
/interface/wireguard/add name=wg-vpn listen-port=13231

# Смотрим публичный ключ MikroTik — передайте его администратору сервера
/interface/wireguard/print where name=wg-vpn
# Запишите значение public-key

# Назначаем IP-адрес
/ip/address/add address=10.10.10.2/32 interface=wg-vpn network=10.10.10.1

# Добавляем peer (VPN-сервер)
/interface/wireguard/peers/add interface=wg-vpn \
  public-key="SERVER_PUBLIC_KEY_HERE" \
  endpoint-address=198.51.100.1 \
  endpoint-port=51820 \
  allowed-address=0.0.0.0/0 \
  persistent-keepalive=25s

persistent-keepalive=25s — важен, когда MikroTik за NAT. Без него NAT-таблица провайдера может закрыть сессию при отсутствии трафика.

Full tunnel через WireGuard

Маршрутизация всего трафика через VPN:

[admin@MikroTik] >
# Маршрут по умолчанию через WireGuard (с меньшим distance)
/ip/route/add dst-address=0.0.0.0/0 gateway=wg-vpn distance=1 \
  comment="Default route via WireGuard VPN"

# Статический маршрут к endpoint серверу через реальный шлюз
# (иначе сам WireGuard-трафик тоже пойдёт в туннель — петля)
/ip/route/add dst-address=198.51.100.1/32 gateway=192.168.1.1 \
  comment="WireGuard endpoint via ISP"

Важно: Маршрут к endpoint-адресу серверу (198.51.100.1) через шлюз провайдера необходим. Без него весь трафик, включая сам WireGuard, уйдёт в туннель, и соединение оборвётся.

Альтернативный подход — два маршрута вместо одного дефолтного:

[admin@MikroTik] >
/ip/route/add dst-address=0.0.0.0/1 gateway=wg-vpn comment="VPN half 1"
/ip/route/add dst-address=128.0.0.0/1 gateway=wg-vpn comment="VPN half 2"

Два маршрута /1 покрывают весь диапазон IPv4, но имеют более длинный prefix, чем дефолтный маршрут /0. Это означает, что они будут выбраны без конфликта с существующим дефолтным маршрутом.

Split tunnel через WireGuard

Только определённые сети через VPN:

[admin@MikroTik] >
# Только трафик в корпоративную сеть — через VPN
/ip/route/add dst-address=192.168.0.0/16 gateway=wg-vpn \
  comment="Corporate networks via VPN"
/ip/route/add dst-address=10.0.0.0/8 gateway=wg-vpn \
  comment="Corporate networks via VPN"

L2TP/IPsec клиент

L2TP/IPsec — до сих пор популярен в корпоративных сетях (Cisco, Windows Server). MikroTik поддерживает его как клиент «из коробки».

[admin@MikroTik] >
# Создаём L2TP-клиент
/interface/l2tp-client/add name=l2tp-vpn \
  connect-to=203.0.113.50 \
  user="mikrotik-branch" \
  password="L2tpPass123!" \
  use-ipsec=yes \
  ipsec-secret="SharedIPsecKey!" \
  allow-fast-path=yes \
  add-default-route=no \
  disabled=no

Параметры:

ПараметрОписание
connect-toIP или домен VPN-сервера
userИмя пользователя PPP
passwordПароль PPP
use-ipsecВключить шифрование IPsec
ipsec-secretPre-shared key для IPsec
allow-fast-pathАппаратное ускорение (если поддерживается)
add-default-routeАвтоматически добавлять маршрут 0.0.0.0/0 через VPN

Проверяем подключение:

[admin@MikroTik] >
/interface/l2tp-client/print
# status должен быть connected

/interface/l2tp-client/monitor l2tp-vpn once
# Покажет: uptime, encoding, local-address, remote-address

Маршрутизация:

[admin@MikroTik] >
# Split tunnel — только корпоративная сеть
/ip/route/add dst-address=172.16.0.0/12 gateway=l2tp-vpn \
  comment="Corporate via L2TP"

OpenVPN клиент

OpenVPN на MikroTik имеет ограничения (только TCP, нет LZO), но необходим для совместимости с существующими OpenVPN-серверами.

Подготовка: импорт сертификатов

Получите от администратора OpenVPN-сервера файлы:

  • ca.crt — сертификат CA
  • client.crt — клиентский сертификат
  • client.key — приватный ключ клиента

Загрузите их на MikroTik и импортируйте:

[admin@MikroTik] >
/certificate/import file-name=ca.crt passphrase=""
/certificate/import file-name=client.crt passphrase=""
/certificate/import file-name=client.key passphrase=""

# Переименуем для удобства
/certificate/set [find where common-name~"CA"] name=ovpn-ca
/certificate/set [find where common-name~"client"] name=ovpn-client

Создание OpenVPN-клиента

[admin@MikroTik] >
/interface/ovpn-client/add name=ovpn-vpn \
  connect-to=203.0.113.60 \
  port=1194 \
  mode=ip \
  protocol=tcp \
  certificate=ovpn-client \
  verify-server-certificate=yes \
  cipher=aes256-gcm \
  auth=sha256 \
  user="mikrotik" \
  password="OvpnPass123!" \
  add-default-route=no \
  disabled=no

Параметры:

ПараметрОписание
connect-toIP или домен OpenVPN-сервера
portПорт сервера (обычно 1194)
modeip — Layer 3 (tun), единственный вариант в ROS 7
protocoltcp — единственный поддерживаемый транспорт в RouterOS
certificateКлиентский сертификат
cipherАлгоритм шифрования (должен совпадать с сервером)
authАлгоритм HMAC (должен совпадать с сервером)
user/passwordЕсли сервер использует дополнительную аутентификацию

Проверка:

[admin@MikroTik] >
/interface/ovpn-client/print
/interface/ovpn-client/monitor ovpn-vpn once

Важно: Если OpenVPN-сервер использует UDP — MikroTik не сможет подключиться. Попросите администратора сервера добавить TCP-listener или рассмотрите альтернативный протокол.

SSTP клиент

SSTP (Secure Socket Tunneling Protocol) работает по TCP 443 и проходит через большинство файрволов, включая корпоративные прокси. Удобен для подключения к Windows Server.

[admin@MikroTik] >
/interface/sstp-client/add name=sstp-vpn \
  connect-to=203.0.113.70:443 \
  user="mikrotik-sstp" \
  password="SstpPass123!" \
  certificate=none \
  verify-server-certificate=no \
  verify-server-address-from-certificate=no \
  pfs=yes \
  add-default-route=no \
  disabled=no

Если сервер использует доверенный сертификат (Let's Encrypt):

[admin@MikroTik] >
/interface/sstp-client/set sstp-vpn \
  verify-server-certificate=yes \
  verify-server-address-from-certificate=yes

Проверка:

[admin@MikroTik] >
/interface/sstp-client/print
/interface/sstp-client/monitor sstp-vpn once

IPsec IKEv2 Initiator

MikroTik как IKEv2-клиент — подключение к корпоративному IPsec VPN-серверу (Cisco, Juniper, другой MikroTik).

С Pre-Shared Key (PSK)

[admin@MikroTik] >
# Profile (Phase 1)
/ip/ipsec/profile/add name=ikev2-client-profile \
  hash-algorithm=sha256 \
  enc-algorithm=aes-256 \
  dh-group=modp2048 \
  nat-traversal=yes \
  dpd-interval=30s

# Proposal (Phase 2)
/ip/ipsec/proposal/add name=ikev2-client-proposal \
  auth-algorithms=sha256 \
  enc-algorithms=aes-256-cbc \
  pfs-group=modp2048

# Peer (VPN-сервер)
/ip/ipsec/peer/add name=hq-vpn \
  address=203.0.113.80 \
  exchange-mode=ike2 \
  profile=ikev2-client-profile \
  send-initial-contact=yes

# Identity (аутентификация)
/ip/ipsec/identity/add peer=hq-vpn \
  auth-method=pre-shared-key \
  secret="VeryStr0ngPSK!Key"

# Policy (какой трафик шифровать)
/ip/ipsec/policy/add peer=hq-vpn \
  src-address=192.168.88.0/24 \
  dst-address=172.16.0.0/16 \
  tunnel=yes \
  sa-src-address=203.0.113.1 \
  sa-dst-address=203.0.113.80 \
  proposal=ikev2-client-proposal \
  action=encrypt

С Mode Config (получение IP от сервера)

Если сервер выдаёт IP клиенту через Mode Config:

[admin@MikroTik] >
/ip/ipsec/mode-config/add name=request-only \
  responder=no

/ip/ipsec/identity/set [find where peer=hq-vpn] \
  mode-config=request-only \
  generate-policy=port-strict

В этом случае policy создаётся автоматически на основе параметров, полученных от сервера.

Маршрутизация: Full tunnel vs Split tunnel

Full tunnel (весь трафик через VPN)

Для любого VPN-протокола:

[admin@MikroTik] >
# Вариант 1: add-default-route в настройках клиента
/interface/l2tp-client/set l2tp-vpn add-default-route=yes

# Вариант 2: ручной маршрут с меньшей дистанцией
/ip/route/add dst-address=0.0.0.0/0 gateway=l2tp-vpn distance=1

# Вариант 3: два маршрута /1 (не конфликтуют с дефолтным)
/ip/route/add dst-address=0.0.0.0/1 gateway=wg-vpn
/ip/route/add dst-address=128.0.0.0/1 gateway=wg-vpn

Не забудьте добавить маршрут к endpoint VPN-сервера через реальный шлюз провайдера:

[admin@MikroTik] >
/ip/route/add dst-address=198.51.100.1/32 gateway=192.168.1.1 \
  comment="VPN server endpoint via ISP"

Split tunnel (только определённые сети)

[admin@MikroTik] >
# Корпоративные сети через VPN
/ip/route/add dst-address=172.16.0.0/12 gateway=wg-vpn
/ip/route/add dst-address=192.168.0.0/16 gateway=wg-vpn

Policy-based routing: отдельные устройства через VPN

Самый полезный сценарий — направить трафик определённых устройств (например, Smart TV или рабочий ПК) через VPN, а остальных — через обычный интернет.

Шаг 1: Создание routing table

[admin@MikroTik] >
/routing/table/add name=via-vpn fib

Шаг 2: Маркировка трафика в mangle

[admin@MikroTik] >
# Трафик от конкретного устройства (по IP)
/ip/firewall/mangle/add chain=prerouting \
  src-address=192.168.88.50 \
  action=mark-routing new-routing-mark=via-vpn \
  passthrough=yes \
  comment="Smart TV via VPN"

# Трафик от нескольких устройств (по address list)
/ip/firewall/address-list/add list=vpn-devices address=192.168.88.50 \
  comment="Smart TV"
/ip/firewall/address-list/add list=vpn-devices address=192.168.88.51 \
  comment="Work laptop"
/ip/firewall/address-list/add list=vpn-devices address=192.168.88.52 \
  comment="Gaming console"

/ip/firewall/mangle/add chain=prerouting \
  src-address-list=vpn-devices \
  action=mark-routing new-routing-mark=via-vpn \
  passthrough=yes \
  comment="Devices via VPN"

Шаг 3: Маршрут в VPN routing table

[admin@MikroTik] >
/ip/route/add dst-address=0.0.0.0/0 gateway=wg-vpn \
  routing-table=via-vpn \
  comment="Default route for VPN devices"

Шаг 4: NAT для VPN-трафика

[admin@MikroTik] >
/ip/firewall/nat/add chain=srcnat \
  routing-mark=via-vpn \
  out-interface=wg-vpn \
  action=masquerade \
  comment="NAT for VPN devices"

Теперь устройства из address list vpn-devices ходят в интернет через WireGuard VPN, а все остальные — через обычного провайдера.

Шаг 5: Защита от утечек при падении VPN

Если VPN-туннель упадёт, трафик маркированных устройств может пойти через обычный шлюз. Чтобы заблокировать это:

[admin@MikroTik] >
# Запрещаем маркированному трафику выходить не через VPN
/ip/firewall/filter/add chain=forward \
  routing-mark=via-vpn \
  out-interface=!wg-vpn \
  action=drop \
  comment="Kill switch for VPN devices"

Это работает как Kill Switch — если VPN недоступен, трафик маркированных устройств блокируется, а не утекает через провайдера.

DNS через VPN (предотвращение DNS leak)

При полном туннелировании DNS-запросы должны идти через VPN, иначе провайдер увидит все посещаемые домены.

[admin@MikroTik] >
# DNS-серверы VPN-провайдера
/ip/dns/set servers=10.10.10.1 allow-remote-requests=yes

# Или публичные DNS, но через VPN
/ip/dns/set servers=1.1.1.1,8.8.8.8

# Перехват DNS-запросов (если клиенты используют свои DNS)
/ip/firewall/nat/add chain=dstnat protocol=udp dst-port=53 \
  src-address=192.168.88.0/24 dst-address=!10.10.10.1 \
  action=redirect to-ports=53 \
  comment="Redirect DNS to MikroTik"

Проверка

Проверка статуса VPN-подключения

[admin@MikroTik] >
# WireGuard
/interface/wireguard/print
/interface/wireguard/peers/print detail
# Поле last-handshake должно обновляться каждые ~2 минуты

# L2TP
/interface/l2tp-client/print
/interface/l2tp-client/monitor l2tp-vpn once

# OpenVPN
/interface/ovpn-client/print
/interface/ovpn-client/monitor ovpn-vpn once

# SSTP
/interface/sstp-client/print
/interface/sstp-client/monitor sstp-vpn once

# IPsec
/ip/ipsec/active-peers/print
/ip/ipsec/installed-sa/print

Проверка маршрутизации

[admin@MikroTik] >
# Таблица маршрутов
/ip/route/print where gateway~"wg-vpn\\|l2tp-vpn\\|ovpn-vpn\\|sstp-vpn"

# Трассировка через VPN
/tool/traceroute address=8.8.8.8

# Проверка, через какой интерфейс идёт трафик
/ip/route/print where dst-address=0.0.0.0/0

Проверка policy-based routing

[admin@MikroTik] >
# Проверяем, что mangle маркирует трафик
/ip/firewall/mangle/print stats where comment~"VPN"

# Проверяем маршруты в VPN routing table
/ip/route/print where routing-table=via-vpn

# Трассировка от имени конкретного устройства
# (не работает напрямую, но можно проверить через:)
/ip/firewall/mangle/print stats
# Счётчик packets должен расти для маркирующих правил

Проверка скорости через VPN

[admin@MikroTik] >
# Bandwidth test через VPN (если на другой стороне есть MikroTik)
/tool/bandwidth-test address=10.10.10.1 protocol=tcp duration=10s

# Или через iperf3 на сервере
# На сервере: iperf3 -s
# На MikroTik: /tool/fetch url="http://10.10.10.1:5201" (грубая оценка)

Проверка DNS leak

С устройства за MikroTik откройте в браузере https://dnsleaktest.com или https://ipleak.net — они покажут, какие DNS-серверы используются и совпадает ли IP с VPN.

Типичные ошибки

Ошибка: Double NAT (двойной NAT)

Симптомы: VPN-туннель устанавливается, но трафик не проходит. Ping через VPN не работает.

Причина: MikroTik делает NAT (masquerade) для выходящего трафика, и VPN-сервер тоже делает NAT. Двойной NAT ломает маршрутизацию.

Решение:

[admin@MikroTik] >
# Исключаем VPN-трафик из masquerade
/ip/firewall/nat/add chain=srcnat \
  dst-address=172.16.0.0/12 \
  out-interface=wg-vpn \
  action=accept \
  comment="No NAT for VPN split tunnel" \
  place-before=0

# Или точнее — accept перед masquerade для VPN-интерфейса
/ip/firewall/nat/print
# Убедитесь, что accept-правило стоит ПЕРЕД masquerade

Для full tunnel проверьте настройки NAT на VPN-сервере — серверный NAT должен маскарадить трафик VPN-клиентов.

Ошибка: DNS leak (утечка DNS)

Симптомы: VPN работает, IP-адрес через VPN, но DNS-запросы идут через провайдера. На dnsleaktest.com видны DNS-серверы провайдера.

Причина: MikroTik использует DNS-серверы, полученные от провайдера по DHCP, а не через VPN.

Решение:

[admin@MikroTik] >
# Устанавливаем DNS через VPN
/ip/dns/set servers=10.10.10.1

# Отключаем получение DNS от провайдера
/ip/dhcp-client/set [find] use-peer-dns=no

# Перенаправляем все DNS-запросы клиентов на MikroTik
/ip/firewall/nat/add chain=dstnat protocol=udp dst-port=53 \
  src-address=192.168.88.0/24 action=redirect to-ports=53 \
  comment="Force DNS through MikroTik"
/ip/firewall/nat/add chain=dstnat protocol=tcp dst-port=53 \
  src-address=192.168.88.0/24 action=redirect to-ports=53 \
  comment="Force DNS through MikroTik"

Ошибка: MTU проблемы (страницы не открываются)

Симптомы: Ping работает, мелкие запросы проходят, но веб-страницы не загружаются или загружаются очень медленно. Большие файлы не скачиваются.

Причина: VPN-инкапсуляция уменьшает эффективный MTU. Крупные пакеты не помещаются и отбрасываются, если PMTUD (Path MTU Discovery) не работает.

Решение:

[admin@MikroTik] >
# Уменьшаем MTU на VPN-интерфейсе
/interface/wireguard/set wg-vpn mtu=1420

# Или для L2TP
/interface/l2tp-client/set l2tp-vpn max-mtu=1400 max-mru=1400

# MSS Clamping (самый надёжный метод)
/ip/firewall/mangle/add chain=forward protocol=tcp \
  out-interface=wg-vpn tcp-flags=syn \
  action=change-mss new-mss=clamp-to-pmtu \
  comment="MSS clamp for VPN"

/ip/firewall/mangle/add chain=forward protocol=tcp \
  in-interface=wg-vpn tcp-flags=syn \
  action=change-mss new-mss=clamp-to-pmtu \
  comment="MSS clamp for VPN"

clamp-to-pmtu автоматически вычисляет оптимальный MSS на основе MTU интерфейса. Это самый универсальный вариант.

Проверка текущего MTU:

[admin@MikroTik] >
/ping address=8.8.8.8 size=1472 do-not-fragment interface=wg-vpn
# Если packet too large — уменьшайте size, пока ping не пройдёт
# MTU = size + 28 (IP + ICMP headers)

Ошибка: VPN подключается, но трафик не идёт

Симптомы: Интерфейс VPN в состоянии running, но ping через него не работает.

Причина: Отсутствуют маршруты, firewall блокирует forward, или нет NAT.

Решение:

[admin@MikroTik] >
# 1. Проверяем маршруты
/ip/route/print where gateway~"vpn"
# Должен быть хотя бы один маршрут через VPN-интерфейс

# 2. Проверяем firewall forward
/ip/firewall/filter/print where chain=forward
# Должно быть разрешение для трафика через VPN

# Добавляем, если нет
/ip/firewall/filter/add chain=forward out-interface=wg-vpn action=accept \
  comment="Allow forward to VPN" place-before=0
/ip/firewall/filter/add chain=forward in-interface=wg-vpn action=accept \
  comment="Allow forward from VPN" place-before=0

# 3. Проверяем NAT
/ip/firewall/nat/print where chain=srcnat
# Должен быть masquerade для VPN-трафика, если удалённая сеть не знает
# обратный маршрут в вашу LAN

Ошибка: WireGuard — нет handshake

Симптомы: WireGuard-интерфейс создан, peer добавлен, но last-handshake пуст или очень старый. Трафик не идёт.

Причина: Публичные ключи не совпадают, endpoint недоступен, или firewall блокирует UDP.

Решение:

[admin@MikroTik] >
# Проверяем peer
/interface/wireguard/peers/print detail where interface=wg-vpn
# public-key должен совпадать с ключом сервера
# endpoint-address и endpoint-port должны быть правильными

# Проверяем доступность endpoint
/ping address=198.51.100.1 count=4

# Проверяем, что UDP-порт не блокируется
/tool/traceroute address=198.51.100.1 protocol=udp port=51820

На стороне сервера убедитесь, что:

  • Публичный ключ MikroTik добавлен как peer
  • AllowedIPs включает IP-адрес MikroTik
  • Firewall разрешает UDP на порту WireGuard

Ошибка: L2TP/IPsec — не подключается через NAT провайдера

Симптомы: L2TP-клиент показывает connecting... бесконечно или ошибку timeout.

Причина: L2TP использует протокол GRE (IP protocol 47), который не проходит через некоторые NAT. IPsec NAT-T (UDP 4500) тоже может блокироваться.

Решение:

[admin@MikroTik] >
# Проверяем, что IPsec NAT-T работает
/ip/ipsec/installed-sa/print
# Если пуст — IPsec не устанавливается

# Увеличиваем таймаут
/interface/l2tp-client/set l2tp-vpn max-retries=10

Если провайдер блокирует протоколы IPsec, L2TP/IPsec через NAT может не работать. Рассмотрите альтернативы:

  • SSTP — TCP 443, проходит через любой NAT
  • WireGuard — UDP, обычно проходит через NAT
  • OpenVPN — TCP 443, маскируется под HTTPS

Ошибка: Policy-based routing не работает

Симптомы: Правила mangle созданы, но трафик указанных устройств не идёт через VPN.

Причина: Неправильная цепочка (chain) в mangle, или маршрут в VPN routing table отсутствует.

Решение:

[admin@MikroTik] >
# Mangle должен быть в chain=prerouting (НЕ forward, НЕ output)
/ip/firewall/mangle/print where action=mark-routing

# Проверяем, что routing table существует
/routing/table/print

# Проверяем маршрут в VPN routing table
/ip/route/print where routing-table=via-vpn
# Должен быть маршрут 0.0.0.0/0 через VPN-интерфейс

# Проверяем счётчики mangle
/ip/firewall/mangle/print stats
# Если packets=0 — правило не срабатывает, проверьте src-address

Важно: Chain prerouting обрабатывает трафик до принятия решения о маршрутизации. Если использовать forward — маршрутизация уже произошла, и mark-routing не повлияет.

Автоматическое переподключение VPN

Для обеспечения постоянного подключения используйте Netwatch или скрипт:

[admin@MikroTik] >
# Netwatch — мониторит IP через VPN и переподключает при падении
/tool/netwatch/add host=10.10.10.1 interval=30s \
  type=icmp timeout=3s \
  down-script="/interface/wireguard/peers/disable [find where interface=wg-vpn]; :delay 5s; /interface/wireguard/peers/enable [find where interface=wg-vpn]" \
  comment="WireGuard VPN health check"

Для L2TP/SSTP/OpenVPN переподключение обычно происходит автоматически — эти клиенты встроенно пытаются восстановить соединение.

MikroTik в роли VPN-клиента — мощное решение для подключения целой сети к удалённым ресурсам. Выбирайте протокол в зависимости от совместимости с сервером, используйте policy-based routing для гранулярного управления трафиком и всегда проверяйте DNS leak при полном туннелировании.

[admin@MikroTik] >
# Создаём интерфейс WireGuard
/interface/wireguard/add name=wg-vpn listen-port=13231

# Смотрим публичный ключ MikroTik — передайте его администратору сервера
/interface/wireguard/print where name=wg-vpn
# Запишите значение public-key

# Назначаем IP-адрес
/ip/address/add address=10.10.10.2/32 interface=wg-vpn network=10.10.10.1

# Добавляем peer (VPN-сервер)
/interface/wireguard/peers/add interface=wg-vpn \
  public-key="SERVER_PUBLIC_KEY_HERE" \
  endpoint-address=198.51.100.1 \
  endpoint-port=51820 \
  allowed-address=0.0.0.0/0 \
  persistent-keepalive=25s
# Маршрут по умолчанию через WireGuard (с меньшим distance)
/ip/route/add dst-address=0.0.0.0/0 gateway=wg-vpn distance=1 \
  comment="Default route via WireGuard VPN"

# Статический маршрут к endpoint серверу через реальный шлюз
# (иначе сам WireGuard-трафик тоже пойдёт в туннель — петля)
/ip/route/add dst-address=198.51.100.1/32 gateway=192.168.1.1 \
  comment="WireGuard endpoint via ISP"
/ip/route/add dst-address=0.0.0.0/1 gateway=wg-vpn comment="VPN half 1"
/ip/route/add dst-address=128.0.0.0/1 gateway=wg-vpn comment="VPN half 2"
# Только трафик в корпоративную сеть — через VPN
/ip/route/add dst-address=192.168.0.0/16 gateway=wg-vpn \
  comment="Corporate networks via VPN"
/ip/route/add dst-address=10.0.0.0/8 gateway=wg-vpn \
  comment="Corporate networks via VPN"
# Создаём L2TP-клиент
/interface/l2tp-client/add name=l2tp-vpn \
  connect-to=203.0.113.50 \
  user="mikrotik-branch" \
  password="L2tpPass123!" \
  use-ipsec=yes \
  ipsec-secret="SharedIPsecKey!" \
  allow-fast-path=yes \
  add-default-route=no \
  disabled=no
/interface/l2tp-client/print
# status должен быть connected

/interface/l2tp-client/monitor l2tp-vpn once
# Покажет: uptime, encoding, local-address, remote-address
# Split tunnel — только корпоративная сеть
/ip/route/add dst-address=172.16.0.0/12 gateway=l2tp-vpn \
  comment="Corporate via L2TP"
/certificate/import file-name=ca.crt passphrase=""
/certificate/import file-name=client.crt passphrase=""
/certificate/import file-name=client.key passphrase=""

# Переименуем для удобства
/certificate/set [find where common-name~"CA"] name=ovpn-ca
/certificate/set [find where common-name~"client"] name=ovpn-client
/interface/ovpn-client/add name=ovpn-vpn \
  connect-to=203.0.113.60 \
  port=1194 \
  mode=ip \
  protocol=tcp \
  certificate=ovpn-client \
  verify-server-certificate=yes \
  cipher=aes256-gcm \
  auth=sha256 \
  user="mikrotik" \
  password="OvpnPass123!" \
  add-default-route=no \
  disabled=no
/interface/ovpn-client/print
/interface/ovpn-client/monitor ovpn-vpn once
/interface/sstp-client/add name=sstp-vpn \
  connect-to=203.0.113.70:443 \
  user="mikrotik-sstp" \
  password="SstpPass123!" \
  certificate=none \
  verify-server-certificate=no \
  verify-server-address-from-certificate=no \
  pfs=yes \
  add-default-route=no \
  disabled=no
/interface/sstp-client/set sstp-vpn \
  verify-server-certificate=yes \
  verify-server-address-from-certificate=yes
/interface/sstp-client/print
/interface/sstp-client/monitor sstp-vpn once
# Profile (Phase 1)
/ip/ipsec/profile/add name=ikev2-client-profile \
  hash-algorithm=sha256 \
  enc-algorithm=aes-256 \
  dh-group=modp2048 \
  nat-traversal=yes \
  dpd-interval=30s

# Proposal (Phase 2)
/ip/ipsec/proposal/add name=ikev2-client-proposal \
  auth-algorithms=sha256 \
  enc-algorithms=aes-256-cbc \
  pfs-group=modp2048

# Peer (VPN-сервер)
/ip/ipsec/peer/add name=hq-vpn \
  address=203.0.113.80 \
  exchange-mode=ike2 \
  profile=ikev2-client-profile \
  send-initial-contact=yes

# Identity (аутентификация)
/ip/ipsec/identity/add peer=hq-vpn \
  auth-method=pre-shared-key \
  secret="VeryStr0ngPSK!Key"

# Policy (какой трафик шифровать)
/ip/ipsec/policy/add peer=hq-vpn \
  src-address=192.168.88.0/24 \
  dst-address=172.16.0.0/16 \
  tunnel=yes \
  sa-src-address=203.0.113.1 \
  sa-dst-address=203.0.113.80 \
  proposal=ikev2-client-proposal \
  action=encrypt
/ip/ipsec/mode-config/add name=request-only \
  responder=no

/ip/ipsec/identity/set [find where peer=hq-vpn] \
  mode-config=request-only \
  generate-policy=port-strict
# Вариант 1: add-default-route в настройках клиента
/interface/l2tp-client/set l2tp-vpn add-default-route=yes

# Вариант 2: ручной маршрут с меньшей дистанцией
/ip/route/add dst-address=0.0.0.0/0 gateway=l2tp-vpn distance=1

# Вариант 3: два маршрута /1 (не конфликтуют с дефолтным)
/ip/route/add dst-address=0.0.0.0/1 gateway=wg-vpn
/ip/route/add dst-address=128.0.0.0/1 gateway=wg-vpn
/ip/route/add dst-address=198.51.100.1/32 gateway=192.168.1.1 \
  comment="VPN server endpoint via ISP"
# Корпоративные сети через VPN
/ip/route/add dst-address=172.16.0.0/12 gateway=wg-vpn
/ip/route/add dst-address=192.168.0.0/16 gateway=wg-vpn
/routing/table/add name=via-vpn fib
# Трафик от конкретного устройства (по IP)
/ip/firewall/mangle/add chain=prerouting \
  src-address=192.168.88.50 \
  action=mark-routing new-routing-mark=via-vpn \
  passthrough=yes \
  comment="Smart TV via VPN"

# Трафик от нескольких устройств (по address list)
/ip/firewall/address-list/add list=vpn-devices address=192.168.88.50 \
  comment="Smart TV"
/ip/firewall/address-list/add list=vpn-devices address=192.168.88.51 \
  comment="Work laptop"
/ip/firewall/address-list/add list=vpn-devices address=192.168.88.52 \
  comment="Gaming console"

/ip/firewall/mangle/add chain=prerouting \
  src-address-list=vpn-devices \
  action=mark-routing new-routing-mark=via-vpn \
  passthrough=yes \
  comment="Devices via VPN"
/ip/route/add dst-address=0.0.0.0/0 gateway=wg-vpn \
  routing-table=via-vpn \
  comment="Default route for VPN devices"
/ip/firewall/nat/add chain=srcnat \
  routing-mark=via-vpn \
  out-interface=wg-vpn \
  action=masquerade \
  comment="NAT for VPN devices"
# Запрещаем маркированному трафику выходить не через VPN
/ip/firewall/filter/add chain=forward \
  routing-mark=via-vpn \
  out-interface=!wg-vpn \
  action=drop \
  comment="Kill switch for VPN devices"
# DNS-серверы VPN-провайдера
/ip/dns/set servers=10.10.10.1 allow-remote-requests=yes

# Или публичные DNS, но через VPN
/ip/dns/set servers=1.1.1.1,8.8.8.8

# Перехват DNS-запросов (если клиенты используют свои DNS)
/ip/firewall/nat/add chain=dstnat protocol=udp dst-port=53 \
  src-address=192.168.88.0/24 dst-address=!10.10.10.1 \
  action=redirect to-ports=53 \
  comment="Redirect DNS to MikroTik"
# WireGuard
/interface/wireguard/print
/interface/wireguard/peers/print detail
# Поле last-handshake должно обновляться каждые ~2 минуты

# L2TP
/interface/l2tp-client/print
/interface/l2tp-client/monitor l2tp-vpn once

# OpenVPN
/interface/ovpn-client/print
/interface/ovpn-client/monitor ovpn-vpn once

# SSTP
/interface/sstp-client/print
/interface/sstp-client/monitor sstp-vpn once

# IPsec
/ip/ipsec/active-peers/print
/ip/ipsec/installed-sa/print
# Таблица маршрутов
/ip/route/print where gateway~"wg-vpn\\|l2tp-vpn\\|ovpn-vpn\\|sstp-vpn"

# Трассировка через VPN
/tool/traceroute address=8.8.8.8

# Проверка, через какой интерфейс идёт трафик
/ip/route/print where dst-address=0.0.0.0/0
# Проверяем, что mangle маркирует трафик
/ip/firewall/mangle/print stats where comment~"VPN"

# Проверяем маршруты в VPN routing table
/ip/route/print where routing-table=via-vpn

# Трассировка от имени конкретного устройства
# (не работает напрямую, но можно проверить через:)
/ip/firewall/mangle/print stats
# Счётчик packets должен расти для маркирующих правил
# Bandwidth test через VPN (если на другой стороне есть MikroTik)
/tool/bandwidth-test address=10.10.10.1 protocol=tcp duration=10s

# Или через iperf3 на сервере
# На сервере: iperf3 -s
# На MikroTik: /tool/fetch url="http://10.10.10.1:5201" (грубая оценка)
# Исключаем VPN-трафик из masquerade
/ip/firewall/nat/add chain=srcnat \
  dst-address=172.16.0.0/12 \
  out-interface=wg-vpn \
  action=accept \
  comment="No NAT for VPN split tunnel" \
  place-before=0

# Или точнее — accept перед masquerade для VPN-интерфейса
/ip/firewall/nat/print
# Убедитесь, что accept-правило стоит ПЕРЕД masquerade
# Устанавливаем DNS через VPN
/ip/dns/set servers=10.10.10.1

# Отключаем получение DNS от провайдера
/ip/dhcp-client/set [find] use-peer-dns=no

# Перенаправляем все DNS-запросы клиентов на MikroTik
/ip/firewall/nat/add chain=dstnat protocol=udp dst-port=53 \
  src-address=192.168.88.0/24 action=redirect to-ports=53 \
  comment="Force DNS through MikroTik"
/ip/firewall/nat/add chain=dstnat protocol=tcp dst-port=53 \
  src-address=192.168.88.0/24 action=redirect to-ports=53 \
  comment="Force DNS through MikroTik"
# Уменьшаем MTU на VPN-интерфейсе
/interface/wireguard/set wg-vpn mtu=1420

# Или для L2TP
/interface/l2tp-client/set l2tp-vpn max-mtu=1400 max-mru=1400

# MSS Clamping (самый надёжный метод)
/ip/firewall/mangle/add chain=forward protocol=tcp \
  out-interface=wg-vpn tcp-flags=syn \
  action=change-mss new-mss=clamp-to-pmtu \
  comment="MSS clamp for VPN"

/ip/firewall/mangle/add chain=forward protocol=tcp \
  in-interface=wg-vpn tcp-flags=syn \
  action=change-mss new-mss=clamp-to-pmtu \
  comment="MSS clamp for VPN"
/ping address=8.8.8.8 size=1472 do-not-fragment interface=wg-vpn
# Если packet too large — уменьшайте size, пока ping не пройдёт
# MTU = size + 28 (IP + ICMP headers)
# 1. Проверяем маршруты
/ip/route/print where gateway~"vpn"
# Должен быть хотя бы один маршрут через VPN-интерфейс

# 2. Проверяем firewall forward
/ip/firewall/filter/print where chain=forward
# Должно быть разрешение для трафика через VPN

# Добавляем, если нет
/ip/firewall/filter/add chain=forward out-interface=wg-vpn action=accept \
  comment="Allow forward to VPN" place-before=0
/ip/firewall/filter/add chain=forward in-interface=wg-vpn action=accept \
  comment="Allow forward from VPN" place-before=0

# 3. Проверяем NAT
/ip/firewall/nat/print where chain=srcnat
# Должен быть masquerade для VPN-трафика, если удалённая сеть не знает
# обратный маршрут в вашу LAN
# Проверяем peer
/interface/wireguard/peers/print detail where interface=wg-vpn
# public-key должен совпадать с ключом сервера
# endpoint-address и endpoint-port должны быть правильными

# Проверяем доступность endpoint
/ping address=198.51.100.1 count=4

# Проверяем, что UDP-порт не блокируется
/tool/traceroute address=198.51.100.1 protocol=udp port=51820
# Проверяем, что IPsec NAT-T работает
/ip/ipsec/installed-sa/print
# Если пуст — IPsec не устанавливается

# Увеличиваем таймаут
/interface/l2tp-client/set l2tp-vpn max-retries=10
# Mangle должен быть в chain=prerouting (НЕ forward, НЕ output)
/ip/firewall/mangle/print where action=mark-routing

# Проверяем, что routing table существует
/routing/table/print

# Проверяем маршрут в VPN routing table
/ip/route/print where routing-table=via-vpn
# Должен быть маршрут 0.0.0.0/0 через VPN-интерфейс

# Проверяем счётчики mangle
/ip/firewall/mangle/print stats
# Если packets=0 — правило не срабатывает, проверьте src-address
# Netwatch — мониторит IP через VPN и переподключает при падении
/tool/netwatch/add host=10.10.10.1 interval=30s \
  type=icmp timeout=3s \
  down-script="/interface/wireguard/peers/disable [find where interface=wg-vpn]; :delay 5s; /interface/wireguard/peers/enable [find where interface=wg-vpn]" \
  comment="WireGuard VPN health check"
VPN / VPN-клиент на MikroTik — подключение к серверу