Установка OpenVPN сервера на Ubuntu Linux для подключения клиентов Mikrotik. Часть 1. Настройка сервера OpenVPN

By | 25.11.2017

Доброго времени суток!
Сегодня речь пойдет о необычной установке сервера OpenVPN. Необычная она тем, что клиентские части будут реализованы не на Linux и даже не на Windows, а на Mikrotik OVPN-client (на аппаратных устройствах Mikrotik). Сразу необходимо ответить, что данная конфигурация сервера OpenVPN может работать в среде гетерогенных сетей, что является непосредственным преимуществом при изобилии используемых устройств, как программных так и аппаратных. Так как статья вышла довольно-таки обширной, было решено разбить её на 2 части:

Часть 1. Настройка сервера OpenVPN и генерация сертификатов клиентов

Часть 2. Настройка ovpn-клиента на устройстве Mikrotik

Дано:

  1. Выделенный «белый» ip-адрес
  2. Привязанное к нему доменное имя (по желанию)
  3. Сервер под управлением ОС Ubuntu Linux

Задача:

  1. Установить серверную часть OpenVPN на сервер
  2. Сгенирировать сертификат пользователя для подключения к серверу
  3. Настроить на устройстве Microtik OVPN-client
  4. Установить соединение с сервером

Установка и настройка сервера будет производиться под суперпользователем root, но для вашего удобства, в каждой команде будет добавлена команда sudo. Итак, начнем:

Сперва обновим репозитории и установленные пакеты:

sudo apt-get -y update && sudo apt-get -y upgrade

Затем установим сервер OpenVPN и набор скриптов для генерации самоподписанных сертификатов:

sudo apt-get -y install openvpn easy-rsa

Далее извлекаем из поставляемого в пакете архива, пример конфигурационного файла серверной части OpenVPN:

sudo gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etеc/openvpn/server.conf

Далее начинаем редактировать данный файл:

sudo  nano /etc/openvpn/server.conf

В первую очередь, необходимо поменять сетевой протокол, на котором будет работать сервер openvpn, так как клиент ovpn на устройствах Mikrotic работает только через udp, на самом деле это не столь страшно, скорее это унификация, иными словами, клиенты на других ОС не будут испытывать трудностей при подключении, потому что, как правило они работают с любым из протоколов:

Находим:

;proto tcp
proto udp

И заменяем на:

proto tcp
;proto udp

Далее сразу укажем путь к сертификатам и закрытому ключу, который разместим в директории keys по пути /etc/openvpn/

Находим:

ca ca.crt
cert server.crt
key server.key # This file should be kept secret

Заменяем на:

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret

Далее настроим протокол Диффи Хелмана, используемый для получения секретного ключа в не защищенных сетях.

Находим:

dh1024.pem

Заменяем на:

#dh dh1024.pem
dh /etc/openvpn/dh2048.pem

Теперь необходимо указать пул виртуальных ip-адресов, которые будут выдаваться клиентам, в нашем случае, это 10.1.2.0 с маской 24 (255.255.255.0)
Находим:

server 10.8.0.0 255.255.255.0

Комментируем и добавляем чуть ниже строку:

;server 10.8.0.0 255.255.255.0
server 10.1.2.0 255.255.255.0

Если есть необходимость назначать определенным клиентам особые настройки, то разкомментируем в конфигурационном файле:

client-config-dir ccd

Если нужно, чтобы клиенты могли «видеть» друг друга, то находим строку:

;client-to-client

и приводим ее к виду:

client-to-client

!!!ВНИМАНИЕ-ВАЖНО!!! Затем следует самое главное, нужно выбрать метод шифрования, есть только один вариант, который поддерживается клиентом ovpn Mikrotik, находим секцию:

# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES

и добавляем в конце 2 новые строки:

cipher AES-128-CBC # AES
auth SHA1

так как на Mikrotik не поддерживается компрессия lzo, на сервере ее необходимо отключить, путем комментирования строки:

#comp-lzo

Далее находим:

;user nobody
;group nogroup

И разкомментируем данные строки, чтобы получилось:

user nobody
group nogroup

При желании можно указать путь до лог-файлов.

Находим:

;log openvpn.log
;log-append openvpn.log

Заменяем на:

log /etc/openvpn/openvpn.log
log-append /etc/openvpn/openvpn.log

На этом настройка демона OpenVPN закончена. Сохраняем, закрываем:

Ctrl+x -> Shift+Y -> Enter

Для работы OpenVPN требуются сертификат сервера и сертификаты клиентов, выпущенные одним сертификационным центром (Certification Authority или CA). Мы будем издавать так называемые «самоподписанные сертификаты» используя набор скриптов easy-rsa установленные на начальном этапе.

Копируем скрипты:

sudo cp -r /usr/share/easy-rsa/ /etc/openvpn

Далее создаем директорию, для хранения наших сертификатов:

sudo mkdir /etc/openvpn/easy-rsa/keys

Теперь настал момент, изменения переменных, которые будут использоваться в генерации сертификатов. Редактируем файл:

sudo nano /etc/openvpn/easy-rsa/vars

Находим секцию:

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

И подставляем свои значения, например:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="SAKHA"
export KEY_CITY="Yakutsk"
export KEY_ORG="ColdIT"
export KEY_EMAIL="a@coldit.ru"
export KEY_OU="vpnusers"

Сохраняем изменения и выходим.

Далее необходимо сгенерировать настройки протокола Диффи Хелмана, для этого запускаем команду:

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

в консоли должно появится что то вроде:

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
................................+.............................................................+............................................+............................................................................................................+................+...................................................+.......................................+.............................+.............................................................+........................................................................................................................................................................................................................................................................................................................................................................................................+.................................................+.............................................+................+......................................................................................................+..................................................................+...........................................................................+....................................................................................................................+...+...........................................................................................+...........................................+....................................................................................................................................................................................................................................+.......+..................................................................+....................................................................................................................+....................................................................................+.................................................+........................................................................................................++*++*

Переходим в директорию easy-rsa:

cd /etc/openvpn/easy-rsa

Затем инициализируем PKI (PKI — Public Key Infrastructure) — Инфраструктура открытых ключей — набор средств (технических, материальных, людских и т. д.), распределённых служб и компонентов, в совокупности используемых для поддержки криптозадач на основе закрытого и открытого ключей:

. ./vars

в ответ будет выведено следующее:

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

Далее необходимо очистить нашу директорию от старых генераций, на случай если они были (лучше проделывать эту процедуру в любом случае):

./clean-all

Итак, создадим центр сертификации (Certification Authority или CA)

./build-ca

Далее просто соглашаемся со всем, для этого, достаточно при каждом запросе нажимать на кнопку Enter. Если Вы обратите внимание, то можете заметить, что переменные берутся из ранее отредактированного файла /etc/openvpn/easy-rsa/vars Данная команда запускается всего 1 раз, так как в нашем случае, CA всего один.

После этого, необходимо сгенерировать сертификат для самого сервера:

./build-key-server server

аналогично предыдущей команды, необходимо подтвердить все запросы нажатием Enter до тех пор, пока не увидите запрос на утверждение:

Sign the certificate? [y/n]:

подтверждаем издание сертификата введя значение «y»

Sign the certificate? [y/n]:y

И также нажимаем Enter.

Далее утверждаем еще один запрос и также нажимаем Enter:

1 out of 1 certificate requests certified, commit? [y/n]y

В случае удачной генерации, выведется следующее сообщение:

Write out database with 1 new entries
Data Base Updated

Иначе:

CERTIFICATION CANCELED

Теперь необходимо скопировать сгенерированный сертификат в корневую директорию OpenVPN:

sudo cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

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

ls /etc/openvpn/
ca.crt dh2048.pem easy-rsa server.conf server.crt server.key update-resolv-conf

создаем директорию для хранения индивидуальных конфигураций для определенных клиентов:

sudo mkdir /etc/openvpn/ccd
sudo chmod 777 /etc/openvpn/ccd/

теперь необходимо создать файл, для логирования всех сообщений сервера OpenVPN:

sudo touch /etc/openvpn/openvpn.log
sudo chmod 777 /etc/openvpn/openvpn.log

На этом, настройка серверной части завершена, можно попробовать запустит демон и проверить его статус:

service openvpn start
service openvpn status

Если запуск произошел успешно, то мы должны получить сообщения следующего содержания:

root@coldit:/etc/openvpn/easy-rsa# service openvpn start
* Starting virtual private network daemon(s)... * Autostarting VPN 'server'

root@coldit:/etc/openvpn/easy-rsa# service openvpn status
* VPN 'server' is running

Если же, с запуском возникли проблемы:

root@coldit:/etc/openvpn/easy-rsa# service openvpn status
* VPN 'server' is not running

То смотрим лог:

tail -f /etc/openvpn/openvpn.log

и тут же видим сообщения, например, если не создать директорию ccd, демон не запустится и будет ругаться на ее отсутствие:

Options error: --client-config-dir fails with 'ccd': No such file or directory
Options error: Please correct these errors.
Use --help for more information.

Генерация сертификатов для клиентов.

Чтобы наши клиенты (устройства Mikrotik) могли подключаться к данному серверу, необходимо сгенирировать также для них клиентские сертификаты. Сертификаты должны быть названы на английском языке и без_пробелов, например artem, mikrotik1, client1 и т. д.:

переходим в директорию СА:

cd /etc/openvpn/easy-rsa

и запускаем генерацию:

. ./vars
./build-key client1

Подтверждаем запросы нажатием Enter, как и в предыдущие разы и утверждаем 2 последних запроса вводом значения «y»

Certificate is to be certified until Nov 22 15:18:01 2027 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Сертификат пользователя client1 сгенерирован! Для использования его в Mikrotik, необходимо скопировать 2 файла на устройство. Каждый администратор может выбрать удобный для себя способ, мы рекомендуем использовать WinSCP. Для начала нужно подготовить эти 2 файла для транспортировки. Переходим в директорию keys и назначаем права:

cd /etc/openvpn/easy-rsa/keys
chmod 777 client1.key client1.crt

Далее запускаем на Windows ранее скачанный WinSCP и создаем «новое подключение» до нашего OpenVPN сервера и нажимаем Login:

Если появится запрос на добавление сертификата, нажимаем утвердительно «Да» (Yes)

Далее появится привычный двухоконный файловый менеджер, здесь в правой части отображается сервер, а в левой ваша рабочая станция на Windows. В правой части,используя переход (..) перемещаемся в директорию /etc/openvpn/easy-rsa/keys:

и копируем 2 файла (client1.crt, client2.key) на наш ПК:

Теперь у вас есть файлы сертификата пользователя, их необходимо скопировать на устройство Mikrotik и настроить ovpn-клиент для подключения к серверу.

В следующей статье, рассмотрим настройку ovpn-клиента на устройстве Mikrotik и попробуем подключиться к ранее настроенному серверу OpenVPN

 

 

 

Поделиться!