понедельник, 1 июня 2020 г.

Openvpn-сервер на Linux с клиентами на Mikrotik

У нас имеется:
  • роутер mikrotik с подключением к интернет;
  • vps/vds сервер на Linux с IP адресом N.N.N.N;
мы реализуем:
  • openvpn-сервер на vps c IP адресом 192.168.188.1
  • openvpn-подключение на mikrotik с IP адресом 192.168.188.200


Выбор провайдеров vps и разбор их тарифов выходит за рамки данной статьи. Скажу только, что для openvpn-сервера подойдет любой минимальный тариф за $5 в месяц и даже меньше. Например, самый дешевый дроплет DigitalOcean подходящий вариант.

В качестве дистрибутива Linux я буду использовать Debian 10 Buster.

Поддержка возможностей Openvpn у RouterOS не полная:
  • Нет возможности работать по протоколу UDP, только по TCP.
  • Не поддерживается сжатие трафика.
  • Нет TLS аутентификации.
 Это будем иметь в виду при настройке.

Сначала нужно сгенерировать центр сертификации (CA), сертификаты сервера и клиента. Для этого в Debian 10 используется набор скриптов Easy-RSA версии 3, которая довольно сильно отличается от предыдущей второй версии. Для желающих глубокого погружения в тему отсылаю к официальной документации. Здесь же приведу необходимые команды с кратким пояснением.

Устанавливаем Easy-RSA:
~$ sudo apt install easy-rsa
Подготавливаем CA:
$ sudo make-cadir /etc/easy-rsa
$ sudo -i
# cd /etc/easy-rsa
# ./easyrsa init-pki
# ./easyrsa build-ca nopass
# ./easyrsa gen-dh
# ./easyrsa gen-crl

Создаем сертификат для сервера myserver:
# ./easyrsa gen-req myserver nopass
# ./easyrsa sign-req server myserver
Создаем сертификат для клиента c именем mikrotik:
# ./easyrsa gen-req mikrotik nopass
# ./easyrsa sign-req client mikrotik

Наконец можем установить openvpn:
$ sudo apt install openvpn

Создаем файл конфигурации openvpn сервера:
$ sudo mcedit /etc/openvpn/server/myserver.conf
и вставляем содержимое:
ca /etc/easy-rsa/pki/ca.crt
cert /etc/easy-rsa/pki/issued/myserver.crt
key /etc/easy-rsa/pki/private/myserver.key
dh /etc/easy-rsa/pki/dh.pem
crl-verify /etc/easy-rsa/pki/crl.pem

proto tcp
dev tun
topology subnet
server 192.168.188.0 255.255.255.0
client-config-dir /etc/openvpn/ccd

Далее создаем файл конфигурации для клиента:
$ sudo mkdir /etc/openvpn/ccd
$ sudo mcedit /etc/openvpn/ccd/mikrotik
с содержимым:
ifconfig-push 192.168.188.200 255.255.255.0

После этого запускаем openvpn-сервер:
$ sudo systemctl start openvpn-server@myserver

Если все получилось, то команда покажет статус "active (running)":
$ sudo systemctl status openvpn-server@myserver
Если что то пошло не так, то внимательно изучаем журнал и пытаемся понять, где ошиблись:
$ journalctl -xe
Прописываем автоматический запуск нашего openvpn сервера при старте операционной системы
$ sudo systemctl enable openvpn-server@myserver
Openvpn сервер подготовлен. Переходим к настройке роутера.
Переносим сгенерированные ранее файлы сертификата клиента openvpn на устройство, меню [Files]:
  • /etc/easy-rsa/pki/issued/mikrotik.crt
  • /etc/easy-rsa/pki/private/mikrotik.key


Импортируем в хранилище сертификатов сначала сертификат, затем приватный ключ клиента, меню [System >> Certificates >> Import]:

Добавляем клиентское подключение к openvpn-серверу, меню [PPP >> Interface >> Add >> OVPN Client >> Dial Out]:

Проверяем доступность внутреннего ip-адреса openvpn сервера со стороны клиента, меню [Tools >> Ping]

Готово, vpn подключение настроено и работает.