Доброго времени суток!
Сегодня речь пойдет о необычной установке сервера OpenVPN. Необычная она тем, что клиентские части будут реализованы не на Linux и даже не на Windows, а на Mikrotik OVPN-client (на аппаратных устройствах Mikrotik). Сразу необходимо ответить, что данная конфигурация сервера OpenVPN может работать в среде гетерогенных сетей, что является непосредственным преимуществом при изобилии используемых устройств, как программных так и аппаратных. Так как статья вышла довольно-таки обширной, было решено разбить её на 2 части:
Часть 1. Настройка сервера OpenVPN и генерация сертификатов клиентов
Часть 2. Настройка ovpn-клиента на устройстве Mikrotik
Дано:
- Выделенный «белый» ip-адрес
- Привязанное к нему доменное имя (по желанию)
- Сервер под управлением ОС Ubuntu Linux
Задача:
- Установить серверную часть OpenVPN на сервер
- Сгенирировать сертификат пользователя для подключения к серверу
- Настроить на устройстве Microtik OVPN-client
- Установить соединение с сервером
Установка и настройка сервера будет производиться под суперпользователем 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="[email protected]" export KEY_OU="MyOrganizationalUnit"
И подставляем свои значения, например:
export KEY_COUNTRY="RU" export KEY_PROVINCE="SAKHA" export KEY_CITY="Yakutsk" export KEY_ORG="ColdIT" export KEY_EMAIL="[email protected]" 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-клиент для подключения к серверу.