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

OpenVPN на CentOS 7.6: установка и настройка

• 7 min read • Серверы • Обновлено 24 Nov 2025
OpenVPN на CentOS 7.6 — установка и настройка
OpenVPN на CentOS 7.6 — установка и настройка

Предпосылки

  • CentOS 7.6 (root или sudo)
  • Доступ в интернет для установки пакетов
  • Базовые знания работы с командной строкой

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

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

В этом руководстве реализуется сертификатная аутентификация (PKI). Сертификаты хранятся в /etc/openvpn и в каталоге Easy‑RSA.

Обложка: подключение через OpenVPN

Краткая методология

  1. Подготовить систему и установить пакеты.
  2. Создать PKI и CA, подписать сервер и клиентские сертификаты.
  3. Поместить нужные файлы в каталоги сервера и клиента.
  4. Настроить OpenVPN, firewalld и включить IP‑forward.
  5. Проверить подключение и поведения по умолчанию (маршрутизация 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 в терминале

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

Конфигурация Easy-RSA — файл 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.

Инициализация PKI и генерация CA — вывод команд

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

Создаём запрос на ключ для сервера (без пароля, при необходимости можно задать пароль):

./easyrsa gen-req hakase-server nopass

Генерация ключа сервера — easyrsa gen-req

Подписываем серверный сертификат с помощью CA:

./easyrsa sign-req server hakase-server

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

Подпись запроса сервера easyrsa sign-req — ввод пароля CA

Проверка:

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.

Генерация ключа клиента — easyrsa gen-req client01

Проверка сертификата клиента:

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 и его нужно поместить на сервер для проверки отозванных сертификатов.

Генерация CRL — список отозванных сертификатов

Копирование файлов в каталоги 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/

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


Шаг 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

Включение перенаправления портов и настройки firewalld

Если сервис запущен, OpenVPN слушает UDP-порт 1194.

Статус службы OpenVPN и прослушиваемый порт 1194/udp


Шаг 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/*

Архивация клиентских конфигураций client01.tar.gz

Скопируйте файл через scp:

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

Скопированный архив клиентских файлов через scp


Шаг 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 (на сервере и клиенте):

  1. Сгенерируйте tls ключ:
openvpn --genkey --secret ta.key
  1. Скопируйте ta.key в /etc/openvpn/server/ и /etc/openvpn/client/
  2. Добавьте в конфиг сервера:
key-direction 0
tls-auth /etc/openvpn/server/ta.key 0

И в конфиге клиента:

key-direction 1
tls-auth ta.key 1

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

  1. OpenVPN не стартует: проверьте /var/log/openvpn.log и systemctl status openvpn@server.
  2. Нет маршрутизации через VPN: проверьте push “redirect-gateway def1” и включён ли ip_forward.
  3. DNS не сменяется: проверьте push “dhcp-option DNS …” и настройки клиента (особенно Network Manager может игнорировать опции).
  4. Сертификат не проходит проверку: проверьте дату/время сервера и клиента, убедитесь, что CA совпадает и сертификаты не истекли.
  5. Проблемы с 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) изменений

  1. Если после настройки firewall сервер недоступен, откатьте добавленные прямые правила:
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -D POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADE
firewall-cmd --reload
  1. Отключите openvpn@server:
systemctl stop openvpn@server
systemctl disable openvpn@server
  1. Удалите/восстановите 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 для полного развертывания.

Поделиться: 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 быстро