Поднимаем OpenVPN сервер на Mikrotik

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

Во-первых: полноценного ethernet туннеля OpenVPN микротик сделать не в состоянии, потому что отсутствует напрочь возможность выдавать IP адреса OVPN клиентам по DHCP, все адреса выдаёт только сам микротик, как его не крути и с чем вокруг него не прыгай;
Во-вторых: не поддерживается сжатие заголовков;
В-третьих: работает только по tcp, в то время как предпочитаемый для OpenVPN – udp.
и если я правильно понимаю, даже на железках с аппаратным ускорением шифрования, опенвпн всё равно будет работать в софтовом режиме, т.е. возможность аппаратного ускорения не задействуется.

Всё это вместе взятое немного раздражает, но с этим, как я считаю, можно смирится, потому что такая реализация имеет ряд плюсов:

  • Безопасность, опенвпн с реализацией авторизации по сертификату очень надёжный канал.
  • В отличии от ipsec у нас практически нет никаких проблем с nat.
  • Возможность настроить клиента для подключения по безопасному каналу практически с любого устройства.
  • Относительная простота настройки, в микротике опенвпн поднимается практически в два щелчка, если сравнивать настройку через конфиг в других железках или ОС.

Итак, настройку я условно разделю на две части, это настройка сервера (на железке) и настройка клиента (windows).

Как настроить клиента для CentOS (Linux) читаем в этой статейке.

Настройка OpenVPN на Mikrotik (Сервер)

Подготовка

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

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

открываем WinBox на микротике, переходим в раздел Files и жмём на кнопку Paste

winbox paste

Получается примерно такая картинка

winbox file list

После этого сертификаты необходимо импортировать, для этого идём в раздел System – Certificates и жмём кнопку Import, я первым импортировал публичный сертификат CA

winbox certificates

дальше импортируем публичный сертификат микротика

и закрытый ключ для него

winbox certificates

должна получится примерно такая картинка, обращаем внимание что напротив сертификата микротика должно стоять KT

следующим шагом создаём пул IP адресов для наших OVPN клиентов IP – Pool, жмём кнопку +, я добавил диапазон 172.21.108.2-172.21.108.14, и назвал пул ovpn

следующим этапом создаём PPP профиль, соответственно заходим в раздел PPP вкладка Profiles добавляем профиль кнопкой +, вводим имя, локальный адрес микротика с которым будут работы нашим клиенты, должен лежать в подсети с созданным ранее пулом адресов и указываем пул, остальное оставляем без изменений

Включение

после этого настраиваем сам OpenVPN сервер, делается это в разделе PPP вкладка Interface, кнопка OVPN Server, ставим галку Enabled, mode выставляем ethernet, выбираем созданный ранее профиль, а также ставим галку Require Client Certificate и выбираем сертификат микротика, маску по желанию можно поменять.

winbox openvpn server

Осталось совсем немного, нужно создать пользователя, переходим в раздел PPP – Secrets, вводим имя пользователя, пароль, указываем сервис и профиль.

new ppp secret

Поскольку мы используем сертификаты, надо что бы время на клиенте и на сервере совпадало, поэтому настраиваем sntp клиента, что бы микротик мог синхронизировать время, делается это в разделе System – SNTP Client. Я указал локальный SNTP сервер, вы можете использовать любой публичный сервер в интернете (например ntp3.stratum2.ru и 0.europe.pool.ntp.org) или указать свой внутренний.

winbox sntp client

Осталось настроить разрешающее правило фаервола, переходим в раздел IP – Firewall вкладка Filter Rules.

winbox firewall rule

Здесь надо указать In. Interface – интерфейс по которому к Вам приходит интернет, остальное как на скриншоте.

winbox firewall rule

 

Созданное правило должно находится выше запрещающих правил.

На этом настройка сервера завершена, переходим к настройке клиента.

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

Не все версии RouterOS нормально работают с OpenVPN. Например версия RouterOS ниже 6.36 не работает с версиями OpenVPN выше 2.3.10, поэтому не забывайте периодически обновлять RouterOS.

При получении ошибки:
OpenSSL: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca

Обновите прошивку!
И проверьте что бы в сертификатах на микротике был импортирован ca.crt!


OpenSSL: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
при возникновении этой ошибки обновляем прошивку, заново импортируем сертификаты в микротике(не надо их генерировать снова, просто удалить и снова добавить)

Конфиг файл тестировался для OpenVPN 2.4.4, последнего на момент написания статьи.

О том где загрузить и как установить OpenVPN клиент описано в статье по созданию сертификатов.

После установки нам необходимо будет перейти в каталог с установленным OpenVPN и добавить файл client.ovpn в каталог config следующего содержания:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
proto tcp-client
# в этой строчке мы указываем адрес в интернете нашего микротика
remote 123.123.123.123
dev tap
 
nobind
persist-key
 
tls-client
#указываем имена публичного CA сертификата
ca ca.crt
# публичного сертификата клиента
cert client.crt
# и его закрытый ключ
key  client.key
#каждые 10 секунд проверять туннель, если нет ответа 120 секунд, переподключаться
keepalive 10 120
verb 3
cipher AES-256-CBC
auth SHA1
pull
#проверка сертификата сервера
#https://openvpn.net/index.php/open-source/documentation/howto.html#mitm
remote-cert-tls server
# эта строка задаёт файл с логином-паролем которые мы прописывали в PPP-Secrets на микротике
auth-user-pass auth.cfg
# в этой части мы задаём настройки сетей которые находятся за микротиком,
# в моём случае 192.168.1.0 с маской 255.255.255.0 это сеть,
# а 172.21.108.1 это адрес микротика который мы указывали в PPP профиле
route-method exe 
route-delay 2 
route 192.168.1.0 255.255.255.0 172.21.108.1

Так же копируем в эту папку публичные сертификаты CA и клиента, и закрытый ключ клиента и создаём файл auth.cfg вида

1
2
user
123

где user – имя пользователя, 123 – пароль, которые мы задавали в PPP-Secrets на микротике

На этом настройка клиента завершена, запускаем OpenVPN GUI и он начинает подключение

Внимание! В Win7 с включённым UAC, а также на Win8 и Win8.1 не зависимо от того включён или выключен UAC запускаем OpenVPN GUI только в режиме Запускать от имени администратора! В противном случаем у Вас не добавятся маршруты или и вовсе не произойдёт подключения.

openvpn win client connection

при успешном подключении в трее появится сообщение

Как и прежде свои вопросы и пожелания вы можете оставлять в комментариях ниже.