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

OpenVPN на MikroTik — настройка site-to-site VPN

RouterOS 7.xVPN8 мин230 мар. 2026 г.
TelegramVK

OpenVPN — один из самых распространённых VPN-протоколов в мире. MikroTik RouterOS поддерживает OpenVPN начиная с версии 3.x, однако реализация имеет ряд ограничений по сравнению с полноценным OpenVPN Community. В этом руководстве разберём, когда стоит использовать OpenVPN на MikroTik, как создать сертификаты, настроить сервер и клиент, организовать site-to-site VPN и обеспечить корректную маршрутизацию.

Описание

Когда использовать OpenVPN на MikroTik

OpenVPN на MikroTik целесообразен в следующих сценариях:

  • Совместимость с третьими сторонами — когда удалённая сторона использует OpenVPN на Linux/Windows/pfSense и не может перейти на WireGuard или L2TP
  • Проход через строгие файрволы — OpenVPN работает по TCP 443, что позволяет маскировать VPN-трафик под HTTPS
  • Интеграция с существующей PKI-инфраструктурой — если в компании уже развёрнут центр сертификации

Ограничения реализации в RouterOS

Прежде чем начинать настройку, важно знать о существенных ограничениях:

ОграничениеОписание
Только TCPRouterOS не поддерживает UDP-транспорт для OpenVPN. Это увеличивает latency и снижает производительность из-за эффекта «TCP over TCP»
Нет LZO/LZ4 сжатияСжатие трафика не поддерживается, что увеличивает объём передаваемых данных
Нет TLS-authДополнительный уровень защиты HMAC недоступен
Только tun (Layer 3)Режим tap (Layer 2 bridging) не поддерживается начиная с RouterOS 7
Ограниченные cipherПоддерживаются AES-128-CBC, AES-192-CBC, AES-256-CBC, AES-128-GCM, AES-256-GCM
Один порт на серверНельзя запустить несколько серверов на разных портах без обходных решений

Если обе стороны — MikroTik, рассмотрите WireGuard или IPsec как более производительные альтернативы. OpenVPN оправдан при необходимости совместимости с третьими устройствами.

Схема сети

В нашем примере мы соединяем два офиса:

  • Офис A (сервер): WAN 203.0.113.10, LAN 192.168.10.0/24
  • Офис B (клиент): WAN 198.51.100.20, LAN 192.168.20.0/24
  • Туннель: 10.10.10.0/24 (сервер — 10.10.10.1, клиент — 10.10.10.2)

Настройка

Шаг 1: Создание сертификатов

OpenVPN требует PKI-инфраструктуру: корневой сертификат CA, сертификат сервера и сертификат клиента. Все сертификаты создаём на сервере (Офис A).

Создание корневого CA:

[admin@MikroTik] >
/certificate add name=ca-template common-name=ovpn-ca \
  key-size=2048 days-valid=3650 key-usage=key-cert-sign,crl-sign

/certificate sign ca-template ca-crl-host=203.0.113.10

Дождитесь завершения подписания — статус должен измениться на signed. Проверить можно командой:

[admin@MikroTik] >
/certificate print detail where name=ca-template

В поле status должно быть значение, содержащее флаг trusted. Если нет — назначьте вручную:

[admin@MikroTik] >
/certificate set ca-template trusted=yes

Создание сертификата сервера:

[admin@MikroTik] >
/certificate add name=server-template common-name=ovpn-server \
  key-size=2048 days-valid=1825 key-usage=digital-signature,key-encipherment,tls-server

/certificate sign server-template ca=ca-template

Создание сертификата клиента:

[admin@MikroTik] >
/certificate add name=client-template common-name=ovpn-client \
  key-size=2048 days-valid=1825 key-usage=tls-client

/certificate sign client-template ca=ca-template

Экспорт сертификатов для клиента:

Клиенту потребуются: CA-сертификат, клиентский сертификат и клиентский ключ.

[admin@MikroTik] >
/certificate export-certificate ca-template file-name=ca-cert
/certificate export-certificate client-template file-name=client-cert export-passphrase="SecurePass123"

Файлы появятся в /file. Перенесите их на клиентский MikroTik через FTP, SFTP или drag-and-drop в Winbox.

Шаг 2: Импорт сертификатов на клиенте

На маршрутизаторе Офиса B выполните импорт:

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

Проверьте, что сертификаты импортированы:

[admin@MikroTik] >
/certificate print

Убедитесь, что CA-сертификат помечен как trusted:

[admin@MikroTik] >
/certificate set [find common-name=ovpn-ca] trusted=yes

Шаг 3: Создание пользователя для аутентификации

OpenVPN на MikroTik использует двойную аутентификацию: сертификаты + логин/пароль. Создаём PPP-профиль и пользователя на сервере.

Профиль:

[admin@MikroTik] >
/ppp profile add name=ovpn-site-to-site \
  local-address=10.10.10.1 \
  remote-address=10.10.10.2 \
  dns-server=10.10.10.1 \
  use-encryption=required

Пользователь (secret):

[admin@MikroTik] >
/ppp secret add name=office-b password="VPNpassw0rd!" \
  service=ovpn profile=ovpn-site-to-site

Шаг 4: Настройка OVPN-сервера

Включаем сервер OpenVPN на Офисе A:

[admin@MikroTik] >
/interface ovpn-server server set enabled=yes \
  port=1194 \
  mode=ip \
  protocol=tcp \
  certificate=server-template \
  require-client-certificate=yes \
  auth=sha256 \
  cipher=aes256-cbc,aes256-gcm \
  default-profile=ovpn-site-to-site \
  tls-version=only-1.2

Параметры:

ПараметрЗначениеОписание
port1194Стандартный порт OpenVPN
modeipLayer 3 туннель (tun)
protocoltcpЕдинственный поддерживаемый транспорт
cipheraes256-cbc,aes256-gcmШифрование — GCM предпочтительнее
authsha256Алгоритм аутентификации HMAC
tls-versiononly-1.2Минимальная версия TLS
require-client-certificateyesОбязательная проверка клиентского сертификата

Шаг 5: Настройка OVPN-клиента

На маршрутизаторе Офиса B создаём клиентский интерфейс:

[admin@MikroTik] >
/interface ovpn-client add name=ovpn-to-office-a \
  connect-to=203.0.113.10 \
  port=1194 \
  mode=ip \
  protocol=tcp \
  certificate=client-cert.crt_0 \
  auth=sha256 \
  cipher=aes256-cbc,aes256-gcm \
  tls-version=only-1.2 \
  user=office-b \
  password="VPNpassw0rd!" \
  add-default-route=no \
  disabled=no

Обратите внимание: имя сертификата после импорта может отличаться от имени файла. Проверьте точное имя через /certificate print.

Шаг 6: Маршрутизация

Для прохождения трафика между офисными сетями необходимы статические маршруты.

На сервере (Офис A):

[admin@MikroTik] >
/ip route add dst-address=192.168.20.0/24 gateway=10.10.10.2 \
  comment="Route to Office B via OpenVPN"

На клиенте (Офис B):

[admin@MikroTik] >
/ip route add dst-address=192.168.10.0/24 gateway=ovpn-to-office-a \
  comment="Route to Office A via OpenVPN"

Шаг 7: Настройка Firewall

Откройте порт для входящих подключений на сервере и разрешите транзит трафика через туннель.

На сервере (Офис A):

[admin@MikroTik] >
# Разрешить входящие подключения OpenVPN
/ip firewall filter add chain=input protocol=tcp dst-port=1194 \
  action=accept comment="Allow OpenVPN" place-before=0

# Разрешить forward через туннель
/ip firewall filter add chain=forward in-interface=<ovpn-server-binding> \
  action=accept comment="Allow OpenVPN forward in" place-before=0

/ip firewall filter add chain=forward out-interface=<ovpn-server-binding> \
  action=accept comment="Allow OpenVPN forward out" place-before=0

Имя серверного интерфейса привязки (binding) создаётся автоматически при подключении клиента. Его можно увидеть в /interface print после установки соединения. Для упрощения правил используйте interface list:

[admin@MikroTik] >
/interface list add name=ovpn-tunnels
/interface list member add list=ovpn-tunnels interface=<ovpn-server-binding>

/ip firewall filter add chain=forward \
  in-interface-list=ovpn-tunnels action=accept \
  comment="Allow forward from OpenVPN" place-before=0

/ip firewall filter add chain=forward \
  out-interface-list=ovpn-tunnels action=accept \
  comment="Allow forward to OpenVPN" place-before=0

На клиенте (Офис B):

[admin@MikroTik] >
/ip firewall filter add chain=forward in-interface=ovpn-to-office-a \
  action=accept comment="Allow OpenVPN forward in" place-before=0

/ip firewall filter add chain=forward out-interface=ovpn-to-office-a \
  action=accept comment="Allow OpenVPN forward out" place-before=0

Также убедитесь, что на обоих маршрутизаторах трафик между LAN и VPN не попадает под masquerade. Если у вас есть правило NAT для всего исходящего трафика, добавьте исключение:

[admin@MikroTik] >
/ip firewall nat add chain=srcnat \
  src-address=192.168.10.0/24 dst-address=192.168.20.0/24 \
  action=accept place-before=0 comment="No NAT for VPN traffic"

Проверка

Проверка статуса соединения

На сервере проверяем активные подключения:

[admin@MikroTik] >
/interface ovpn-server print

На клиенте проверяем статус интерфейса:

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

/interface ovpn-client monitor ovpn-to-office-a

Проверка маршрутов

[admin@MikroTik] >
/ip route print where gateway=10.10.10.2
/ip route print where gateway=ovpn-to-office-a

Тестирование связности

С сервера (Офис A):

[admin@MikroTik] >
# Ping клиентский адрес туннеля
/ping 10.10.10.2 count=5

# Ping хост в удалённой LAN
/ping 192.168.20.1 count=5 src-address=192.168.10.1

С клиента (Офис B):

[admin@MikroTik] >
/ping 10.10.10.1 count=5
/ping 192.168.10.1 count=5 src-address=192.168.20.1

Мониторинг трафика

[admin@MikroTik] >
/interface monitor-traffic ovpn-to-office-a once

Просмотр логов

Для диагностики включите логирование OpenVPN:

[admin@MikroTik] >
/system logging add topics=ovpn,debug action=memory
/log print where topics~"ovpn"

После завершения диагностики отключите debug-логирование:

[admin@MikroTik] >
/system logging remove [find where topics~"ovpn" && action=memory]

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

1. Ошибка «TLS handshake failed»

Причина: несовпадение сертификатов или CA не помечен как trusted.

Решение:

[admin@MikroTik] >
# Убедитесь, что CA-сертификат trusted на обеих сторонах
/certificate print detail where common-name=ovpn-ca
# Если нет флага trusted:
/certificate set [find common-name=ovpn-ca] trusted=yes

Также проверьте, что на клиенте используется именно тот сертификат, который был подписан серверным CA.

2. Соединение устанавливается, но трафик не проходит

Причина: отсутствуют маршруты или файрвол блокирует forward.

Решение:

[admin@MikroTik] >
# Проверьте маршруты на обеих сторонах
/ip route print where dst-address=192.168.20.0/24

# Проверьте правила firewall — ищите drop для VPN-трафика
/ip firewall filter print where chain=forward

# Проверьте, нет ли NAT для VPN-трафика
/ip firewall nat print

3. Низкая производительность (TCP over TCP)

Причина: OpenVPN на MikroTik работает только по TCP. При передаче TCP-трафика через TCP-туннель возникает двойной контроль потока.

Решение: это архитектурное ограничение RouterOS. Варианты:

  • Увеличьте MTU/MSS туннеля для снижения накладных расходов
  • Рассмотрите переход на WireGuard или IPsec для site-to-site сценария
  • Для существующих настроек уменьшите TCP window size:
[admin@MikroTik] >
/ip firewall mangle add chain=forward \
  protocol=tcp out-interface=<ovpn-interface> \
  action=change-mss new-mss=1360 \
  tcp-flags=syn passthrough=yes

4. Ошибка «certificate is not yet valid» или «certificate expired»

Причина: некорректное системное время на одном из маршрутизаторов.

Решение:

[admin@MikroTik] >
# Проверьте время
/system clock print

# Настройте NTP-клиент
/system ntp client set enabled=yes
/system ntp client servers add address=pool.ntp.org

5. Клиент подключается, но получает неверный IP

Причина: некорректный PPP-профиль или конфликт адресов.

Решение:

[admin@MikroTik] >
# Проверьте профиль
/ppp profile print where name=ovpn-site-to-site

# Проверьте secret
/ppp secret print where name=office-b

# Убедитесь, что адреса 10.10.10.1 и 10.10.10.2 не используются другими интерфейсами
/ip address print where address~"10.10.10"

6. Невозможно подключиться с стороннего OpenVPN-клиента

При подключении клиента на Linux/Windows убедитесь, что конфигурационный файл .ovpn соответствует параметрам сервера:

code
client
dev tun
proto tcp
remote 203.0.113.10 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca-cert.crt
cert client-cert.crt
key client-cert.key
cipher AES-256-CBC
auth SHA256
tls-version-min 1.2
auth-user-pass
verb 3

Обратите внимание: параметр comp-lzo не должен быть указан, так как MikroTik не поддерживает сжатие. Параметр auth-user-pass необходим, так как MikroTik требует логин/пароль помимо сертификатов.

Рекомендации по безопасности

  1. Используйте AES-256-GCM вместо CBC — он быстрее и безопаснее
  2. Регулярно обновляйте сертификаты — не создавайте их с бесконечным сроком действия
  3. Ограничьте доступ по src-address в правилах файрвола, если IP клиента статический
  4. Мониторьте активные сессии через /ppp active print
  5. Используйте отдельный PPP-профиль для каждого типа подключения (site-to-site, remote access)
[admin@MikroTik] >
# Мониторинг активных VPN-сессий
/ppp active print

# Принудительное отключение клиента
/ppp active remove [find name=office-b]

OpenVPN на MikroTik — надёжное решение для совместимости с оборудованием третьих производителей. Однако для новых site-to-site инсталляций между устройствами MikroTik рассмотрите WireGuard (проще настройка, выше производительность) или IPsec IKEv2 (стандарт индустрии, аппаратное ускорение на многих моделях).

[admin@MikroTik] >
/certificate add name=ca-template common-name=ovpn-ca \
  key-size=2048 days-valid=3650 key-usage=key-cert-sign,crl-sign

/certificate sign ca-template ca-crl-host=203.0.113.10
/certificate print detail where name=ca-template
/certificate set ca-template trusted=yes
/certificate add name=server-template common-name=ovpn-server \
  key-size=2048 days-valid=1825 key-usage=digital-signature,key-encipherment,tls-server

/certificate sign server-template ca=ca-template
/certificate add name=client-template common-name=ovpn-client \
  key-size=2048 days-valid=1825 key-usage=tls-client

/certificate sign client-template ca=ca-template
/certificate export-certificate ca-template file-name=ca-cert
/certificate export-certificate client-template file-name=client-cert export-passphrase="SecurePass123"
/certificate import file-name=ca-cert.crt passphrase=""
/certificate import file-name=client-cert.crt passphrase="SecurePass123"
/certificate import file-name=client-cert.key passphrase="SecurePass123"
/certificate print
/certificate set [find common-name=ovpn-ca] trusted=yes
/ppp profile add name=ovpn-site-to-site \
  local-address=10.10.10.1 \
  remote-address=10.10.10.2 \
  dns-server=10.10.10.1 \
  use-encryption=required
/ppp secret add name=office-b password="VPNpassw0rd!" \
  service=ovpn profile=ovpn-site-to-site
/interface ovpn-server server set enabled=yes \
  port=1194 \
  mode=ip \
  protocol=tcp \
  certificate=server-template \
  require-client-certificate=yes \
  auth=sha256 \
  cipher=aes256-cbc,aes256-gcm \
  default-profile=ovpn-site-to-site \
  tls-version=only-1.2
/interface ovpn-client add name=ovpn-to-office-a \
  connect-to=203.0.113.10 \
  port=1194 \
  mode=ip \
  protocol=tcp \
  certificate=client-cert.crt_0 \
  auth=sha256 \
  cipher=aes256-cbc,aes256-gcm \
  tls-version=only-1.2 \
  user=office-b \
  password="VPNpassw0rd!" \
  add-default-route=no \
  disabled=no
/ip route add dst-address=192.168.20.0/24 gateway=10.10.10.2 \
  comment="Route to Office B via OpenVPN"
/ip route add dst-address=192.168.10.0/24 gateway=ovpn-to-office-a \
  comment="Route to Office A via OpenVPN"
# Разрешить входящие подключения OpenVPN
/ip firewall filter add chain=input protocol=tcp dst-port=1194 \
  action=accept comment="Allow OpenVPN" place-before=0

# Разрешить forward через туннель
/ip firewall filter add chain=forward in-interface=<ovpn-server-binding> \
  action=accept comment="Allow OpenVPN forward in" place-before=0

/ip firewall filter add chain=forward out-interface=<ovpn-server-binding> \
  action=accept comment="Allow OpenVPN forward out" place-before=0
/interface list add name=ovpn-tunnels
/interface list member add list=ovpn-tunnels interface=<ovpn-server-binding>

/ip firewall filter add chain=forward \
  in-interface-list=ovpn-tunnels action=accept \
  comment="Allow forward from OpenVPN" place-before=0

/ip firewall filter add chain=forward \
  out-interface-list=ovpn-tunnels action=accept \
  comment="Allow forward to OpenVPN" place-before=0
/ip firewall filter add chain=forward in-interface=ovpn-to-office-a \
  action=accept comment="Allow OpenVPN forward in" place-before=0

/ip firewall filter add chain=forward out-interface=ovpn-to-office-a \
  action=accept comment="Allow OpenVPN forward out" place-before=0
/ip firewall nat add chain=srcnat \
  src-address=192.168.10.0/24 dst-address=192.168.20.0/24 \
  action=accept place-before=0 comment="No NAT for VPN traffic"
/interface ovpn-server print
/interface ovpn-client print
# Поле "status" должно быть "connected"

/interface ovpn-client monitor ovpn-to-office-a
/ip route print where gateway=10.10.10.2
/ip route print where gateway=ovpn-to-office-a
# Ping клиентский адрес туннеля
/ping 10.10.10.2 count=5

# Ping хост в удалённой LAN
/ping 192.168.20.1 count=5 src-address=192.168.10.1
/ping 10.10.10.1 count=5
/ping 192.168.10.1 count=5 src-address=192.168.20.1
/interface monitor-traffic ovpn-to-office-a once
/system logging add topics=ovpn,debug action=memory
/log print where topics~"ovpn"
/system logging remove [find where topics~"ovpn" && action=memory]
# Убедитесь, что CA-сертификат trusted на обеих сторонах
/certificate print detail where common-name=ovpn-ca
# Если нет флага trusted:
/certificate set [find common-name=ovpn-ca] trusted=yes
# Проверьте маршруты на обеих сторонах
/ip route print where dst-address=192.168.20.0/24

# Проверьте правила firewall — ищите drop для VPN-трафика
/ip firewall filter print where chain=forward

# Проверьте, нет ли NAT для VPN-трафика
/ip firewall nat print
/ip firewall mangle add chain=forward \
  protocol=tcp out-interface=<ovpn-interface> \
  action=change-mss new-mss=1360 \
  tcp-flags=syn passthrough=yes
# Проверьте время
/system clock print

# Настройте NTP-клиент
/system ntp client set enabled=yes
/system ntp client servers add address=pool.ntp.org
# Проверьте профиль
/ppp profile print where name=ovpn-site-to-site

# Проверьте secret
/ppp secret print where name=office-b

# Убедитесь, что адреса 10.10.10.1 и 10.10.10.2 не используются другими интерфейсами
/ip address print where address~"10.10.10"
client
dev tun
proto tcp
remote 203.0.113.10 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca-cert.crt
cert client-cert.crt
key client-cert.key
cipher AES-256-CBC
auth SHA256
tls-version-min 1.2
auth-user-pass
verb 3
# Мониторинг активных VPN-сессий
/ppp active print

# Принудительное отключение клиента
/ppp active remove [find name=office-b]
VPN / OpenVPN на MikroTik — настройка site-to-site VPN