Гид по технологиям

Установка и настройка OpenVPN с сертификатной аутентификацией на CentOS 8

• 6 min read • DevOps • Обновлено 27 Nov 2025
OpenVPN на CentOS 8 — установка и настройка
OpenVPN на CentOS 8 — установка и настройка

Важно: этот гид показывает конфигурацию с сертификатной аутентификацией (PKI). При работе в продакшене увеличьте ключи и сроки действия сертификатов, храните CA в безопасном месте и продумайте процедуру отзыва сертификатов.

Иллюстрация OpenVPN: установка и настройка

Кому подходит это руководство

  • Системным администраторам и инженерам DevOps, которые развертывают VPN-сервер на CentOS 8.
  • Тем, кто хочет использовать сертификатную аутентификацию (PKI) и управлять собственным CA.

Предварительные требования

  • Сервер с CentOS 8.
  • Права root или sudo.
  • Доступ в интернет для установки пакетов и скачивания Easy-RSA.

Что мы сделаем

  1. Установим OpenVPN и Easy-RSA.
  2. Настроим Easy-RSA 3 (vars).
  3. Сгенерируем CA, серверные и клиентские ключи и сертификаты.
  4. Настроим конфигурацию OpenVPN-сервера.
  5. Включим форвардинг и настроим firewalld (NAT).
  6. Подготовим клиентские файлы и покажем подключение на Linux, macOS и Windows.

Шаг 1 — Установка OpenVPN и Easy-RSA

Добавим репозиторий EPEL и установим пакет OpenVPN, затем загрузим Easy-RSA.

Выполните:

dnf install epel-release

Установите OpenVPN:

dnf install openvpn

Перейдите в каталог конфигурации OpenVPN и скачайте Easy-RSA (версия из примера — v3.0.6):

cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

Распакуйте и переименуйте директорию:

tar -xf EasyRSA-unix-v3.0.6.tgz
mv EasyRSA-v3.0.6/ easy-rsa/; rm -f EasyRSA-unix-v3.0.6.tgz

Установка OpenVPN и Easy-RSA на CentOS 8

Шаг 2 — Настройка Easy-RSA 3 (файл vars)

Создайте и отредактируйте скрипт vars в /etc/openvpn/easy-rsa/:

cd /etc/openvpn/easy-rsa/
vim vars

Вставьте (пример) конфигурацию vars:

set_var EASYRSA             "$PWD"
set_var EASYRSA_PKI         "$EASYRSA/pki"
set_var EASYRSA_DN          "cn_only"
set_var EASYRSA_REQ_COUNTRY "ID"
set_var EASYRSA_REQ_PROVINCE "Jakarta"
set_var EASYRSA_REQ_CITY    "Jakarta"
set_var EASYRSA_REQ_ORG     "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL   "[email protected]"
set_var EASYRSA_REQ_OU      "HAKASE-LABS EASY 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  "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR     "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF    "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST      "sha256"

Сохраните файл и сделайте его исполняемым:

chmod +x vars

Примечания:

  • Подставьте свои значения для страны, города, организации и email.
  • Для повышенной безопасности увеличьте EASYRSA_KEY_SIZE (например, 3072 или 4096).
  • Отрегулируйте EASYRSA_CA_EXPIRE и EASYRSA_CERT_EXPIRE под вашу политику ротации.

Конфигурация Easy-RSA 3

Шаг 3 — Создание ключей и сертификатов

Перейдите в каталог Easy-RSA и инициализируйте PKI:

cd /etc/openvpn/easy-rsa/3/
./easyrsa init-pki
./easyrsa build-ca

При создании CA вам будет предложено указать пароль для закрытого ключа CA. После успешного создания вы найдете ca.crt и ca.key в каталоге pki.

Создание ключей OpenVPN

Создание серверного ключа

Генерируем запрос на подпись и приватный ключ сервера (в примере — hakase-server):

./easyrsa gen-req hakase-server nopass

nopass означает, что приватный ключ сервера будет без пароля — удобно для автоматического старта сервиса. Затем подпишите серверный CSR с помощью CA:

./easyrsa sign-req server hakase-server

Введите пароль CA при запросе. После подписи сертификат появится в pki/issued/hakase-server.crt. Проверьте сертификат:

openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt

Файлы: приватный ключ — pki/private/hakase-server.key, сертификат — pki/issued/hakase-server.crt.

Генерация серверного ключа

Создание клиентского ключа

Создаём ключ клиента client01:

./easyrsa gen-req client01 nopass
./easyrsa sign-req client client01

Подтвердите запрос (‘yes’) и введите пароль CA. Проверьте клиентский сертификат:

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt

Создание клиентского ключа

Генерация Diffie-Hellman параметров

DH-параметры необходимы для некоторых схем обмена ключами:

./easyrsa gen-dh

Файл dh.pem появится в каталоге pki.

Генерация DH

Опционально: CRL (список отзыва сертификатов)

Чтобы иметь возможность отзывать клиентские сертификаты, выполните:

./easyrsa revoke client01
./easyrsa gen-crl

CRL сохранится в pki/crl.pem.

Генерация CRL

Копирование файлов в каталоги OpenVPN

Скопируйте серверные файлы в /etc/openvpn/server/:

cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/
cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/

Скопируйте клиентские файлы в /etc/openvpn/client/:

cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/

Копирование сертификатов

Шаг 4 — Настройка OpenVPN сервера

Создайте файл конфигурации сервера /etc/openvpn/server/server.conf:

cd /etc/openvpn/server/
vim server.conf

Пример server.conf (перенесите содержимое как есть):

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/hakase-server.crt
key /etc/openvpn/server/hakase-server.key

#DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.0.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
persist-key
persist-tun
compress lz4
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Сохраните и закройте.

Советы по безопасности и совместимости:

  • Рассмотрите возможность использования tls-auth или tls-crypt для защиты TLS-рукопожатия.
  • Для современных клиентов можно переключиться на AES-GCM и более новые TLS-профили.
  • Если вы используете SELinux, проверьте контексты файлов и разрешения.

Шаг 5 — Включение форвардинга и настройка firewalld (NAT)

Включите перенаправление IPv4 в ядре:

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

Настройте firewalld:

firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0
firewall-cmd --permanent --add-masquerade

Добавьте правило NAT (замените SERVERIP полученным IP сервера):

SERVERIP=$(ip route get 1.1.1.1 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.5.0.0/24 -o $SERVERIP -j MASQUERADE
firewall-cmd --reload

Перезагрузка firewalld

Запустите и включите auto-start сервиса OpenVPN:

systemctl start openvpn-server@server
systemctl enable openvpn-server@server

Проверьте состояние и порты:

netstat -plntu
systemctl status openvpn-server@server

OpenVPN запущен успешно

Шаг 6 — Подготовка клиентской конфигурации

Создайте клиентский профиль /etc/openvpn/client/client01.ovpn:

cd /etc/openvpn/client
vim client01.ovpn

Пример client01.ovpn:

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lz4
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Упакуйте клиентские файлы для передачи:

cd /etc/openvpn/
tar -czvf client01.tar.gz client/*

Скачайте архив на локальную машину (scp или FTP):

scp [email protected]:/etc/openvpn/client01.tar.gz .

Подготовка клиентских файлов

Шаг 7 — Подключение клиента и тестирование

Linux (терминал)

Установите OpenVPN и (опционально) network-manager-плагин:

sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y

Подключение из терминала:

openvpn --config client01.ovpn

В отдельном терминале проверьте внешний IP (через VPN):

curl ifconfig.io

Ожидается, что адрес вернёт IP VPN-сервера.

macOS

Установите Tunnelblick. Распакуйте архив и переименуйте папку в .tblk:

tar -xzvf client01.tar.gz
mv client client01.tblk

Дважды щёлкните client01.tblk — Tunnelblick импортирует конфигурацию.

Windows

Установите официальный OpenVPN GUI для Windows и импортируйте client01.ovpn через интерфейс.

Тесты и приёмка

Критерии приёмки:

  • OpenVPN-сервис запущен и слушает UDP/1194 (или указанную порт/протокол).
  • Клиент подключается и получает IP из диапазона 10.5.0.0/24.
  • Трафик клиента уходит в интернет через сервер (curl ifconfig.io показывает внешний IP сервера).
  • Логи /var/log/openvpn.log не содержат ошибок TLS или проверок сертификатов.

Отладка: частые проблемы и решения

  • Проблема: клиент не подключается — проверьте, открыты ли порт и протокол на внешнем фаерволе хостинга.
  • Проблема: TLS ошибка — проверьте совпадение ca.crt между сервером и клиентом и корректность подписанных сертификатов.
  • Проблема: нет доступа в интернет после подключения — убедитесь, что включён ip_forward и настроен MASQUERADE в firewalld.
  • Проблема: SELinux блокирует доступ — проверьте audit.log и добавьте нужные контексты или временно переключите SELinux в permissive для диагностики.

Безопасность и эксплуатация (рекомендации)

  • Храните приватный ключ CA офлайн или в защищённом хранилище (HSM, Vault).
  • Регулярно ротация сертификатов и ключей — настройте процесс ревока и распространения новых клиентских конфигов.
  • Отключите duplicate-cn, если хотите уникальные сертификаты для каждого клиента (рекомендуется).
  • Используйте tls-crypt или tls-auth, чтобы защитить TLS-рукопожатие от несанкционированных запросов.
  • Ограничьте доступ по IP/портам на уровне облачного фаервола.

Риски и меры по уменьшению

  • Риск: компрометация CA → весь VPN скомпрометирован. Меры: хранить CA офлайн, ограничить доступ к CA, использовать HSM.
  • Риск: утечка клиентского ключа (без пароля) → требовать пароль на приватный ключ и/или использовать smartcards.
  • Риск: неправильный NAT → тщательно тестировать правила MASQUERADE и маршрутизацию.

Альтернативные подходы

  • Использование OpenVPN с двухфакторной аутентификацией (cert + username/password) через PAM/LDAP.
  • Использование WireGuard — проще по конфигу и с высокой производительностью, но отличается моделью ключей.
  • Использование коммерческого VPN-решения (если требуется централизованное управление сертификатами и GUI).

Когда этот подход не подходит

  • Если нужен очень простой и лёгкий VPN без PKI — рассмотрите WireGuard.
  • Если требуется централизованное управление пользователями и политиками в масштабе предприятия — возможно, лучше корпоративное решение.

Чек-листы по ролям

Администратор:

  • Проверить установку пакетов: openvpn, easy-rsa.
  • Проверить файлы: ca.crt, server.crt, server.key, dh.pem, crl.pem.
  • Убедиться в настройках firewalld и включённом ip_forward.
  • Настроить бэкап CA и периодический аудит.

Пользователь (клиент):

  • Получить архив client01.tar.gz.
  • Импортировать client01.ovpn в клиентское приложение.
  • Подключиться и проверить внешний IP и доступ к ресурсам.

Мини-методология развёртывания (5 шагов)

  1. Подготовка инфраструктуры (сервер, сетевые правила).
  2. Установка ПО (OpenVPN, Easy-RSA).
  3. Построение PKI (CA, серверные и клиентские сертификаты).
  4. Настройка сервера (server.conf, NAT, firewalld).
  5. Тестирование и перевод в эксплуатацию.

Шаблон для инцидентного отката

  • Отключить автозапуск сервера: systemctl disable –now openvpn-server@server
  • Вернуть настройки firewalld: rollback правил или восстановить из резерва.
  • При компрометации CA — отозвать все клиентские сертификаты и выпустить новые.

Краткая галерея крайних случаев

  • Если требуется массовая выдача сертификатов — автоматизируйте easyrsa через скрипты и храните метаданные клиентов.
  • Если сервер в облаке и меняет публичный IP — используйте DNS-имя и обновляйте client.ovpn либо применяйте динамические DNS.

Краткий глоссарий (1 строка каждое)

  • CA: Центр сертификации, подписывает сертификаты.
  • CSR: Запрос на сертификат (Certificate Signing Request).
  • CRL: Список отозванных сертификатов.
  • DH: Параметры Диффи-Хеллмана для обмена ключами.

Контрольные тесты (acceptance)

  • Клиент подключается менее чем за 30 секунд.
  • Клиент получает IP 10.5.0.x и пингает шлюз 10.5.0.1.
  • curl ifconfig.io показывает IP сервера.

Ссылки


Итог: следуя этому руководству, вы получите рабочий OpenVPN-сервер на CentOS 8 с сертификатной аутентификацией, возможностью отзыва сертификатов и базовой безопасной конфигурацией для эксплуатации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро