Как стать автором
Обновить

OpenVPN от Ubiquiti до Mikrotik

Сетевое оборудование
Tutorial

Введение

Рано или поздно в любой системе начинают появляться какие-то новые компоненты, с которыми раньше не приходилось сталкиваться. Так и в моем случае в парке удаленных маршрутизаторов 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. На сервер надо:

  1. Установить соединение OpenVPN/tcp (авторизация по паре логин/пароль)

  2. Маршрутизировать сети центра управления в этот туннель

  3. Разрешать удаленное управление через туннель по SSH и HTTPS

  4. Поддерживать туннель в рабочем состоянии

Предполагается что логин и пароль для создаваемого туннеля, а также информация о удаленном объекте (например о адресах в 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

Здесь проверяем:

  1. Наличие в Key usage digitalSignature и keyEncipherment

  2. Название сертификата CA (ca=router-ca)

  3. 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

Здесь проверяем:

  1. Наличие в Key Usage  key-cert-sign и crl-sign

  2. 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 маршрутизатора

Для создания соединения потребуется выполнить следующее:

  1. Скопировать файл с сертификатом CA на маршрутизатор

  2. Создать файл конфигурации OpenVPN с маршрутами до центра управления

  3. Создать файл с логином паролем

  4. Создать туннель по конфигурации

  5. Добавить туннель в группу портов 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) и маршрутизатор должен управляться из центра управления

Теги:
Хабы:
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 8K
Комментарии Комментарии 6