Настройка OpenVPN-сервера в RouterOS 7.19.4 через WinBox v3.41
Подготовка сертификатов
- Открытие менеджера сертификатов. Запустите WinBox и перейдите в меню System → Certificates. В открывшемся окне Certificates будут отображаться текущие сертификаты (если их нет, список будет пуст).
- Создание сертификата Центра сертификации (CA). Необходимо создать собственный корневой сертификат, которым будут подписываться остальные.
- Нажмите кнопку Add New («+») для добавления нового сертификата. В окне New Certificate на вкладке General заполните поля Name (например, CA) и Common Name (например, CA). Остальные поля (Country, State, Organization и др.) можно оставить пустыми или заполнить при необходимости – они носят описательный характер.
- Перейдите на вкладку Key Usage и отметьте только пункты crl sign и key cert. sign (снимите остальные флажки). Эти флаги позволяют использовать сертификат в качестве удостоверяющего центра сертификации.
- Нажмите Apply, а затем Sign (подписать). В появившемся окне Sign Certificate убедитесь, что в выпадающем списке Certificate выбран созданный шаблон CA. Поле CA оставьте пустым – так сертификат подпишет сам себя, став корневым (self-signed CA). Нажмите кнопку Sign для завершения. Через несколько секунд в списке появится подписанный сертификат CA.
- Убедитесь, что у сертификата CA появился флаг T (Trusted). Если в колонке Trusted значение no, дважды кликните сертификат CA, установите флажок Trusted внизу вкладки General и нажмите OK. Это необходимо, чтобы роутер доверял своему собственному центру сертификации и мог проверять цепочку доверия клиентских сертификатов.
Вкладка Key Usage при создании шаблона CA: отмечены только флажки crl sign и key cert. sign. Эти параметры дают сертификату право подписывать другие сертификаты и формировать списки отзыва (CRL).
Создание серверного сертификата. Теперь создадим сертификат, который будет использовать сам VPN-сервер RouterOS.
- В окне Certificates снова нажмите Add New. На вкладке General задайте Name (например, server) и Common Name. В Common Name можно указать понятное имя, например vpn-server или доменное имя/внешний IP вашего роутера (это поле служит идентификатором, критичным требования к нему нет). Прочие поля заполните аналогично (Country, State и т.д. как в CA).
- На вкладке Key Usage отметьте digital signature, key encipherment и tls server, убрав остальные флажки. Таким образом, сертификат будет предназначен для участия в TLS-сервере (OpenVPN) – с возможностью цифровой подписи и шифрования ключа сессии.
-
Нажмите Apply и затем Sign. В окне Sign Certificate выберите в поле Certificate ваш шаблон server (если не выбран) и укажите CA = CA (наш ранее созданный корневой сертификат). Нажмите Sign – шаблон будет подписан центром CA. В списке появится новый сертификат сервера (ему автоматически присваивается флаг KT, указывающий что имеется приватный ключ и доверие, если CA доверен). Если флаг T у серверного сертификата не установлен, вы можете вручную отметить его Trusted.
Настройка Key Usage для серверного сертификата: отмечены digital signature, key encipherment и tls server. Такие флаги требуются для сертификата, используемого сервером OpenVPN.
Создание клиентских сертификатов. Для каждого клиента (для примера ограничимся 16) потребуется уникальный сертификат, подписанный нашим CA. В качестве примера создадим один и при необходимости повторим шаги.
- Нажмите Add New в Certificates. Во вкладке General задайте Name (например, client1) и Common Name (например, client1 – обычно уникальное имя клиента). Остальные поля при желании можно заполнить так же, как в CA, чтобы в сертификатах была единая информация издателя.
- На вкладке Key Usage отметьте tls client (только этот флажок; уберите остальные) – сертификат предназначается для удостоверения клиента VPN.
- Нажмите Apply и Sign. В окне Sign Certificate убедитесь, что Certificate = client1, а в поле CA выбран наш CA сертификат. Нажмите Sign. Через мгновение сертификат будет подписан и появится в списке (для клиентских сертификатов флаг T (Trusted) не обязательный и может оставаться no).
На данном этапе должно получится так:
-
Аналогично создайте сертификаты client2, client3, ... для всех VPN-пользователей (каждый с уникальным Common Name). Все клиентские сертификаты подписывайте тем же CA.
-
Экспорт сертификатов для клиентов. Чтобы настроить OpenVPN-клиенты, нужно экспортировать из RouterOS сертификат CA и сертификаты/ключи клиентов.
-
В окне Certificates выберите сертификат CA, щёлкните по нему правой кнопкой и выберите Export. В появившемся окне Export Certificate оставьте поле Export Passphrase пустым (без пароля) и нажмите Export. Это экспортирует только публичную часть CA-сертификата (файл cert_export_CA.crt появится в памяти роутера). Важно: приватный ключ CA экспортировать не нужно и нельзя – он должен храниться только на роутере.
-
Аналогично экспортируйте каждый клиентский сертификат. Выберите, например, client1, правой кнопкой – Export. В окне экспорта обязательно задайте пароль в поле Export Passphrase (например, VpnKey123 – используйте сложный пароль). Этот пароль нужен для шифрования приватного ключа клиента при экспорте. Нажмите Export – будут сгенерированы файлы cert_export_client1.crt (сертификат) и cert_export_client1.key (закрытый ключ) для клиента. Повторите для остальных клиентских сертификатов (меняя пароль или используя тот же – его придётся вводить при настройке клиента OpenVPN).
-
Файлы появятся в меню Files в WinBox. В списке файлов роутера вы увидите экспортированные файлы, например: cert_export_CA.crt, cert_export_client1.crt, cert_export_client1.key и т.д. Скачивать их не требуется. Они нужны для формирования файла конфигурации .ovpn
Рекомендация: после экспорта убедитесь, что на роутере время и дата настроены правильно. Сертификаты имеют срок действия и привязаны к времени создания; если время неверно, могут возникнуть проблемы с проверкой сертификатов. Рекомендуется настроить в RouterOS автоматику времени (System → Clock → приобрести точное время через NTP). Также, по соображениям безопасности, после настройки всех клиентов можно удалить экспортированные файлы с роутера (в меню Files и из Certificates, оставив сам подписанный сертификат в хранилище), чтобы приватные ключи не хранились в памяти устройства дольше необходимого.
Настройка OpenVPN-сервера на роутере
Создание пула IP-адресов для клиентов. Зададим диапазон адресов, которые будут динамически выдаваться VPN-клиентам (16 адресов, для примера).
-
В WinBox перейдите в меню IP → Pool и нажмите + для добавления пула.
-
В поле Name укажите, например, ovpn-pool.
-
В поле Addresses задайте диапазон адресов, не пересекающийся с вашей локальной сетью. Например: 10.8.0.2-10.8.0.17 – это позволит выдать до 16 адресов (от .2 до .17) клиентам, а адрес 10.8.0.1 мы оставим за сервером. (Вы можете использовать другой диапазон при необходимости, главное – уникальный подсеть для VPN. Диапазон может быть больше, но указан с запасом на 16 клиентов.)
-
Нажмите OK, новый пул появится в списке.
Создание профиля PPP для OpenVPN. Профиль определяет параметры соединения, которые будут применяться к подключаемым клиентам (локальный адрес сервера, удалённые адреса из пула, DNS и пр.).
-
Откройте меню PPP. Перейдите на вкладку Profiles и нажмите + (Add New).
-
Задайте Name профиля, например ovpn-profile.
-
В поле Local Address укажите 10.8.0.1 – это адрес самого роутера в VPN-сети (он будет шлюзом для клиентов). Мы выбрали первый адрес из подсети VPN.
-
В поле Remote Address выберите из списка созданный пул ovpn-pool. Это укажет серверу выдавать клиентам адреса из данного пула динамически.
-
(Опционально) В поле DNS Server пропишите адрес DNS-сервера, который будут использовать клиенты VPN. Можно указать адрес самого роутера в LAN (если на нём настроен DNS для клиентов) либо публичный DNS, например 8.8.8.8. Это необходимо для корректной работы DNS-запросов через полный туннель.
-
Убедитесь, что параметр Use Encryption установлен в yes (шифрование трафика обязательно для OpenVPN).
-
Остальные параметры профиля оставьте по умолчанию (при необходимости можно настроить bridge или routes, но в нашем случае не требуется). Нажмите OK для сохранения профиля.
Создание пользователей (PPP Secrets) для VPN-клиентов. Для каждого клиента зададим логин/пароль, по которым он будет проходить аутентификацию.
-
В том же меню PPP, перейдите на вкладку Secrets и нажмите + (Add New).
-
В поле Name введите имя пользователя, например client1 (соответствует имени сертификата, хотя это не обязательно – для удобства лучше совпадение).
-
В поле Password задайте пароль для этого пользователя (придумайте сложный пароль или фразу).
-
Поле Service выберите ovpn (OpenVPN) – это ограничит действие учетной записи только на сервис OpenVPN (так безопаснее, не позволит использовать этот логин для PPTP/L2TP и т.п.).
-
Поле Profile выберите ovpn-profile (наш созданный профиль). Благодаря этому при подключении данного пользователя будут применены настройки IP-адреса из пула, DNS и пр. из профиля.
-
Остальное можно оставить по умолчанию. При желании заполните Comment (например, чтобы указать имя сотрудника или устройства, которому соответствует этот VPN-пользователь). Нажмите OK.
-
Создайте таким образом учетные записи для всех необходимых клиентов (client2, client3, ...), каждому задайте свой пароль. Максимум 16 пользователей может одновременно подключаться в рамках нашего пула адресов. (Вы можете создать и больше пользователей, но одновременно активными могут быть только 16, если адресов больше не заложено.)
Включение и настройка OpenVPN-сервера. Теперь подготовим сам сервис OpenVPN на роутере и укажем ему использовать созданные сертификаты и профиль.
-
В WinBox откройте меню PPP и перейдите на вкладку OVPN Servers. Нажмите кнопку add new (“+”). Если такой кнопки нет, убедитесь, что используете WinBox v7+; в RouterOS 7.19 сервер OpenVPN настраивается через этот раздел PPP.
-
Поле Port оставьте 1194 – это порт по умолчанию для OpenVPN. (Можно указать другой при необходимости – убедитесь тогда, что используемый порт открыт провайдером. В нашем примере оставляем 1194/TCP.)
-
Поле Mode выберите ip (режим туннелирования L3 – tun). Режим ethernet (tap) здесь не требуется, так как мы будем маршрутизировать трафик, а не мостить сети. Убедитесь, что стоит ip (tun).
-
Поле Protocol выберите tcp (Transmission Control Protocol). По умолчанию RouterOS использует TCP для OpenVPN, но проверьте, что выставлен именно tcp, а не udp (RouterOS 7.x поддерживает и UDP, но в задаче требуется TCP).
-
Поле Default Profile выберите ovpn-profile (наш профиль из шага 2). Это свяжет настройки сервера с параметрами профиля: при подключении любого нового клиента, если у его учетной записи не указан иной профиль, будут применены адреса из ovpn-profile.
-
В выпадающем списке Certificate выберите ваш созданный серверный сертификат (например, server). Теперь OpenVPN-сервер будет использовать этот сертификат для TLS-шифрования.
-
Установите флажок Require Client Certificate (требовать клиентский сертификат). Это означает, что помимо имени/пароля сервер будет запрашивать у клиента сертификат и проверять, что он подписан нашим доверенным CA. (Этот параметр должен быть включен, так как мы настроили клиентские сертификаты).
-
Перейдите на вкладку Authentication (Auth). Оставьте включенным только алгоритм SHA1 для аутентификации HMAC (снимите галочки с менее безопасного MD5, а также можете отключить лишние SHA256/512 если они там отмечены, чтобы сузить список). В RouterOS по умолчанию могли быть отмечены несколько алгоритмов (MD5, SHA1, SHA256, SHA512); рекомендуется отключить MD5 из соображений безопасности. В нашем примере оставляем sha1.
-
Перейдите на вкладку Cipher (шифр). Оставьте AES-256 (aes256) как единственный шифр для шифрования трафика, убрав галочки с других (например, aes128, blowfish). AES-256-CBC – современный надежный шифр, поддерживаемый OpenVPN-клиентами.
-
Установите параметр Redirect Gateway = yes (def1). Эта опция отвечает за проксирование всего трафика клиента через VPN (на Mikrotik она обозначается как redirect-gateway=def1). В WinBox может быть чекбокс или выпадающий список для Redirect Gateway – выберите вариант, включающий def1. Благодаря этому сервер будет сообщать клиенту маршрут по умолчанию через VPN (Full Tunnel).
-
Нажмите Apply для применения настроек. OpenVPN-сервер запущен и слушает TCP-порт 1194 на вашем роутере (интерфейс по умолчанию будет создан как ovpn-server или подобный, а для каждого клиента при подключении будет появляться динамический интерфейс ovpn…).
-
Нажмите Export .ovpn, в поле Server Public Address (IP or DNS) укажите внешний IP адрес или доменное имя, в поле CA Certificate выберите ранее экспортированный сертификат CA: cert_export_CA.crt, в поле Client Certificate – клиентский сертификат: cert_export_client1.crt, В поле Client Certificate Key – ключ, (файл будет, только если вы задавали кодовую фразу при экспорте клиентского сертификата): cert_export_client1.key
-
-
Файл конфигурации появятся в меню Files в WinBox, скачайте его нажав на Download, его нужно импортировать в клиент OpenVPN при подключении к серверу.
-
Настройка firewall для VPN. По умолчанию в RouterOS действует фильтрация: трафик с WAN в роутер и между локальными сетями может блокироваться. Нужно открыть порт OpenVPN и разрешить обмен между VPN и LAN.
-
Перейдите в IP → Firewall → Filter Rules. На вкладке Filter Rules добавьте правило для разрешения входящих подключений OpenVPN: нажмите +, на вкладке General выберите Chain = input (входящие в сам роутер), Protocol = tcp, Dst. Port = 1194. Установите In. Interface = ваш внешний интерфейс (например, ether3, WAN) – так правило сработает только для соединений, приходящих на WAN. Перейдите на вкладку Action и выберите Action = accept. В поле Comment укажите описание, например "Allow OpenVPN". Нажмите OK. Новое правило появится в списке. Переместите его выше любых правил, блокирующих входящий трафик с WAN (обычно есть правило drop на input для !LAN) – иначе VPN-подключения будут отвергаться фаерволом.
Пример настройки правила firewall для допуска OpenVPN-соединений: цепочка input, протокол tcp, порт 1194, действие accept. Это правило должно быть расположено выше дефолтного drop для входящего трафика извне, чтобы порт 1194 был доступен извне.
Разрешение доступа VPN-клиентов в локальную сеть. Чтобы устройства в VPN могли общаться с вашей LAN (сетью bridge1), добавим правило в цепочке forward. Во вкладке Filter Rules нажмите +. На General задайте Chain = forward (трафик через роутер), Src. Address = 10.8.0.0/24 (ваш VPN-пул или сеть VPN), Dst. Address = подсеть локальной сети (например, 192.168.88.0/24, если bridge1 – это 192.168.88.0 сеть по умолчанию; замените на вашу реальную подсеть локальной сети). Это правило позволит VPN-клиентам инициировать соединения к LAN. На вкладке Action выберите accept. Добавьте Comment, например "VPN to LAN". Нажмите OK. Разместите это правило выше общего правила drop в forward (например, выше "drop all not coming from LAN"). Теперь трафик из VPN-сети сможет пройти в локальную. Благодаря stateful-фильтрации ответные пакеты с LAN к VPN будут автоматически разрешены (как established), если у вас есть правило accept established/related.
(Опционально) Если требуется инициировать соединение с LAN на VPN. Обычно VPN-клиенты сами обращаются к ресурсам LAN, но если необходимо, чтобы устройства LAN могли сами обращаться к VPN-клиентам (например, удаленное управление клиентским ПК), нужно дополнительно разрешить исходящие из LAN в VPN соединения. Создайте ещё одно правило: Chain = forward, Src. Address = подсеть LAN (например, 192.168.88.0/24), Dst. Address = 10.8.0.0/24 (VPN-сеть), Action = accept. Это позволит узлам LAN инициировать связь с VPN-адресами. Расположите правило рядом с предыдущим. (Если таких требований нет, можно пропустить — большинство сценариев обходятся односторонним доступом VPN→LAN).
Разрешение доступа VPN-клиентов в интернет (NAT). Поскольку туннель у нас полный, VPN-клиентам для выхода в интернет потребуется маскарадинг (NAT) на роутере. Если у вас уже есть в IP → Firewall → NAT правило маскарада по выходному интерфейсу WAN (например, дефолтное chain=srcnat out-interface-list=WAN action=masquerade), то дополнительно ничего делать не нужно – трафик из VPN-сети будет подпадать под него (при условии, что интерфейс ether3 включен в WAN list, либо добавьте ovpn интерфейс в WAN list). Если же общего правила нет, добавьте новое: вкладка General – Chain = srcnat, Src. Address = 10.8.0.0/24 (VPN-сеть), Out. Interface = ether3 (WAN-интерфейс). Вкладка Action – Action = masquerade. Комментарий "Masquerade VPN". Сохраните и разместите правило выше/вместе с остальными маскарадами. Теперь весь исходящий в интернет трафик от VPN-клиентов будет подменяться внешним IP роутера (то есть уходить в сеть от имени роутера.
Проверка подключения и устранение неполадок
Настройка OpenVPN-клиента и тест соединения. На стороне клиента (ПК/смартфон) установите OpenVPN-клиент. Передайте на клиентское конфигурацию. Импортируйте её. Также потребуются учетные данные (логин/пароль) пользователя, созданные в PPP Secret.
Подключитесь с клиента. Если всё сделано правильно, OpenVPN-клиент установит соединение: запросит пароль от ключа (тот, что вы задали при экспорте сертификата) и PPP-учетные данные, после чего должен появиться статус Connected.
Проверка статуса на роутере. Откройте WinBox и перейдите в меню Log (Logs). В журнале должны появиться записи об установлении OVPN-сессии (например, ovpn,info TCP connection established from ... и далее успешная аутентификация). Также перейдите в PPP → Active Connections: там отобразится активное подключение (Service: ovpn) с именем пользователя (например, client1), временем соединения и выданным IP-адресом. В меню Interfaces вы увидите динамически созданный интерфейс, названный по шаблону ovpn-<имя> (например, ovpn-client1), который представляет собой туннель этого клиента. Убедитесь, что клиенту выдан правильный IP из пула (10.8.0.x). Попробуйте выполнить пинг с клиентского устройства до адреса роутера в VPN (10.8.0.1) – должен ответить. Также проверьте доступность ресурсов локальной сети: например, пингуйте адрес самого роутера в LAN (192.168.88.1) или IP других устройств в сети bridge1 – должны быть доступны. Наконец, проверьте доступ к интернету через VPN: откройте на клиенте браузер и зайдите на сайт для определения IP – он должен показать внешний IP вашего роутера, что подтверждает маршрут всего трафика через VPN.
Типичные проблемы и их решение:
-
Клиент не подключается к серверу (нет соединения): если OpenVPN-клиент не может установить TCP-сессию, проверьте настройки фаервола. Убедитесь, что в IP → Firewall → Filter сработало правило accept на input для порта 1194 (при попытке подключения в логах firewall не должно быть дропа на этот порт). Проверьте, правильно ли указан адрес сервера в конфиге клиента (он должен совпадать с вашим реальным внешним IP или доменом). Уточните у провайдера, не блокирует ли он входящие подключения на выбранный порт – при подозрении попробуйте изменить порт (например, на 443) и соответствующим образом поправить настройки сервера и клиента.
-
Ошибки TLS/сертификатов: если в логе клиента видны ошибки TLS Handshake или сертификатов (например, certificate verify failed), убедитесь, что время на роутере выставлено правильно (несовпадение времени может делать сертификаты недействительными). Также проверьте, что сертификат клиента подписан тем же CA и опция Require Client Certificate включена на сервере. На клиенте убедитесь, что файл ca.crt именно от вашего CA. Если ошибка связана с паролем к приватному ключу (Failed to parse private key), значит неверно введён пароль экспорта – убедитесь, что вводите тот самый, что задавали при экспорте. Можно убрать пароль с ключа, если это мешает (воспользовавшись утилитой OpenSSL на ПК).
-
Ошибка TLS Auth, no suitable method found или подобная: это означает несовместимость настроек Auth/Cipher. Убедитесь, что вы на сервере оставили хотя бы один общий с клиентом алгоритм хэш-аутентификации (например, SHA1) и шифр (AES-256-CBC). По умолчанию OpenVPN GUI может пытаться использовать SHA1 и AES-256, что мы и предусмотрели. Если вы отключили SHA1 на сервере, включите SHA256 и настройте клиент использовать SHA256, или наоборот. То же с шифром: убедитесь, что клиент использует AES-256-CBC (по умолчанию OpenVPN 2.5+ может перейти на AES-256-GCM; при проблемах можно явно указать cipher AES-256-CBC как в примере).
-
Клиент подключается, но не открывает сайты (нет интернета): проверьте, применился ли маршрут по умолчанию. В статусе OpenVPN-клиента на ПК должна появиться строка, добавляющая route 0.0.0.0/1 и 128.0.0.0/1 через VPN. Если нет – убедитесь, что на сервере включен Redirect Gateway или в конфиг клиента присутствует redirect-gateway def1. Также убедитесь, что клиент получил адрес DNS (в Windows можно проверить через ipconfig /all, должен быть DNS 10.8.0.1 или тот, что вы указали). Если DNS не получил – пропишите его вручную в config (опция dhcp-option DNS x.x.x.x в .ovpn файле) или на клиентском интерфейсе. Проверьте правило маскарадинга: должно существовать srcnat masquerade для выхода в интернет с VPN-адресов – иначе пакеты от клиента уходят в интернет с “серым” VPN-IP и игнорируются.
-
Клиент не видит ресурсы локальной сети: убедитесь, что разрешающее forward-правило VPN→LAN реально сработало. В логах или через /ip firewall filter print проверьте счетчики (packets/bytes) на этом правиле – они должны расти при обращении клиента к LAN. Если нет – возможно, указаны не те подсети (убедитесь, что src= это именно VPN-сеть, dst= ваша LAN-сеть). Также проверьте, не мешает ли другое правило – например, дефолтное drop forward !LAN может блокировать, если интерфейс OVPN не добавлен в список LAN. Решение: либо добавьте интерфейс OVPN (или адресной список VPN) в interface-list LAN, либо адаптируйте правило drop. Наше правило вручную открывает нужный доступ, поэтому должно работать. Кроме того, убедитесь, что устройства в локалке имеют маршрутом по умолчанию ваш роутер: если кто-то вручную настроен с другим шлюзом, ответы могут не доходить обратно VPN-клиенту.
Дополнительная диагностика: для глубокого анализа откройте терминал RouterOS (New Terminal) и выполните команду log print where topics~"ovpn" – она отфильтрует лог по сообщениям OpenVPN. Это позволит увидеть детали процесса установления соединения (включая причины разрыва, ошибки TLS, попытки аутентификации). Также можно посмотреть статистику интерфейса ovpn в WinBox (меню Interfaces, двойной клик по интерфейсу ovpn-... → вкладка Traffic), чтобы видеть идут ли пакеты. При подозрении на фаервол можно временно добавить правило log: например, логировать drop пакеты из VPN или включить лог на существующих правилах, чтобы понять, где блокируется. В случае проблем с шифрованием – убедитесь, что версии OpenVPN на клиенте поддерживают используемые алгоритмы (RouterOS 7.19 поддерживает OpenVPN 2.6+, TLS1.3). При правильной настройке, OpenVPN-сервер на MikroTik должен надежно работать и обеспечивать безопасное подключение удалённых клиентов. С настройками по шагам выше этот процесс должен пройти успешно.
Также можете прочитать статью, которую мы писали ранее.