Записки системного администратора

Ещё один блог о системном администрировании, операционных системах, СУБД, сетях, костылях-велосипедах и пр.

Настройка MikroTik в качестве OVPN-сервера с использованием клиентских сертификатов

В этой статье описана схема настройки Mikrotik в качестве сервера openvpn. Данная конструкция рабочая, проверена на RouterOS v6.29. Для создания сертификатов будем использовать встроенный в RouterOS PKI


Хочу сразу сообщить, что в отличие от Linux серверов, OpenVPN на Mikrotik не поддерживает UDP транспорт и компрессию lzo. Но, тем не менее, все остальные функции, включая TCP транспорт, L2/L3 туннели и т.д., полностью работают.

Настраиваем OVPN-сервер на ROS

1.Настраиваем PKI

Создаем сертификат CA

/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-${название клиента}"

где:

  • common-name="client-${название клиента}" - должен быть уникальным
/certificate sign cert-CL-to-${название клиента} ca="itsp-CA" name="client-${название клиента}"

где:

  • name="client-${название клиента}" - должен быть уникальным

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

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

/certificate issued-revoke ${название сертификата}

где:

  • ${название сертификата} - это поле 'name=' подписанного сертификата

2.Настройка OVPN сервера

Задаем пул-адресов для OVPN-клиентов

/ip pool add name=ovpn-pool ranges=10.127.3.210-10.127.3.230

Создаем PPP-профиль для OVPN-сервера

/ppp profile add name=ovpn-clients local-address=10.127.3.1 remote-address=ovpn-pool dns=10.17.2.172 use-ipv6=no

Включаем OVPN-сервер

На Mikrotik сервер OVPN можно настроить в режиме tun («ip» в ROS), а можно в режиме tap («ethernet» в ROS). Режим tun — обычный туннель. Режим tap — эмуляция полноценного ethernet, в частности в режиме tap клиентов можно объединить в режим моста и они будут прекрасно друг друга видеть.

Мы же будем настраивать наш Mikrotik в режиме tun. Добавлю парочку картинок, смотрим на рисунок ниже.

Создаем пользователя:

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

Экспорт сертификата CA:

/certificate export-certificate itsp-CA export-passphrase=""

Примечание: Нам нужен только сам сертификат, закрытый ключ не нужен, поэтому параметр export-passphrase="" должен быть пустым.

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

/certificate export-certificate client-test export-passphrase=pa55w0rd

Примечание: export-passphrase= - обязательный параметр для экспорта закрытых ключей. Для каждого клиента используем свой пароль. Стараемся не использовать тот же самый пароль, который указывали для пользователей!

Далее извлекаем полученные файлы сертификатов и ключей из микротика любым удобным способом - можно просто "перетянуть" их из winbox'а, можно скачать посредством ftp или с помощью scp.

Настройка Windows-клиента

  1. Получаем OVPN-дистрибутив с openvpn.net.
  2. Устанавливаем, все опции оставляем по-умолчанию, в том числе tap-интерфейс, который понадобится для любого режима настройки.
  3. Идём в OpenVPN\config (по-умолчанию C:\Program Files\OpenVPN\config) и создаём там файл client.ovpn
  4. Создаём конфигурацию клиента.

Ниже представлен пример рабочей конфигурации клиента:

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-сервера. При установке данной переменной в логе клиента возникала ошибка:

VERIFY KU ERROR

В интернетах набрел на статейку - https://www.v13.gr/blog/?p=386

Теперь уже другая ошибка

Certificate does not have extended key usage extension
VERYFY EKU ERROR

Как победить пока не знаю. Если найдете решение раньше меня - поделитесь)

Ответить Отменить ответ

Замечено следующее, используя иные мануалы по генерации сертификатов и последующей настройки ovpn-сервера, переменная remote-cert-tls server в конфиге клиента отрабатывается корректно. В причинах не разбирался, но по этой статье https://www.sanglyb.ru/kak-nastroit-openvpn-server-na-mikrotik первоначально у меня описанная ситуация не воспроизводилась.

Ответить Отменить ответ

HTML Preview:

Коротко о себе:

Привет! Меня зовут Вадим. В этом блоге я пишу об интересующих меня вещах, о проблемах, с которыми сталкиваюсь во время работы, и о путях их решения.

Связаться со мной можно, написав письмо на адрес vadim@adminbook.click