Здравствуйте, уважаемые читатели. Сегодня тема статьи: "Установка OpenVPN сервера в CentOS 7". OpenVPN сервер - это одно из самых популярных решений для организации VPN-сетей, благодаря своей простоте, кроссплатформенности, и доступности.

VPN-сеть – это частная виртуальная сеть, созданная поверх другой сети, в основном с использованием шифрования.

VPN-сервер – это сервер предоставляющий свои ресурсы (проверка подлинности, маршрутизация, шифрование…) для организации VPN-сети.

Установка необходимых компонентов

  • На сервере должен быть подключен репозиторий epel-release, если не подключен, то подключаем.
# yum install epel-release
  • Переходим непосредственно к установке OpenVPN сервера.
# yum install openvpn
  • Для работы с ключами и сертификатами, мы будем использовать утилиту easy-rsa. Утилиты нет в репозиториях, поэтому нужно либо скачать её прямо на сервер, либо предварительно к себе на компьютер, а уже потом закачать на сервер.

Скачать утилиту easy-rsa, можно со страницы проекта: https://github.com/OpenVPN/easy-rsa/

страница разработчиков easy-rsa
  • Если же действовать напрямую на сервере, то нужно установить две дополнительные утилиты.
# yum -y install wget
# yum -y install unzip zip
  • Следующим шагом нужно создать директорию, в которую мы скачаем утилиту easy-rsa, и в которой будем проводить все манипуляции с ключами и сертификатами.
# mkdir /etc/openvpn/keys
  • Переходим в созданную директорию.
# cd /etc/openvpn/keys
  • Скачиваем архив с последней версией утилиты easy-rsa.
# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
  • После скачивания, разархивируем архив.
# unzip master.zip
  • Теперь можно произвести глобальные настройки создаваемых ключей и сертификатов.
  • Переходим в директорию easyrsa3, и создаем конфигурационный файл из файла шаблона.
# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3
# cp vars.example vars
  • Открываем файл /etc/openvpn/keys/easy-rsa-master/easyrsa3/vars, и исправляем под себя некоторые настройки.

Например усиливаем безопасность ключей:

set_var EASYRSA_KEY_SIZE        4096
set_var EASYRSA_DIGEST          "sha512"

И прописываем глобальные регистрационные настройки:

set_var EASYRSA_REQ_COUNTRY     "RU"
set_var EASYRSA_REQ_PROVINCE    "Moscow"
set_var EASYRSA_REQ_CITY        "Moscow"
set_var EASYRSA_REQ_ORG         "Org"
set_var EASYRSA_REQ_EMAIL       "admin@localhost.local"
set_var EASYRSA_REQ_OU          "OU"

Создание инфраструктуры для работы с ключами и сертификатами

  • Далее нужно создать инфраструктуру для публичных ключей.
  • Будет создан каталог /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/, в котором и будет находится вся инфраструктура.
# ./easyrsa init-pki
  • Для удостоверения подлинности ключей и сертификатов, создаём сертификационный центр.
# ./easyrsa build-ca 
  • В процессе создания удостоверяющего центра, будет создан файл-ключ /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key, и потребуется придумать сложный пароль, который нужно будет ввести и подтвердить.
создание ключа для сертификационного центра
  • Созданный пароль, в последствии понадобится при подписании создаваемых сертификатов.
  • Ключ ca.key и пароль нужно беречь от посторонних, это главные удостоверяющие компоненты.
  • После создания ca.key, будет создан сертификат удостоверяющего цента /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt, нужно присвоить имя создаваемому центру, это на Ваше усмотрение.
создание сертификата для сертификационного центра

Создание сертификатов и ключей для OpenVPN сервера

  • Нужно создать все необходимые удостоверяющие файлы, для нашего OpenVPN сервера.
# ./easyrsa gen-req server nopass

Водим команду с атрибутом nopass, чтобы при перезапуске сервера не приходилось вводить пароль.

В результате будут созданы файлы:

/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/reqs/server.req
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/server.key
  • Делаем запрос на получение сертификата для сервера, у нашего удостоверяющего центра.
# ./easyrsa sign-req server server
  • В процессе будет выведена сводная информация, нужно согласится введя yes.
создание сертификата для OpenVPN сервера
  • После подтверждения, нужно будет ввести пароль, который был создан при создании файла ca.key.
подписание сертификата OpenVPN сервера
  • В итоге будет создан файл /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt.

Создание ключа Диффи-Хелмана

  • Далее нам нужно создать ключ Диффи-Хелмана, используемый в шифровании.
# ./easyrsa gen-dh
  • Процесс создания ключа, может занять значительное время.
создание ключа Диффи-Хелмана
  • В итоге будет создан файл /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/dh.pem.

Создание файла дополнительной проверки подлинности

  • Теперь нужно создать файл дополнительной проверки подлинности при подключении.
  • Переходим в директорию /etc/openvpn/, и создаём файл vpn.tlsauth.
# cd /etc/openvpn
# openvpn --genkey --secret /etc/openvpn/vpn.tlsauth

Подготовка файлов в директории OpenVPN

  • Файлы необходимые для работы сервера созданы.
  • Копируем четыре файла в директорию /etc/openvpn/.
# cp /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt /etc/openvpn/
# cp /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn/
# cp /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt /etc/openvpn/
# cp /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/server.key /etc/openvpn/

Изменяем права, на нужные файлы:

# chmod 644 /etc/openvpn/ca.crt
# chmod 644 /etc/openvpn/dh.pem
# chmod 644 /etc/openvpn/server.crt

Конфигурация OpenVPN сервера

  • Теперь нужно произвести конфигурацию сервера.
  • Создаём фал server.conf, с базовой конфигурацией.
port 1111
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.4.4"
push "dhcp-option DNS 8.8.8.8"
tls-crypt vpn.tlsauth
tls-server
auth SHA512
cipher AES-256-CBC
keepalive 10 120
max-clients 50
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
#log /dev/null
log openvpn.log
comp-lzo
verb 3

--- port 1111 - порт OpenVPN.

--- server 10.8.0.0 255.255.255.0 – виртуальная подсеть.

Объяснения по каждому пункту, можно посмотреть в видео по теме, в конце статьи.

Включение маршрутизации в системе

  • Далее нужно разрешить маршрутизацию.
  • Находим файл /etc/sysctl.conf и добавляем строчку.
net.ipv4.ip_forward = 1
включение маршрутизации в системе
  • Перечитываем sysctl.
# sysctl –p

Настройка SeLinux и Iptables

Если Включен SeLinux, и используется не стандартный порт:

# semanage port -a -t openvpn_port_t -p udp 1111

--- 1111 – порт OpenVPN сервера.

  • Ну и последняя настройка на стороне сервера, это настройка iptables.
  • Для настройки я предлагаю использовать скрипт.
#!/bin/sh
export IF_EXT="enp0s3"
export IF_OVPN="tun0"
export OVPN_PORT="1111"
export IPT="/sbin/iptables"
export IPT6="/sbin/ip6tables"
# CLEAN
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT6 --flush
# LO
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# DROP
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT6 -P INPUT DROP
$IPT6 -P OUTPUT DROP
$IPT6 -P FORWARD DROP
# NAT
$IPT -t nat -A POSTROUTING -o $IF_EXT -j MASQUERADE
# NPUT
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH
$IPT -A INPUT -i $IF_EXT -p tcp --dport 22 -j ACCEPT
# OPENVPN
$IPT -A INPUT -i $IF_EXT -p udp --dport $OVPN_PORT -j ACCEPT
# FORWARD
$IPT -A FORWARD -i $IF_OVPN -o $IF_EXT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $IF_EXT -o $IF_OVPN -m state --state ESTABLISHED,RELATED -j ACCEPT
# OUTPUT
$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# SAVE
/sbin/iptables-save > /etc/sysconfig/iptables

--- enp0s3 – название Вашего сетевого интерфейса.

--- 1111 – порт OpenVPN сервера.

Запуск OpenVPN сервера

  • На этом настройки на стороне сервера завершены.
  • Можно запустить OpenVPN сервер, и добавить его в автозагрузку.
# systemctl start openvpn@server
# systemctl enable openvpn@server

Создание сертификатов и ключей для клиентских устройств

  • Переходим к созданию ключей и сертификатов для пользователей.
  • Идём в директорию easyrsa3.
# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3
  • Вводим команду.
# ./easyrsa gen-req client1 nopass

--- client1 – это имя нашего клиента, оно может быть на Ваше усмотрение.

--- Атрибут nopass означает, что не будет создан пароль и клиенту не нужно будет вводить пароль при каждом подключении. Если хотите, чтобы клиент вводил пароль, то соответственно используйте команду без этого атрибута.

В результате будут созданы файлы:

/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/reqs/ client1.req
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/client1.key
  • Подписываем сертификат для клиента client1.
# ./easyrsa sign-req client client1
  • В процессе нужно будет согласится со сводкой, и ввести пароль ключа сертификационного центра.
  • В итоге будет создан файл /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/client1.crt.


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

# ./easyrsa sign-req client client1 -days 90

--- -days 90 – число дней, на которое выдаётся сертификат.



  • Теперь можно переходить на клиентское устройство.
  • Я буду использовать клиент для Windows.

Клиенту для подключения к серверу, необходимо передать файлы:

/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/client1.crt
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/client1.key
/etc/openvpn/ca.crt
/etc/openvpn/vpn.tlsauth

Конфигурация OpenVPN клиента

  • Чтобы клиент смог подключатся к серверу, нужно создать конфигурационный файл клиента с расширением .ovpn.
  • Какое будет имя у файла, не имеет значения.
client
tls-client
dev tun
proto udp
remote 1.1.1.1 1111
resolv-retry infinite
nobind
block-outside-dns
persist-key
persist-tun
mute-replay-warnings
remote-cert-eku "TLS Web Server Authentication"
remote-cert-tls server
auth SHA512
tls-crypt vpn.tlsauth
ca ca.crt
cert client1.crt
key client1.key
cipher AES-256-CBC
comp-lzo
verb 3

--- remote 1.1.1.1 1111 – ip адрес, и порт OpenVPN.

Пояснения по каждому пункту конфигурации, можно посмотреть в видео по теме, в конце статьи.

  • С примерами конфигурации Вы можете ознакомится в директории с установленным клиентом OpenVPN  C:\Program Files\OpenVPN\sample-config, там есть шаблоны файлов конфигурации с комментариями.
шаблоны конфигурационных файлов OpenVPN

Подключение к OpenVPN серверу

  • Как я уже сказал выше, производить подключение мы будем с клиента для Windows.
  • Нам нужно добавить четыре файла с сервера, и файл конфигурации клиента в директорию C:\Program Files\OpenVPN\config.
добавление необходимых файлов для подключения
  • После проведённых действий, можно запускать клиент.
  • На Windows, для корректной работы, клиент нужно запускать от имени администратора.
  • После запуска клиента, в трее появляется значок программы. По двойному клику по значку, начинается подключение к серверу.
подключение к OpenVPN серверу
  • Если всё сделано правильно, то после подключения значок станет зелёным, и в трее появится подсказка о том, что подключение произошло успешно и компьютеру присвоен ip-адрес виртуальной сети.

Ссылки по которым можно найти OpenVPN-клиент для своей платформы:

https://openvpn.net/community-downloads/
https://sourceforge.net/projects/ovpnp/
https://openvpn.ru/OPENVPN_Macintosh.html
https://apps.apple.com/ru/app/openvpn-connect/id590379981
https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=ru

Сегодня мы рассмотрели тему: "Установка OpenVPN сервера в CentOS 7". Установили сервер, произвели необходимые настройки, и произвели подключение при помощи клиента. Смотрите также видео по теме.

Надеюсь статья была вам полезна. До встречи в новых статьях.

С уважением, Андрей Бондаренко.


Видео на тему "Установка OpenVPN сервера в CentOS 7":