Введение
Рано или поздно в любой системе начинают появляться какие-то новые компоненты, с которыми раньше не приходилось сталкиваться. Так и в моем случае в парке удаленных маршрутизаторов Mikrotik под моим управлением появилось некоторое количество устройств Ubiquiti, которые тоже требовали удаленного управления. Для устройств Mikrotik давно был развернут VPN сервер L2TP/IPSEc и OpenVPN для особо сложных случаев, когда IPSEc отказывался работать от объекта заказчиков. Документация на Ubiquiti показывала, что клиентом L2TP/IPSEc он быть не может, но вроде поддерживает OpenVPN. Данная статья – шпаргалка для решения подобных задач
Постановка задачи
Есть маршрутизатор Ubiquiti EdgeRouter 6P (прошивка v2.0.9-hotfix.2), находящийся у клиента. Есть OpenVPN сервер на маршрутизторе Mikrotik (прошивка 6.48.5 long-term) в центре управления по адресу ovpn.example.com. На сервер надо:
-
Установить соединение OpenVPN/tcp (авторизация по паре логин/пароль)
-
Маршрутизировать сети центра управления в этот туннель
-
Разрешать удаленное управление через туннель по SSH и HTTPS
-
Поддерживать туннель в рабочем состоянии
Предполагается что логин и пароль для создаваемого туннеля, а также информация о удаленном объекте (например о адресах в LAN Ubiquiti) уже заведена в /ppp secrets на стороне сервера
Сертификаты Mikrotik
Те, кто эксплуатирует устройства Mikrotik знают их несколько «расслабленное» отношение к сертификатам. Так для работы служб www-ssl, openvpn и, в некоторых случаях, аутентификации peer-ов IPSEc не требуется наличие в сертификате тех или иных Usage полей. Mikrotik вполне позволит сконфигурировать OpenVPN сервер с сертификатом, в котором не будет отмечено Usage: digitalSignature и keyEncipherment
Однако устройства Ubiquiti относятся к сертификатам значительно более строго, и при попытке соединения с OpenVPN сервером устройства проверяют соответствие сертификата сервера сконфигурированному CA сертификату, а также наличие в сертификате сервера разрешенного применения digitalSignature и keyEncipherment (по документации OpenVPN ещё требуется атрибут keyAgreement, но в моем случае все заработало и без него).
Таким образом первый шаг – проверка и экспорт сертификатов с Mikrotik
Шаг 1: Выяснить, какой сертификат использует OpenVPN сервер
/interface ovpn-server server> print enabled: yes port: 1194 mode: ip netmask: 24 mac-address: FE:FB:79:10:20:30 max-mtu: 1500 keepalive-timeout: 60 default-profile: l2tp-profile certificate: router-tls require-client-certificate: no auth: sha1 cipher: aes128,aes192,aes256
В нашем случае используется сертификат “router-tls”
Шаг 2: проверяем параметры сертификата сервера
/interface ovpn-server server> /certificate print detail where name=router-tls Flags: K - private-key, L - crl, C - smart-card-key, A - authority, I - issued, R - revoked, E - expired, T - trusted 0 K I name="router-tls" digest-algorithm=sha256 key-type=rsa country="ru" state="foo" locality="bar" common-name="router-tls" key-size=2048 subject-alt-name="" days-valid=900 trusted=no key-usage=digital-signature,key-encipherment,tls-server,tls-client ca=router-ca serial-number="568688839A18E0EA" fingerprint="a70aa4ff8ac976376847c600046a30a1156cb4815aa72d2161b1ff6df34e9693" akid=e5c220ab170145b0fc22c7cccca3ce6ed9bc51c6 skid=89851a176de1eac0adca72da7ac473df9c3bf800 invalid-before=nov/14/2021 18:16:21 invalid-after=may/02/2024 18:16:21 expires-after=126w4d3h40m
Здесь проверяем:
-
Наличие в Key usage digitalSignature и keyEncipherment
-
Название сертификата CA (ca=router-ca)
-
ID ключа CA (akid=e5c220ab170145b0fc22c7cccca3ce6ed9bc51c6)
Шаг 3: проверяем параметры сертификата CA
/certificate print detail where name=router-ca Flags: K - private-key, L - crl, C - smart-card-key, A - authority, I - issued, R - revoked, E - expired, T - trusted 0 KL A T name="router-ca" issuer=C=ru,ST=foo,L=bar,O=home,OU=dit,CN=router digest-algorithm=sha256 key-type=rsa country="ru" state="foo" locality="bar" organization="home" unit="dit" common-name="router-ca" key-size=2048 days-valid=3650 trusted=yes key-usage=digital-signature,key-cert-sign,crl-sign serial-number="179F9227D44CF776" fingerprint="b4379771fd506d6bfbdb62c7b42f1f3fc61067926d5e036e875e735c63065499" akid="" skid=e5c220ab170145b0fc22c7cccca3ce6ed9bc51c6 invalid-before=apr/27/2017 12:04:14 invalid-after=apr/25/2027 12:04:14 expires-after=281w6d21h24m29s
Здесь проверяем:
-
Наличие в Key Usage key-cert-sign и crl-sign
-
SKID данного сертификата должен быть тем же что и AKID сертификата сервера OpenVPN
Шаг 4: экспортируем сертификат CA
/certificate export-certificate router-ca file-name=router-ca /file print # NAME TYPE SIZE CREATION-TIME 0 router-ca.crt .crt file 1493 nov/28/2021 14:54:24 1 flash disk nov/15/2021 12:31:18 2 flash/pub directory nov/15/2021 12:31:18 3 flash/skins directory jan/01/1970 03:00:19
Скачиваем файл router-ca.crt
Настройки Ubiquiti
Устройства Ubiquiti обладают красивым веб-интерфейсом, однако его функционал местами сильно ограничен. Так, например создание OpenVPN клиентов реализовано настолько нетривиально, что проще все настройки делать через SSH используя CLI
Одной из приятных особенностей Ubiquiti является использование вполне честного Linux-а в качестве ОС и возможности переключится из CLI маршрутизатора в обыкновенный bash командой “sudo su” в CLI маршрутизатора
Для создания соединения потребуется выполнить следующее:
-
Скопировать файл с сертификатом CA на маршрутизатор
-
Создать файл конфигурации OpenVPN с маршрутами до центра управления
-
Создать файл с логином паролем
-
Создать туннель по конфигурации
-
Добавить туннель в группу портов LAN для обеспечения удаленного управления
Шаг 1: создаем файлы
Большинство руководств найденных в сети предлагают держать файлы конфигураций для туннелей в директории /config/auth
С помощью scp копируем файл сертификата CA на Ubiquiti, заходим на маршрутизатор по ssh и оказываемся в CLI маршрутизатора:
admin@ubnt:~$ sudo su root@ubnt:/home/admin#
Мы в домашней директории. Файл с сертификатом должен быть здесь. Скопируем его в рекомендованное место:
cp router-ca.crt /config/auth/
В директории /config/auth создадим файл конфигурации OpenVPN
root@ubnt:/config/auth# cd /config/auth root@ubnt:/config/auth# cat > config.ovpn client route 10.10.50.0 255.255.255.0 dev tun proto tcp persist-key persist-tun remote ovpn.example.com port 1194 ca /config/auth/router-ca.crt tls-client remote-cert-tls server verb 6 auth-nocache mute 10 auth SHA1 cipher AES-256-CBC #redirect-gateway def1 auth-user-pass /config/auth/ovpn_auth.txt
В данном файле мы описываем клиента, подключающегося по протоколу TCP к серверу ovpn.example.com. На сервере должен быть сертификат, подписанный сертификатом CA из файла /config/auth/router-ca.crt.Авторизация проводится по логину паролю из файла /config/auth/ovpn_auth.txt
При успешном соединении добавляется маршрут на сеть 10.10.50.0/24 (сеть центра управления)
В файле /config/auth/ovpn_auth.txt первая строка – логин, вторая – пароль пользователя. Если все сделано правильно, то в директории /config/auth должно оказаться 3 файла:
root@ubnt:/config/auth# ls -l total 20 -rw-r--r-- 1 root vyattacf 1834 Nov 28 12:57 router-ca.crt -rw-r--r-- 1 admin vyattacf 297 Nov 28 12:58 config.ovpn -rw-r--r-- 1 admin vyattacf 29 Nov 28 12:59 ovpn_auth.txt
Шаг 2: настраиваем туннель через CLI
Возвращаемся в CLI маршрутизатора из bash (CTRL-D) и переходим в режим редактирования конфигурации
admin@ubnt:~$ configure admin@ubnt#
Далее описываем параметры нашего соединения:
set interfaces openvpn vtun1 description "CNC tunnel" set interfaces openvpn vtun1 config-file /config/auth/config.ovpn commit
если все сделано правильно и маршрутизатор не ругнулся, добавляем интерфейс vtun0 к LAN-портам
set port-forward lan-interface vtun0 commit
С этого момента статус соединения можно посмотреть в веб-интерфейсе (в разделе Dashboard) и маршрутизатор должен управляться из центра управления
ссылка на оригинал статьи https://habr.com/ru/articles/592077/
Добавить комментарий