06.06.2023

Установка и настройка OpenVPN в CentOS

Руководство по установке и настройке OpenVPN на сервер под управлением Ubuntu доступно по ссылке. Рассмотрим установку 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 nobody

group 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        2048

set_var EASYRSA_ALGO            rsa

set_var EASYRSA_CA_EXPIRE       7500

set_var EASYRSA_CERT_EXPIRE     365

set_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 nopass

2. Подписываем сертификат:

./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 -y

systemctl mask firewalld

systemctl enable iptables

systemctl stop firewalld

systemctl start iptables

iptables --flush

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

ifconfig -a

Добавляем правило для NAT:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o <имя_интерфейса> -j MASQUERADE

iptables-save > /etc/sysconfig/iptables

Как пример:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

iptables-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 файла:

Первые 3 файла расположены в директории  /etc/openvpn/client/, а client.ovpn придется создать. Для этого перейдем в каталог, где лежат все ключи клиента:

cd  /etc/openvpn/client/

Создадим файл:

nano client.ovpn

Заполним следующим содержимым:

client

dev tun

proto udp

remote <IP_ADDRESS> 1194

resolv-retry infinite

nobind

persist-key

persist-tun

comp-lzo

verb 3

ca ca.crt

cert client01.crt

key 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-адрес.