Stupid House

Настройка OpenVPN сервера на MikroTik


Настройка OpenVPN сервера на MikroTik

В одной из предыдущих статей был рассмотрен вариант подключения MikroTik к OpenVPN серверу, но MikroTik может быть не только клиентом, он может работать как OpenVPN сервер, хоть и с ограничениями. Причин поднятия OpenVPN на маршрутизаторе может быть множество, от необходимости безопасного доступа к устройству для управления им, до объединения двух и более сетей.

 

Предварительная подготовка устройства

Для начала необходимо убедиться, что время устройстве установлено верно, раздел System -> Clock. При необходимости настраиваем синхронизацию часов устройства, как это сделать описано в статье: Настройка маршрутизатора MikroTik с нуля, раздел Настройка синхронизации времени.

 

Сертификаты

Корневой сертификат. Для генерации сертификатов воспользуемся встроенными средствами устройства. Раздел System -> Certificates, создаем новый корневой сертификат (CA), поля Name, Common Name и Days Valid обязательны для заполнения. Размер ключа (Key Size) на ваше усмотрение.

Настройка OpenVPN сервера на MikroTik new Certificates

Переходим на вкладку Key Usage, оставляем только crl sign и key cert. sign. Нажимаем кнопку Apply.

Mikrotik generate new CA

Не закрывая окна сертификата нажимаем кнопку Sign для его подписания. В открывшемся окне подписания сертификата в поле CA CRL Host пишем loopback адрес 127.0.0.1, нажимаем кнопку Start.

MikroTik sign CA certificate OpenVPN

В консоли команда будет выглядеть так:

/certificate add name="ca.crt_mikrotik" country="ru" organization="-" common-name="microtik-ca" key-size=4096 days-valid=3650 key-usage=crl-sign,key-cert-sign
/certificate sign ca.crt_mikrotik ca-crl-host=127.0.0.1

После подписания, в списке, сертификат будет иметь атрибуты KLAT (K - Private key, L - crl, A - Authority, T - Trusted).

MikroTik CA Certificate

Сертификат сервера. Создаем сертификат OpenVPN сервера. Процедура аналогична выпуску корневого сертификата.

mikrotik openvpn server certificate

Переходим на вкладку Key Usage, выбираем digital signature, key encipherment и tls server. Нажимаем кнопку Apply.

mikrotik openvpn server certificate create

Не закрывая окна сертификата нажимаем кнопку Sign для его подписания. В открывшемся окне подписания сертификата в поле CA выбираем созданный ранее корневой сертификат (CA), нажимаем кнопку Start.

mikrotik openvpnt server certificate sign

В консоли команда будет выглядеть так:

/certificate add name="openvpn-server.crt_mikrotik" country="ru" organization="-" common-name="mikrotik-openvpn-server" key-size=4096 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server
/certificate sign openvpn-server.crt_mikrotik ca=ca.crt_mikrotik

 

После подписания, в списке, сертификат будет иметь атрибуты KI (K - Private key, I - Issued).

mikrotik openvpn server certificate

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

При создании пользовательских сертификатов указываем максимально понятное имя для упрощения его идентификации в будущем.

mikrotik openvpn client certificate create

Переходим на вкладку Key Usage, выбираем tls client. Нажимаем кнопку Apply.

mikrotik openvpn client certificate keys

Не закрывая окна сертификата нажимаем кнопку Sign для его подписания. В открывшемся окне подписания сертификата в поле CA выбираем созданный ранее корневой сертификат (CA), нажимаем кнопку Start.

mikrotik openvpn client certificate sign

В консоли команда будет выглядеть так:

/certificate add name="openvpn-client-oukitelk10000max.crt_mikrotik" country="ru" organization="-" common-name="oukitelk10000max-openvpn-client" key-size=4096 days-valid=1095 key-usage=tls-client
/certificate sign openvpn-client-oukitelk10000max.crt_mikrotik ca=ca.crt_mikrotik

После подписания, в списке, сертификат будет иметь атрибуты KI (K - Private key, I - Issued).

mikrotik openvpn server clients certificates

Экспорт сертификатов. Экспортируем корневой сертификат, правой клавишей на сертификате -> Export.

mikrotik openvpn export certificate

Тип (Type) выбираем PEM, поскольку для корневого сертификата закрытый ключ не экспортируется, то Export Passphrase не указываем. Export.

mikrotik openvpn export ca

Экспортируем клиентские сертификаты. Поочередно на каждом клиентском сертификате нажимаем правой клавишей -> Export. Тип (Type) выбираем PEM. Клиентские сертификаты будут экспортироваться с закрытым ключом, для этого необходимо указать Export Passphrase, для каждого сертификата клиента указываем свой пароль!

mikrotik openvpn export client certificate

В консоли команды экспорта сертификатов будут выглядеть так:

/certificate export-certificate ca.crt_mikrotik type=pem
/certificate export-certificate openvpn-client-oukitelk10000max.crt_mikrotik type=pem export-passphrase="1234567890"

Во второй команде указан параметр export-passphrase="1234567890" - это пароль для доступа к закрытому ключу сертификата.

Файлы экспортированных сертификатов и закрытых ключей можно теперь скачать из раздела Files.

mikrotik openvpn exported certificates

 

Настройка OpenVPN сервера на MikroTik

Создаем новый пул адресов для VPN клиентов, адресацию пула и диапазон задаем произвольно, но первый адрес будет задействован сервером OpenVPN поэтому в пул он попадать не должен. Пул создаем в IP -> Pool -> +, либо из консоли:

/ip pool add name="dhcp_pool-OpenVPN" ranges="10.10.10.11-10.10.10.250"
mikrotik openvpn server dhcp pool

Создаем новый PPP профиль, в поле Local Address указываем адрес OpenVPN сервера, в поле Remote Address указываем созданный ранее пул адресов. PPP -> Profiles -> +, либо из консоли:

/ppp profile add name="profile-OpenVPN-server" local-address="10.10.10.1" remote-address=dhcp_pool-OpenVPN
mikrotik openvpn server profile

OpenVPN в устройствах MikroTik требуется обязательная аутентификация по пользователю и паролю. Создаем пользователей OpenVPN, в поле Service указываем, что пользователь может аутентифицироваться только на сервере OpenVPN, в поле Profile указываем созданный ранее профиль PPP. Создаваемые пользователи никак не привязаны к выданным сертификатам, в связке они образуют подобие двухфакторной авторизации. Пользователи создаются в разделе PPP -> Secrets -> +, либо из консоли:

/ppp secret add name="oukitelk10000pro" password="qwerty12345" service=ovpn profile=profile-OpenVPN-server
mikrotik openvpn new user

Включаем сервис OpenVPN Server, PPP -> Interface -> OVPN Server. В настройка выбираем:

  • Enable - включаем сервис.
  • Port - по умолчанию используется порт 1194. Если с доступом на этом порту возникают проблемы, то его можно сменить на более распространенный, например, 443, если он не используется другими сервисами.
  • Mode - оставляем по умолчанию ip, это режим работы на уровне layer3 модели osi, в OpenVPN это режим tun. Если к серверу OpenVPN будут подключаться конечные устройства (компьютеры, планшеты, телефоны), то выбираем его.
  • Default Profile - выбираем созданный ранее профиль PPP.
  • Certificate - выбираем созданный ранее сертификат сервера.
  • Require Client Certificate - включаем обязательную проверку пользовательского сертификата.
  • Auth - sha1.
  • Chipher - blowfish 128.

Сохраняем настройки OpenVPN Server.

mikrotik openvpn server enable

Включение OpenVPN сервера из консоли:

/interface ovpn-server server set enabled=yes port=1194 mode=ip default-profile=profile-OpenVPN-server certificate=openvpn-server.crt_mikrotik require-client-certificate=yes auth=sha1 cipher=blowfish128

 

Настройка Firewall

В IP -> Firewall добавляем разрешающее правило для входящих подключений на порт сервера OpenVPN на интерфейсах, смотрящих в сеть интернет. Не забываем расположить правило выше запрещающих. В консоли добавление правила будет выглядеть так:

/ip firewall filter add chain=input protocol=tcp dst-port=1194 in-interface-list=lst-if-WAN action=accept
mikrotik openvpn firewall

где: lst-if-WAN - список WAN интерфейсов, раздел Interfaces -> Interface List.

Для межсетевых экранов, работающих по схеме: закрыть всё, разрешить только необходимое, придется настроить хождение трафика.

1. Трафик до MikroTik и обратно:

/ip firewall filter add chain=input src-address=10.10.10.0/24 dst-address=10.10.10.1/32 action=accept
/ip firewall filter add chain=output src-address=10.10.10.1/32 dst-address=10.10.10.0/24 action=accept

Если необходимо, что бы трафик ходил между клиентами OpenVPN, то в обоих предыдущих правилах меняем src-address и dst-address, вместо 10.10.10.1/32 указываем 10.10.10.0/24, где 10.10.10.0/24 подсеть из адресного пространства которой раздаются адреса для OpenVPN клиентов.

Если доступ к маршрутизатору по данному адресу не нужен, то эти правила не добавляем, либо ограничиваемся списками.

Если доступ к маршрутизатору по данному адресу не нужен, но необходим доступ между клиентами, то сначала добавляем запрещающее правило на доступ к маршрутизатору, либо ограничиваемся списками.

2. Трафик между подсетью OpenVPN и домашней/рабочей подсетью:

/ip firewall filter add chain=input src-address=10.10.10.0/24 dst-address=192.168.10.1/32 action=accept
/ip firewall filter add chain=output src-address=192.168.10.1/32 dst-address=10.10.10.0/24 action=accept
/ip firewall filter add chain=forward src-address=10.10.10.0/24 dst-address=192.168.10.0/24 action=accept
/ip firewall filter add chain=forward src-address=192.168.10.0/24 dst-address=10.10.10.0/24 action=accept

Цепочки input и output описаны для доступа к маршрутизатору, если доступ к маршрутизатору по данному адресу не нужен, то эти правила не добавляем, либо ограничиваемся списками.

Цепочки forward предоставляют полный доступ клиентам, подключенным к OpenVPN, в сеть 192.168.10.0/24, кроме адреса маршрутизатора, для доступа к нему задействована цепочка input и output. Обратное правило разрешает полный доступ устройствам из сети 192.168.10.0/24 полный доступ к устройствам в сети OpenVPN. Для ограничения доступа рекомендуется использовать списки.

3. Доступ в интернет для клиентов OpenVPN:

/ip firewall filter add chain=forward src-address=10.10.10.0/24 out-interface-list=lst-if-WAN action=accept
/ip firewall filter add chain=forward dst-address=10.10.10.0/24 in-interface-list=lst-if-WAN action=accept

Т.к. после подключения клиентского устройства к сети OpenVPN весь трафик с него будет заворачиваться в канал OpenVPN, то может возникнуть ситуация, что клиенты будут иметь доступ к внутренним ресурсам подключенный сети, но не иметь доступа к сети интернет. Правила выше решают эту проблему.

Конечно, настройка Firewall требует более детального подхода, описанные выше правила только показывают направление, в котором необходимо провести работу.

 

Настройка и подключение клиента MikroTik

На клиентском устройстве MikroTik в раздел Files копируем экспортированные ранее корневой и клиентский сертификаты + закрытый ключ к клиентскому сертификату.

mikrotik openvpn client

Импортируем сертификаты в разделе System -> Certificates -> Import. Корневой сертификат выгружался без закрытого ключа, Passphrase для него не указываем.

mikrotik openvpn import ca certificate

Импортируем сертификат клиента, не забываем указать Passphrase указанный при экспорте сертификата.

mikrotik openvpn import client certificate

Импортируем закрытый ключ к клиентскому сертификату, так же указываем Passphrase.

mikrotik openvpn import private key

Импорт сертификатов из командной строки:

/certificate import file-name=flash/cert_export_ca.crt_mikrotik.crt
/certificate import file-name=flash/cert_export_openvpn-client-mi9t.crt_mikrotik.crt passphrase="1234567890"
/certificate import file-name=flash/cert_export_openvpn-client-mi9t.crt_mikrotik.key passphrase="1234567890"

Создаем новое подключение в PPP -> Interface -> + -> OVPN Client. В настройках указываем:

  • Connect To - адрес OpenVPN сервера, к которому необходимо подключиться.
  • Port - как установлено в настройках сервера.
  • Mode - как установлено в настройках сервера.
  • User - имя пользователя, созданного на сервере.
  • Password - пароль пользователя.
  • Profile - default.
  • Certificate - созданный ранее сертификат клиента.
  • Verify Server Certificate - проверка сертификата сервера, включаем.
  • Auth - как в настройках сервера. Для нашей конфигурации sha1.
  • Cipher - как в настройках сервера. Для нашей конфигурации blowfish128.
  • Add Defaul Route - добавление маршрута по умолчанию определяется поставленными задачами.
mikrotik openvpn client

 

Настройка и подключение клиента OpenVPN для Windows

Скачиваем OpenVPN Connect с официального сайта. Создаем новую папку, в которую складываем экспортированные ранее корневой и клиентский сертификаты + закрытый ключ к клиентскому сертификату. В этой же папке создаем файлы auth.cfg и config.ovpn (для удобства лучше называть файл настроек .ovpn по имени пользователя, для которого создается конфигурация, например, для нашего тестового пользователя назвать файл mi9tpro.ovpn). В итоге в созданной папке должно быть 5 файлов:

  1. Корневой сертификат
  2. Сертификат клиента
  3. Закрытый ключ к клиентскому сертификату
  4. Файл auth.cfg
  5. Файл config.ovpn
mikrotik openvpn connect windows

Текстовым редактором открываем файл auth.cfg, первой строчкой пишем имя пользователя, созданного на сервере OpenVPN, второй строчкой пароль. Для нашей тестовой конфигурации будет так:

mikrotik openvpn user auth.cfg

Текстовым редактором открываем файл config.ovpn, вносим настройки клиента:

client
dev tun
topology subnet
proto tcp
remote <strong>openvpn_server_address</strong> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
tls-client
tls-cipher TLS-RSA-WITH-AES-256-CBC-SHA
auth SHA1
auth-user-pass auth.cfg

ca <strong>ca.crt</strong>
cert <strong>client.crt</strong>
key <strong>client.key</strong>

route-delay 5
redirect-gateway def1

openvpn_server_address - адрес вашего OpenVPN сервера

ca.crt - Корневой сертификат

client.crt - Сертификат клиента

client.key - Закрытый ключ

Устанавливаем и запускаем программу OpenVPN Connect. В разделе Import Profile выбираем File -> Browse.

mikrotik openvpn server windows client

Выбираем файл config.ovpn. Вносим последние настройки, понятное имя профиля, и пароль для расшифровки закрытого ключа (по желанию). Нажимаем кнопку Add.

mikrotik openvpn server windows client setup

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

При ошибках подключения удаляем текущий профиль, исправляем настройки и заново загружаем профиль в программу.

 

mikrotik openvpn server windows client connect

 

Настройка и подключение клиента OpenVPN для Android

Из Play Market скачивается приложение OpenVPN. Интерфейс и настройки такие же, как и у программы OpenVPN Connect для Windows. Ранее была проблема, что файл приватного ключа должен был быть заранее расшифрован, но похоже, что эта проблема уже решена.

 

Поиск проблем

При возникновении проблем с подключением, на стороне MikroTik добавляем вывод логов OpenVPN, System -> Logging -> Rules -> + ovpn, открываем вкладку Log и изучаем.

 

Отзыв сертификатов

Отзыв сертификатов производится в System -> Certificates, выбирается нужный сертификат кнопка Revoke.

mikrotik openvpn certificate revoke

 

Автор: muxa, 28.01.2021
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии

Комментарии


Отличная инструкция. Сделал почти все по ней.

Сстолкнулся с неявной проблемой совместимости разных версий сервера в микротике и клиентов:


на микротике «ovpn… duplicate packet dropping»,

на клиенте «connection reset… restarting»

Ничего не помогало… Все пароли перепроверил, переставил.

Думал уже перегенерить все сертификаты заново…как советовали в многих местах под похожими манами )

еще погуглил, решил попробовать со свежим клиентом — заработало,

просто импорт конфига старого сделал - и все само срослось.


mikrotik 6.49 win10, 20h2

ovpn-client 2.5.0-l601 = trouble

OVPN-connect-3.3.4.2600_signed.msi = ok