Ещё один блог о системном администрировании, операционных системах, СУБД, сетях, костылях-велосипедах и пр.
В этой статье описана схема настройки Mikrotik в качестве сервера openvpn. Данная конструкция рабочая, проверена на RouterOS v6.29. Для создания сертификатов будем использовать встроенный в RouterOS PKI
Хочу сразу сообщить, что в отличие от Linux серверов, OpenVPN на Mikrotik не поддерживает UDP транспорт и компрессию lzo. Но, тем не менее, все остальные функции, включая TCP транспорт, L2/L3 туннели и т.д., полностью работают.
/certificate add name=cert-CA country="MD" state="MD" locality="Chisinau" organization="CompanyName" unit="" common-name="itsp-CA" key-size=1024 days-valid=3650 key-usage=crl-sign,key-cert-sign
/certificate sign cert-CA ca-crl-host=127.0.0.1 name="itsp-CA"
/certificate add name=cert-SRV country="MD" state="MD" locality="Chisinau" organization="CompanyName" unit="" common-name="itsp-SRV-OVPN" key-size=1024 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server
/certificate sign cert-SRV ca=itsp-CA name="itsp-SRV-OVPN"
/certificate add name=cert-CL country="MD" state="MD" locality="Chisinau" organization="CompanyName" unit="" common-name="itsp-CL-OVPN" key-size=1024 days-valid=3650 key-usage=tls-client
Создадим сертификат для первого клиента:
/certificate add name=cert-CL-to-TEST copy-from="cert-CL" common-name="client-test"
/certificate sign cert-CL-to-TEST ca="itsp-CA" name="client-test"
Сертификат второго и последующих клиентов:
/certificate add name=cert-CL-to-${название клиента} copy-from="cert-CL" common-name="client-${название клиента}"
где:
/certificate sign cert-CL-to-${название клиента} ca="itsp-CA" name="client-${название клиента}"
где:
В будущем, для отзыва сертификатов используем команду:
/certificate issued-revoke ${название сертификата}
где:
/ip pool add name=ovpn-pool ranges=10.127.3.210-10.127.3.230
/ppp profile add name=ovpn-clients local-address=10.127.3.1 remote-address=ovpn-pool dns=10.17.2.172 use-ipv6=no
На Mikrotik сервер OVPN можно настроить в режиме tun («ip» в ROS), а можно в режиме tap («ethernet» в ROS). Режим tun — обычный туннель. Режим tap — эмуляция полноценного ethernet, в частности в режиме tap клиентов можно объединить в режим моста и они будут прекрасно друг друга видеть.
Мы же будем настраивать наш Mikrotik в режиме tun. Добавлю парочку картинок, смотрим на рисунок ниже.
Создаем пользователя:
/certificate export-certificate itsp-CA export-passphrase=""
Примечание: Нам нужен только сам сертификат, закрытый ключ не нужен, поэтому параметр export-passphrase="" должен быть пустым.
/certificate export-certificate client-test export-passphrase=pa55w0rd
Примечание: export-passphrase= - обязательный параметр для экспорта закрытых ключей. Для каждого клиента используем свой пароль. Стараемся не использовать тот же самый пароль, который указывали для пользователей!
Далее извлекаем полученные файлы сертификатов и ключей из микротика любым удобным способом - можно просто "перетянуть" их из winbox'а, можно скачать посредством ftp или с помощью scp.
Ниже представлен пример рабочей конфигурации клиента:
client
dev tun
proto tcp-client
remote ras.example.com 1194
tls-client
tls-cipher TLS-RSA-WITH-AES-256-CBC-SHA
auth SHA1
resolv-retry infinite
nobind
persist-key
persist-tun
ca cert_export_itsp-CA.crt
cert cert_export_client-test.crt
key cert_export_client-test.key
auth-user-pass user-pwd.txt
askpass pass.txt
verb 3
route 10.0.0.0 255.0.0.0
route-delay 5
Примечание: для применения параметров маршрутизации, прописанных в конфиге, сам сервис OVPN, или же OVPN GUI должны быть запущены с правами администратора.
Примечание №2: auth-user-pass user-pwd.txt - тут записаны логин и пароль пользователя. Первая строчка - логин, вторая - пароль.
Примечание №3: askpass pass.txt - тут записан пароль, указанный при экспорте закрытого ключа (в данном примере в этом файле будет записано значение pa55w0rd)
Разбирался в вопросе с помощью следующих источников:
Комментарии (RSS)
Переменная remote-cert-tls server в конфигурации клиента здесь уже не применима?
В логе подключения в связи с этим есть замечание: Sun Dec 24 21:38:39 2017 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
По всей видимости не работает. Не знаю баг ли это микротика или недоработки в настройке ovpn-сервера. При установке данной переменной в логе клиента возникала ошибка:
В интернетах набрел на статейку - https://www.v13.gr/blog/?p=386
Теперь уже другая ошибка
Как победить пока не знаю. Если найдете решение раньше меня - поделитесь)
Замечено следующее, используя иные мануалы по генерации сертификатов и последующей настройки ovpn-сервера, переменная remote-cert-tls server в конфиге клиента отрабатывается корректно. В причинах не разбирался, но по этой статье https://www.sanglyb.ru/kak-nastroit-openvpn-server-na-mikrotik первоначально у меня описанная ситуация не воспроизводилась.