Настройка OpenVPN сервера на MikroTik
Предварительная подготовка устройства
Для начала необходимо убедиться, что время устройстве установлено верно, раздел System -> Clock
.
Сертификаты
Корневой сертификат. Для генерации сертификатов воспользуемся встроенными средствами устройства. Раздел System -> Certificates
, создаем новый корневой сертификат (CA), поля Name
, Common Name
и Days Valid
обязательны для заполнения. Размер ключа (Key Size) на ваше усмотрение.
Переходим на вкладку Key Usage
, оставляем только crl sign
и key cert. sign
. Нажимаем кнопку Apply
.
Не закрывая окна сертификата нажимаем кнопку Sign
для его подписания. В открывшемся окне подписания сертификата в поле CA CRL Host
пишем loopback адрес 127.0.0.1
, нажимаем кнопку Start
.
В консоли команда будет выглядеть так:
/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).
Сертификат сервера. Создаем сертификат OpenVPN сервера. Процедура аналогична выпуску корневого сертификата.
Переходим на вкладку Key Usage
, выбираем digital signature
, key encipherment
и tls server
. Нажимаем кнопку Apply
.
Не закрывая окна сертификата нажимаем кнопку Sign
для его подписания. В открывшемся окне подписания сертификата в поле CA
выбираем созданный ранее корневой сертификат (CA), нажимаем кнопку Start
.
В консоли команда будет выглядеть так:
/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).
Сертификат клиента. Создаем сертификаты для клиентов. Как и насколько по времени создавать клиентские сертификаты каждый решает сам, все случаи индивидуальны и от этого может зависеть безопасность не только устройства, но и целой сети. При выдаче сертификата для устройства учитываем условия, в которых оно будет использоваться, например, для устройств, связывающих сети сертификат лучше сделать с максимальным сроком действия, в то время как сертификат выданный для телефона, ноутбука или на пользователя лучше ограничивать, т.к. устройства имеют свойства теряться, передаваться и т.д., пользователи приходят и уходят, а сертификат можно банально забыть отозвать.
При создании пользовательских сертификатов указываем максимально понятное имя для упрощения его идентификации в будущем.
Переходим на вкладку Key Usage
, выбираем tls client
. Нажимаем кнопку Apply
.
Не закрывая окна сертификата нажимаем кнопку Sign
для его подписания. В открывшемся окне подписания сертификата в поле CA
выбираем созданный ранее корневой сертификат (CA), нажимаем кнопку Start
.
В консоли команда будет выглядеть так:
/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).
Экспорт сертификатов. Экспортируем корневой сертификат, правой клавишей на сертификате -> Export
.
Тип (Type
) выбираем PEM
, поскольку для корневого сертификата закрытый ключ не экспортируется, то Export Passphrase
не указываем. Export
.
Экспортируем клиентские сертификаты. Поочередно на каждом клиентском сертификате нажимаем правой клавишей -> Export
. Тип (Type
) выбираем PEM
. Клиентские сертификаты будут экспортироваться с закрытым ключом, для этого необходимо указать Export Passphrase
, для каждого сертификата клиента указываем свой пароль!
В консоли команды экспорта сертификатов будут выглядеть так:
/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
.
Настройка OpenVPN сервера на MikroTik
Создаем новый пул адресов для VPN клиентов, адресацию пула и диапазон задаем произвольно, но первый адрес будет задействован сервером OpenVPN поэтому в пул он попадать не должен. Пул создаем в IP -> Pool -> +
, либо из консоли:
/ip pool add name="dhcp_pool-OpenVPN" ranges="10.10.10.11-10.10.10.250"
Создаем новый 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
OpenVPN в устройствах MikroTik требуется обязательная аутентификация по пользователю и паролю. Создаем пользователей OpenVPN, в поле Service
указываем, что пользователь может аутентифицироваться только на сервере OpenVPN, в поле Profile
указываем созданный ранее профиль PPP. Создаваемые пользователи никак не привязаны к выданным сертификатам, в связке они образуют подобие двухфакторной авторизации. Пользователи создаются в разделе PPP -> Secrets -> +
, либо из консоли:
/ppp secret add name="oukitelk10000pro" password="qwerty12345" service=ovpn profile=profile-OpenVPN-server
Включаем сервис 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.
Включение 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
где: 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
копируем экспортированные ранее корневой и клиентский сертификаты + закрытый ключ к клиентскому сертификату.
Импортируем сертификаты в разделе System -> Certificates -> Import
. Корневой сертификат выгружался без закрытого ключа, Passphrase
для него не указываем.
Импортируем сертификат клиента, не забываем указать Passphrase
указанный при экспорте сертификата.
Импортируем закрытый ключ к клиентскому сертификату, так же указываем Passphrase
.
Импорт сертификатов из командной строки:
/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 - добавление маршрута по умолчанию определяется поставленными задачами.
Настройка и подключение клиента OpenVPN для Windows
Скачиваем OpenVPN Connect с официального сайта. Создаем новую папку, в которую складываем экспортированные ранее корневой и клиентский сертификаты + закрытый ключ к клиентскому сертификату. В этой же папке создаем файлы auth.cfg
и config.ovpn
(для удобства лучше называть файл настроек .ovpn
по имени пользователя, для которого создается конфигурация, например, для нашего тестового пользователя назвать файл mi9tpro.ovpn
). В итоге в созданной папке должно быть 5 файлов:
- Корневой сертификат
- Сертификат клиента
- Закрытый ключ к клиентскому сертификату
- Файл auth.cfg
- Файл config.ovpn
Текстовым редактором открываем файл auth.cfg, первой строчкой пишем имя пользователя, созданного на сервере OpenVPN, второй строчкой пароль. Для нашей тестовой конфигурации будет так:
Текстовым редактором открываем файл 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
.
Выбираем файл config.ovpn
. Вносим последние настройки, понятное имя профиля, и пароль для расшифровки закрытого ключа (по желанию). Нажимаем кнопку Add
.
После добавления настроек выбираем нужный сервер из списка и подключаемся к нему. После проверки подключения папку с файлами настроек и сертификатами можно либо удалить, либо убрать в надежное место.
При ошибках подключения удаляем текущий профиль, исправляем настройки и заново загружаем профиль в программу.
Настройка и подключение клиента OpenVPN для Android
Из Play Market скачивается приложение OpenVPN. Интерфейс и настройки такие же, как и у программы OpenVPN Connect для Windows. Ранее была проблема, что файл приватного ключа должен был быть заранее расшифрован, но похоже, что эта проблема уже решена.
Поиск проблем
При возникновении проблем с подключением, на стороне MikroTik добавляем вывод логов OpenVPN, System -> Logging -> Rules -> + ovpn
, открываем вкладку Log
и изучаем.
Отзыв сертификатов
Отзыв сертификатов производится в System -> Certificates
, выбирается нужный сертификат кнопка Revoke
.