Установка и настройка OpenVPN в CentOS
Рассмотрим установку OpenVPN на сервер под управлением ОС CentOS7.
OpenVPN — открытая программная реализация протокола VPN. Отличительной особенностью данного продукта является возможность создания зашифрованных туннелей, при этом существуют реализации под большинство популярных ОС, в том числе и для мобильных платформ.
Особенность репозитория CentOS такова, что OpenVPN в него не входит. Зато этот пакет можно получить используя репозиторий EPEL (Enterprise Linux), который управляется Fedora Project. Из данного репозитория, кстати, можно получить и другие пакеты, которые не входят в стандартный репозиторий CentOS. Установим командой:
yum install epel-releaseПриступаем к установке OpenVPN
Устанавливаем пакет:
yum install openvpn easy-rsa -yПриступаем к настройке сервера. Копируем server.conf:
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/Важно обратить внимание на “*”. Если выполнялась только одна попытка установить, то версию программы можно заменить символом “звездочки”. Если же было несколько попыток установки, возможно придется указать путь до файла полностью.
Перед генерацией ключей, внесем несколько изменений в файл конфигурации сервера.
Открываем server.conf любым редактором.
nano /etc/openvpn/server.confНаходим строку “Diffie hellman parameters.” и ищем:
dh dh2048.pemЕсли указано именно, так, то изменения вносить не нужно. Нюанс новой версии пакета заключается в том, что параметру уже соответствуют значения. В старых версиях там просто “dh”. Приводим к виду, как у нас.
Далее ищем строку “# Certain Windows-specific network settings”. раскомментируем один из параметров ниже (удалим символ “точка с запятой” (;) в начале строки). Должно получиться примерно так:
push "dhcp-option DNS 8.8.8.8"DNS-сервер можно указать свой, по желанию. Также, можно раскомментировать вторую строку, чтобы передавать клиентам еще и альтернативный DNS-сервер.
Для безопасности сервера будем запускать от пользователя nobody и группы nogroup. Раскомментируем строки:
user nobodygroup nobodyПриступаем к созданию сертификатов
С помощью установленного ранее пакета easy-rsa создадим ключи сервера и клиента.
Создаем директорию, в которой будут лежать ключи:
mkdir -p /etc/openvpn/easy-rsa/keysВ только что созданную директорию easy-rsa копируем скрипты:
cp -r /usr/share/easy-rsa/3.0/* /etc/openvpn/easy-rsaПереходим в каталог /etc/openvpn/easy-rsa/3/ и создаем скрипт vars
cd /etc/openvpn/easy-rsa/
nano varsВажно! Версия easy-rsa может быть другой, а следовательно путь необходимо будет скорректировать.
В открытый файл добавляем следующие строки:
set_var EASYRSA "$PWD"set_var EASYRSA_PKI "$EASYRSA/pki"set_var EASYRSA_DN "cn_only"set_var EASYRSA_REQ_COUNTRY "RU"set_var EASYRSA_REQ_PROVINCE "Moscow"set_var EASYRSA_REQ_CITY "Moscow"set_var EASYRSA_REQ_ORG "MyOrg"set_var EASYRSA_REQ_EMAIL "openvpn@mydomain.net"set_var EASYRSA_REQ_OU "CA"set_var EASYRSA_KEY_SIZE 2048set_var EASYRSA_ALGO rsaset_var EASYRSA_CA_EXPIRE 7500set_var EASYRSA_CERT_EXPIRE 365set_var EASYRSA_NS_SUPPORT "no"set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"set_var EASYRSA_DIGEST "sha256"Сохраняем файл и закрываем редактор.
Разрешаем исполнение файла:
chmod +x varsИнициализируем PKI директорию и создадим CA сертификат:
./easyrsa init-pki./easyrsa build-caВажно! При создании CA-сертификата скрипт запросит ввод пароля минимум из 4 символов. Введенный пароль следует запомнить.

Создаем ключ сервера.
./easyrsa gen-req server nopassЕсли не указывать атрибут “nopass”, то при создании ключа, скрипт запросит пароль.

Подписываем сертификат сервера:
./easyrsa sign-req server serverПервым действием скрипт поинтересуется в нашей уверенности, отвечаем “Yes”. Затем запросит пароль, который был указан при создании CA-сертификата.
Проверяем, подписался ли сертификат:
openssl verify -CAfile pki/ca.crt pki/issued/ server.crt
Генерируем дополнительный ключ сервера ta.key:
openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.keyПользовательские сертификаты
Процесс создания пользовательского сертификата идентичен созданию сертификата сервера.
1. Создаём без парольной защиты:
./easyrsa gen-req client01 nopass2. Подписываем сертификат:
./easyrsa sign-req client client01
3. Проверяем подпись:
openssl verify -CAfile pki/ca.crt pki/issued/client01.crtДиффи-Хеллман.
Создаем сертификат
./easyrsa gen-dh
В итоге будет создан файл dh.pem, а в конфиге dh2048.pem. Переименуем его позже, при копировании ключей.
Переносим сертификаты.
Копируем файлы ключей сервера. Для этого последовательно выполняем:
cp pki/ca.crt /etc/openvpn/cp pki/issued/server.crt /etc/openvpn/cp pki/private/server.key /etc/openvpn/cp /etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn/Копируем ключи клиента:
cp pki/ca.crt /etc/openvpn/client/cp pki/issued/client01.crt /etc/openvpn/client/cp pki/private/client01.key /etc/openvpn/client/Копируем файл ключа Диффи-Хеллмана:
cp pki/dh.pem /etc/openvpn/dh2048.pemВажно! Целевое имя файла намеренно изменено под имя в конфиге.
Настраиваем маршрутизацию.
Для ускорения настройки, работы будут выполняться с iptables, а не c FirewallD. Последовательно выполняем:
yum install iptables-services -ysystemctl mask firewalldsystemctl enable iptablessystemctl stop firewalldsystemctl start iptablesiptables --flushПеред дальнейшей настройкой следует заглянуть вы названия интерфейсов с помощью команды:
ifconfig -aДобавляем правило для NAT:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o <имя_интерфейса> -j MASQUERADEiptables-save > /etc/sysconfig/iptablesКак пример:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADEiptables-save > /etc/sysconfig/iptablesРазрешаем форвардинг пакетов между сетевыми интерфейсами. Для этого редактируем системный файл sysctl.conf:
nano /etc/sysctl.confВ начале файла вставляем строку:
net.ipv4.ip_forward = 1Сохраняем файл, закрываем редактор и перезапускаем сетевую службу командой:
systemctl restart network.serviceЗапускаем OpenVPN-сервер
Для начала добавим службу в автозагрузку:
systemctl -f enable openvpn@server.serviceЗапускаем OpenVPN:
openvpn /etc/openvpn/server.confНастройка клиента.
Сервер настроен, осталось выполнить настройку клиента, чтобы он мог подключиться.
Независимо от используемой ОС, будь то мобильная, серверная или домашняя версии, Linux или Windows, всегда понадобятся 4 файла:
- ca.crt;
- client.crt;
- client.key;
- client.ovpn
Первые 3 файла расположены в директории /etc/openvpn/client/, а client.ovpn придется создать. Для этого перейдем в каталог, где лежат все ключи клиента:
cd /etc/openvpn/client/Создадим файл:
nano client.ovpnЗаполним следующим содержимым:
clientdev tunproto udpremote <IP_ADDRESS> 1194resolv-retry infinitenobindpersist-keypersist-tuncomp-lzoverb 3ca ca.crtcert client01.crtkey client01.keyВместо IP_ADDRESS вставляем IP-адрес сервера, либо его доменное имя. Сохраняем файл сочетанием Ctrl + X и закрываем редактор.
Передаем файлы клиенту. Это возможно сделать, например, через SFTP или заархивировать каталог и “отдать” его через web-сервер.
Подключение клиента
В зависимости от операционной системы скачиваем установочный файл либо выполняем инсталляцию из репозитория. Также OpenVPN можно получить с официального сайта.
Windows:
Для компьютеров под управлением Windows следует следует скачать дистрибутив продукта с официального сайта, полученные “четыре файла”, следует положить в папку, C:Program FilesOpenVPNconfig.

После запуска OpenVPN GUI, в системном трее появится значок программы. Кликаем по нему правой кнопкой мыши, выбираем Connect (подключиться).

MacOS:
С OpenVPN для MacOS немного сложнее. Следует воспользоваться open-source инструментом Tunnelblick. Ключи и конфигурационный файл следует положить в ~/Library/Application Support/Tunnelblick/Configurations. Либо дважды кликнуть по файлу конфигурации.
Linuix:
Следует выполнить установку из репозитория.
Для Debian/Ubuntu:
apt-get install openvpnДля CentOS/OpenSUSE/Fedora:
yum install openvpn -yПосле установки следует перейти в папку, в которой расположен конфигурационный файл с ключами и выполнить команду:
sudo openvpn --config client.ovpnДля проверки работы сервера следует воспользоваться любым из сайтов, показывающих ваш IP-адрес.