OpenVPN на CentOS 7.6: установка и настройка
Предпосылки
- CentOS 7.6 (root или sudo)
- Доступ в интернет для установки пакетов
- Базовые знания работы с командной строкой
Что мы сделаем
- Установим OpenVPN и Easy‑RSA
- Настроим переменные Easy‑RSA (vars)
- Сгенерируем CA, серверные и клиентские ключи
- Создадим конфигурацию OpenVPN сервера
- Настроим firewalld и перенаправление (NAT)
- Подготовим клиентские конфигурации
- Протестируем подключение
В этом руководстве реализуется сертификатная аутентификация (PKI). Сертификаты хранятся в /etc/openvpn и в каталоге Easy‑RSA.

Краткая методология
- Подготовить систему и установить пакеты.
- Создать PKI и CA, подписать сервер и клиентские сертификаты.
- Поместить нужные файлы в каталоги сервера и клиента.
- Настроить OpenVPN, firewalld и включить IP‑forward.
- Проверить подключение и поведения по умолчанию (маршрутизация DNS/трафика).
Важные термины (1‑линейные определения)
- CA: центр сертификации, подписывает ключи.
- PKI: инфраструктура публичных ключей, где хранятся сертификаты и ключи.
- CRL: список отозванных сертификатов.
- DH: параметры Диффи‑Хеллмана для обмена ключами.
Шаг 1 — Установка OpenVPN и Easy‑RSA
Перед установкой убедитесь, что подключён репозиторий EPEL. Если его нет — установите:
yum install epel-release -yУстановите OpenVPN 2.4 и easy‑rsa 3:
yum install openvpn easy-rsa -yПроверьте версии после установки:
openvpn --version
ls -lah /usr/share/easy-rsa/
OpenVPN 2.4 и easy‑rsa 3 установлены.
Шаг 2 — Настройка Easy‑RSA 3
Создадим собственный набор переменных (vars) и подготовим рабочую директорию Easy‑RSA.
cd /etc/openvpn/
cp -r /usr/share/easy-rsa /etc/openvpn/Перейдите в каталог easy‑rsa/3 и создайте файл vars:
cd /etc/openvpn/easy-rsa/3/
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-1.0.cnf"
set_var EASYRSA_DIGEST "sha256"Сохраните и закройте редактор.
Примечания:
- Подбирайте EASYRSA_KEY_SIZE (2048 или 4096) в зависимости от требований безопасности. 4096 сильнее, но дольше генерируется.
- EASYRSA_CA_EXPIRE и EASYRSA_CERT_EXPIRE определяют срок годности CA и сертификатов.
Сделайте vars исполняемым (необязательно, но удобно для запуска скриптов):
chmod +x vars
Шаг 3 — Генерация ключей и сертификатов (PKI)
Перейдите в рабочую директорию Easy‑RSA:
cd /etc/openvpn/easy-rsa/3/Инициализация PKI и создание CA
Инициализируйте PKI и создайте CA:
./easyrsa init-pki
./easyrsa build-caВведите пароль CA, после чего файлы ca.crt и ca.key появятся в каталоге pki.

Генерация серверного ключа
Создаём запрос на ключ для сервера (без пароля, при необходимости можно задать пароль):
./easyrsa gen-req hakase-server nopass
Подписываем серверный сертификат с помощью CA:
./easyrsa sign-req server hakase-serverВведите пароль CA при запросе. После успешной подписи файл hakase-server.crt появится в pki/issued.

Проверка:
openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crtСерверный приватный ключ: pki/private/hakase-server.key Сертификат сервера: pki/issued/hakase-server.crt
Генерация клиентского ключа
Создайте клиентский запрос и подпишите его:
./easyrsa gen-req client01 nopass
./easyrsa sign-req client client01Подтвердите «yes», затем введите пароль CA.

Проверка сертификата клиента:
openssl verify -CAfile pki/ca.crt pki/issued/client01.crtГенерация параметров Diffie‑Hellman
Эта операция может занять некоторое время, особенно для больших ключей:
./easyrsa gen-dhСгенерированный dh.pem будет в каталоге pki.

Опционально: генерация CRL (отозванные сертификаты)
Если потребуется отзывать клиентские сертификаты, используйте:
./easyrsa revoke <имя_клиента>
./easyrsa gen-crlФайл crl.pem появится в pki и его нужно поместить на сервер для проверки отозванных сертификатов.

Копирование файлов в каталоги OpenVPN
Скопируйте необходимые файлы для сервера и клиентов:
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/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/server/
cp pki/crl.pem /etc/openvpn/server/
Шаг 4 — Конфигурация OpenVPN сервера
Создайте файл /etc/openvpn/server.conf:
cd /etc/openvpn/
vim 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.10.1.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 client to connect with 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
comp-lzo yes
daemon
user nobody
group nobody
# OpenVPN Log
log-append /var/log/openvpn.log
verb 3Сохраните и закройте файл.
Примечания:
- duplicate-cn позволяет подключению нескольких клиентов с одним сертификатом (обычно не рекомендуется для контроля пользователей).
- comp-lzo включает компрессию LZO. Для современных deployments разумно рассмотреть компрессию на уровне TLS v1.3/новых методов или отключить компрессию по соображениям безопасности.
Шаг 5 — Включение перенаправления и настройка firewalld
Включите IP‑forward в ядре:
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -pДобавьте сервис openvpn и интерфейс tun0 в доверенную зону firewalld:
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0Включите MASQUERADE для доверенной зоны:
firewall-cmd --permanent --zone=trusted --add-masqueradeДобавьте правило NAT (подставьте свой внешний интерфейс или используйте вычисление SERVERIP):
SERVERIP=$(ip route get 84.200.69.80 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADEПерезагрузите firewalld:
firewall-cmd --reloadЗапустите и включите службу OpenVPN при старте:
systemctl start openvpn@server
systemctl enable openvpn@serverПроверка:
netstat -plntu
systemctl status openvpn@server
Если сервис запущен, OpenVPN слушает UDP-порт 1194.

Шаг 6 — Подготовка клиентской конфигурации
Создайте каталог /etc/openvpn/client и файл client01.ovpn:
cd /etc/openvpn/client
vim client01.ovpnПример клиентской конфигурации (замените remote на IP/домен вашего сервера):
client
dev tun
proto udp
remote 139.xx.xx.xx 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 lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3Упакуйте клиентский каталог и скачайте на локальную машину:
cd /etc/openvpn/
tar -czvf client01.tar.gz client/*
Скопируйте файл через scp:
scp [email protected]:/etc/openvpn/client01.tar.gz .
Шаг 7 — Тестирование подключения
На Linux
Установите OpenVPN и (опционально) GUI для Network Manager:
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -yПодключение из терминала:
openvpn --config client01.ovpnПроверка внешнего IP (ожидается IP сервера):
curl ifconfig.ioНа macOS
Установите Tunnelblick. Распакуйте архив и переименуйте каталог client в client01.tblk:
tar -xzvf client01.tar.gz
mv client client01.tblkДвойной клик по client01.tblk импортирует конфигурацию в Tunnelblick.
На Windows
Скачайте официальный OpenVPN GUI для Windows и импортируйте client01.ovpn.
Рекомендации по безопасности и hardening
- Храните CA и приватные ключи в безопасном месте с ограниченным доступом (root только для ca.key).
- Рассмотрите возможность использования passphrase для приватных ключей (если автоматический запуск без пароля не требуется).
- Отключите duplicate-cn для индивидуального управления доступом пользователей.
- Обновляйте OpenSSL и OpenVPN до актуальных версий.
- Ограничьте доступ к управляющему порту сервера (фильтр IP на firewall).
- Используйте TLS auth (ta.key) для защиты от DDoS и усиления TLS‑процесса (добавление –tls-auth).
- Рассмотрите использование HMAC (tls-crypt) для повышения безопасности метаданных TLS.
Пример включения tls-auth (на сервере и клиенте):
- Сгенерируйте tls ключ:
openvpn --genkey --secret ta.key- Скопируйте ta.key в /etc/openvpn/server/ и /etc/openvpn/client/
- Добавьте в конфиг сервера:
key-direction 0
tls-auth /etc/openvpn/server/ta.key 0И в конфиге клиента:
key-direction 1
tls-auth ta.key 1Отладка и типичные проблемы
- OpenVPN не стартует: проверьте /var/log/openvpn.log и systemctl status openvpn@server.
- Нет маршрутизации через VPN: проверьте push “redirect-gateway def1” и включён ли ip_forward.
- DNS не сменяется: проверьте push “dhcp-option DNS …” и настройки клиента (особенно Network Manager может игнорировать опции).
- Сертификат не проходит проверку: проверьте дату/время сервера и клиента, убедитесь, что CA совпадает и сертификаты не истекли.
- Проблемы с firewall: временно отключите firewalld или проверьте правила MASQUERADE и разрешён ли порт 1194/udp.
Короткие команды для диагностики:
systemctl status openvpn@server
journalctl -u openvpn@server --no-pager | tail -n 200
ip addr show tun0
iptables -t nat -L -n -vЧек‑листы по ролям
Администратор сервера:
- Установить EPEL, OpenVPN, Easy‑RSA.
- Настроить vars и создать PKI.
- Хранить ca.key в защищённом каталоге (root только).
- Настроить server.conf и firewalld, включить MASQUERADE.
- Включить и проверить автозапуск openvpn@server.
Сетевой инженер:
- Проверить маршрутизацию и NAT на пограничных устройствах.
- Проверить MTU и фрагментацию (при проблемах с LZO/сжатия).
- Настроить резервную маршрутизацию и мониторинг SLI/SLO (доступность сервиса).
Пользователь клиента:
- Получить архив с client01.ovpn и ключами.
- Установить клиентское ПО и импортировать конфигурацию.
- Проверить внешний IP и доступ к ресурсам внутри сети через VPN.
Мини‑руководство: откат (rollback) изменений
- Если после настройки firewall сервер недоступен, откатьте добавленные прямые правила:
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -D POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADE
firewall-cmd --reload- Отключите openvpn@server:
systemctl stop openvpn@server
systemctl disable openvpn@server- Удалите/восстановите server.conf из резервной копии.
Критерии приёмки (тесты и acceptance)
- Сервер openvpn@server запущен и слушает 1194/udp.
- Клиент успешно подключается и получает IP из диапазона 10.10.1.0/24.
- При проверке curl ifconfig.io клиент показывает внешний IP сервера.
- Трафик проходит через VPN (пакеты маршрутизируются и NAT работает).
- При отзыве сертификата клиент больше не проходит проверку (CRL учитывается).
Тестовые команды: openvpn –config, curl ifconfig.io, ping внутренних ресурсов.
Выбор схемы аутентификации — дерево принятия решений
flowchart TD
A[Нужна аутентификация VPN?] --> B{Типы аутентификации}
B --> C[Сертификаты 'PKI']
B --> D[Пред‑общий ключ 'PSK']
B --> E[Имя/пароль + RADIUS]
C --> F[Подходит для управления доступом, масштабируемости и отзывов]
D --> G[Проще, но менее безопасно, трудно масштабировать]
E --> H[Интеграция с LDAP/RADIUS, удобна для пользователей]
F --> I[Рекомендовано для корпоративных VPN]
G --> I
H --> IМодель зрелости (кратко)
- Начальный: PSK, базовый OpenVPN без PKI.
- Базовый: PKI с CA и ручной подписью клиентских сертификатов.
- Продвинутый: централизованное управление сертификатами, CRL/OCSP, tls‑auth, мониторинг.
- Производственный: автоматизация выдачи/отзыва сертификатов, ротация ключей, интеграция с IAM.
Совместимость и миграция
- Инструкция ориентирована на OpenVPN 2.4 и Easy‑RSA 3 на CentOS 7.x.
- При миграции на CentOS 8 / Rocky/Alma Linux проверьте отличия в firewalld/iptables и systemd unit.
- При переходе на OpenVPN 2.5+ проверьте настройки tls‑cipher и поддержку новых алгоритмов.
Приватность и соответствие (кратко)
- VPN перенаправляет весь трафик через сервер — логируйте только то, что необходимо.
- Если вы храните логи подключения (IP, timestamp), оцените требования GDPR/локального законодательства.
- Ограничьте доступ к логам и используйте ротацию/удаление по политике.
Глоссарий (1 строка)
- PKI — инфраструктура публичных ключей, обеспечивает выпуск и управление сертификатами.
- CRL — список отозванных сертификатов, используется для отказа в допуске.
- TLS auth / tls‑crypt — дополнительный секрет для защиты управления TLS.
Итог и рекомендации
- PKI даёт лучший контроль и масштабируемость по сравнению с PSK.
- Храните CA ключ защищённо и используйте CRL для отзыва сертификатов.
- Включите tls‑auth/tls‑crypt и по возможности увеличьте EASYRSA_KEY_SIZE для критичных систем.
- Документируйте изменения, проверяйте логи и автоматизируйте выдачу сертификатов по мере роста инфраструктуры.
Если нужно — могу подготовить готовые systemd unit-файлы, шаблоны server.conf/client.ovpn с inline‑ключами, или playbook для Ansible для полного развертывания.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента