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

Установка и настройка OpenVPN на Rocky Linux 9

9 min read VPN Обновлено 27 Nov 2025
Установка OpenVPN на Rocky Linux 9
Установка OpenVPN на Rocky Linux 9

Схема соединения OpenVPN (сервер — CA — клиент)

Виртуальная частная сеть (VPN) позволяет выходить в интернет, скрывая местоположение, безопасно использовать ненадёжные сети и обходить географические ограничения и цензуру. OpenVPN — свободное TLS‑решение для организации VPN.

В этом руководстве мы установим OpenVPN на сервер с Rocky Linux 9, настроим отдельный сервер как частный центр сертификации (CA), подпишем сертификаты, создадим конфигурацию сервера и клиента и настроим перенаправление всего трафика клиента через VPN.

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

  • Системным администраторам, которые хотят запускать собственный VPN на Rocky Linux 9.
  • Инженерам по информационной безопасности, которым нужен независимый PKI для OpenVPN.
  • Любому, кто хочет перенаправлять весь трафик клиента через защищённый сервер.

Ключевые понятия

  • CA — центр сертификации: генерирует и подписывает сертификаты.
  • PKI — инфраструктура открытых ключей: структура каталогов и ключей/сертификатов.
  • CSR — запрос на сертификат (Certificate Signing Request).
  • tls‑crypt — пред‑поделённый ключ, скрывающий TLS‑подключения OpenVPN.

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

  • Два сервера с Rocky Linux 9 (OpenVPN-сервер и CA‑сервер), оба с IPv4/IPv6 по необходимости.
  • На сервере OpenVPN запущен firewalld.
  • Неразовый пользователь с sudo на обоих серверах.
  • Клиентское устройство (в примере — Rocky Linux 9) с OpenVPN‑клиентом.
  • Система обновлена на обоих серверах:
$ sudo dnf update

Важно: CA‑сервер должен выполнять только операции по выпуску/подписанию сертификатов — по возможности держите его оффлайн, когда он не используется.

Шаг 1 — Подготовка CA‑сервера

CA — это сущность, которая подписывает сертификаты. Мы используем отдельный сервер как приватный CA.

Установка Easy‑RSA

EPEL‑репозиторий содержит пакет easy‑rsa. Установите его:

$ sudo dnf install epel-release
$ sudo dnf install easy-rsa

Создание директории PKI

$ mkdir ~/easy-rsa
$ ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/
$ chmod 700 /home//easy-rsa
$ cd ~/easy-rsa
$ ./easyrsa init-pki

Ожидаемый вывод подтвердит создание PKI: /home//easy-rsa/pki

Создание центра сертификации

Создайте файл vars для атрибутов CA и откройте в редакторе:

$ cd ~/easy-rsa
$ nano vars

Вставьте (локально скорректируйте значения при необходимости):

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "Howtoforge"
set_var EASYRSA_REQ_EMAIL      "[email protected]"
set_var EASYRSA_REQ_OU         "Community"
set_var EASYRSA_ALGO           "ec"
set_var EASYRSA_DIGEST         "sha512"

Сохраните и выполните:

$ ./easyrsa build-ca

При запросе задайте надёжную passphrase (или используйте nopass, если готовы к отсутствию пароля). Будут созданы ~/easy-rsa/pki/ca.crt и ~/easy-rsa/pki/private/ca.key. Файл ca.key надо хранить строго на CA‑сервере и защищать — при компрометации его надо деструктивно аннулировать CA.

Шаг 2 — Установка OpenVPN и Easy‑RSA на OpenVPN‑сервер

На OpenVPN‑сервере:

$ sudo dnf install epel-release
$ sudo dnf install openvpn easy-rsa
$ mkdir ~/easy-rsa
$ ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/
$ chmod 700 ~/easy-rsa

Шаг 3 — Создание PKI для OpenVPN‑сервера

На OpenVPN‑сервере создайте vars (минимально):

$ cd ~/easy-rsa
$ nano vars

Вставьте:

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Инициализация PKI:

$ ./easyrsa init-pki

Каждый сервер имеет собственную PKI‑директорию: OpenVPN‑серверу нужны только запросы и приватные ключи сервера/клиентов, которые он хранит локально.

Шаг 4 — Создание серверного запроса и приватного ключа

Сгенерируйте пару ключ/CSR на OpenVPN‑сервере:

$ cd ~/easy-rsa
$ ./easyrsa gen-req server nopass

Это создаст:

  • req: /home//easy-rsa/pki/reqs/server.req
  • key: /home//easy-rsa/pki/private/server.key

Скопируйте приватный ключ в защищённый каталог OpenVPN:

$ sudo cp /home//easy-rsa/pki/private/server.key /etc/openvpn/server/

CSR отправьте на CA для подписи (scp или копирование содержимого).

Шаг 5 — Подписание CSR CA‑сервером

Скопируйте server.req на CA‑сервер в /tmp и выполните там:

$ cd ~/easy-rsa
$ ./easyrsa import-req /tmp/server.req server
$ ./easyrsa sign-req server server

Подтвердите подпись, введите passphrase CA. В результате появится /home//easy-rsa/pki/issued/server.crt и CA‑сертификат ca.crt. Перенесите их обратно на OpenVPN‑сервер:

$ scp pki/issued/server.crt username@your_vpn_server_ip:/tmp
$ scp pki/ca.crt username@your_vpn_server_ip:/tmp
$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

Шаг 6 — Настройка tls‑crypt

На OpenVPN‑сервере сгенерируйте общий секрет для tls‑crypt:

$ cd ~/easy-rsa
$ openvpn --genkey secret ta.key
$ sudo cp ta.key /etc/openvpn/server

Это добавляет защиту от неавторизованного трафика и затрудняет обнаружение OpenVPN‑сессий.

Шаг 7 — Создание сертификата для клиента

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

$ mkdir -p ~/client-configs/keys
$ chmod -R 700 ~/client-configs
$ cd ~/easy-rsa
$ ./easyrsa gen-req client1 nopass
$ cp pki/private/client1.key ~/client-configs/keys/

Отправьте client1.req на CA, подпишите:

$ scp pki/reqs/client1.req username@your_ca_server_ip:/tmp
# На CA
$ cd ~/easy-rsa
$ ./easyrsa import-req /tmp/client1.req client1
$ ./easyrsa sign-req client client1

Верните client1.crt на OpenVPN‑сервер и поместите всё в ~/client-configs/keys:

$ scp pki/issued/client1.crt username@your_server_ip:/tmp
$ cp /tmp/client1.crt ~/client-configs/keys/
$ cp ~/easy-rsa/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
$ sudo chown username.username ~/client-configs/keys/*

Шаг 8 — Конфигурация OpenVPN‑сервера

Скопируйте пример конфигурации и отредактируйте:

$ sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/
$ sudo nano /etc/openvpn/server/server.conf

Изменения, которые рекомендуется внести (вставить/раскомментировать/заменить соответствующие строки):

  • HMAC: заменить tls-auth на tls‑crypt:
;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key
  • Шифрование канала данных: заменить AES‑256‑CBC на AES‑256‑GCM:
;cipher AES-256-CBC
cipher AES-256-GCM
  • HMAC‑контроль сообщений:
auth SHA256
  • Отключить Diffie‑Hellman (при ECC):
;dh dh2048.pem
dh none
  • Низкопривилегированная работа демона:
user nobody
group nobody

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

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

push "redirect-gateway def1 bypass-dhcp"

Настройка DNS (OpenDNS в примере):

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Порт и протокол

По умолчанию OpenVPN слушает 1194/UDP. В примере меняем на TCP/443:

port 443
proto tcp
;proto udp
explicit-exit-notify 0

Указание файлов сертификатов

Если вы использовали другие имена при gen‑req, проверьте строки cert/key:

cert server.crt
key server.key  # This file should be kept secret

Логи и SELinux

По умолчанию статус логируется в /run — при включённом SELinux безопаснее записывать в /var/log:

status /var/log/openvpn-status.log

Сохраните файл.

Шаг 9 — Включение IP‑форвардинга

Откройте /etc/sysctl.conf и добавьте:

net.ipv4.ip_forward = 1

Подгрузите параметры:

$ sudo sysctl -p

Это позволяет серверу маршрутизировать трафик клиентов в интернет.

Шаг 10 — Конфигурация firewall (firewalld)

Проверьте активные зоны:

$ sudo firewall-cmd --get-active-zones

Если интерфейс tun0 не в trusted, добавьте:

$ sudo firewall-cmd --zone=trusted --add-interface=tun0
$ sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0

Разрешите сервис OpenVPN и добавьте в trusted:

$ sudo firewall-cmd --permanent --add-service openvpn
$ sudo firewall-cmd --permanent --zone=trusted --add-service openvpn
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services --zone=trusted

Включите маскарадинг (NAT):

$ sudo firewall-cmd --add-masquerade
$ sudo firewall-cmd --add-masquerade --permanent
$ sudo firewall-cmd --query-masquerade

Добавьте явное POSTROUTING правило для подсети OpenVPN (в примере 10.8.0.0/24):

$ DEVICE=$(ip route | awk '/^default via/ {print $5}')
$ sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEVICE -j MASQUERADE
$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload

Важно: адаптируйте подсеть 10.8.0.0/24 под свою топологию, если она конфликтует с локальной сетью клиента.

Шаг 11 — Запуск OpenVPN

Включите сервис при старте и запустите:

$ sudo systemctl -f enable [email protected]
$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]

Ожидаемый статус: Active (running). Логи покажут Initialization Sequence Completed.

Шаг 12 — Создание клиентской конфигурации

Создайте базовый конфиг клиента:

$ mkdir -p ~/client-configs/files
$ cp /usr/share/doc/openvpn/sample/sample-config-files/client.conf ~/client-configs/base.conf
$ nano ~/client-configs/base.conf

Измените remote на публичный IP/порт сервера:

remote your_server_ip 443
proto tcp
user nobody
group nobody

Закомментируйте ca/cert/key, потому что внутри .ovpn будут встраиваться PKI‑артефакты в секциях , , , .

Синхронизируйте шифр и auth с сервером:

cipher AES-256-GCM
auth SHA256
key-direction 1

Создайте скрипт для сборки одного .ovpn файла с включёнными сертификатом, ключом и ta.key:

$ nano ~/client-configs/make_config.sh

Вставьте (сохраните):

#!/bin/bash
 
# First argument: Client identifier
 
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
 
cat ${BASE_CONFIG} \
    <(echo -e '') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '\n') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '\n') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '\n') \
    ${KEY_DIR}/ta.key \
    <(echo -e '') \
    > ${OUTPUT_DIR}/${1}.ovpn

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

$ chmod 700 ~/client-configs/make_config.sh
$ cd ~/client-configs
$ ./make_config.sh client1
$ ls ~/client-configs/files
# client1.ovpn

Файл client1.ovpn передайте клиенту безопасным способом (SCP, SFTP, USB и т.п.).

Шаг 13 — Установка и тестирование клиента

На клиенте (в примере Rocky Linux 9):

$ sudo dnf install openvpn
$ sudo openvpn --config client1.ovpn

Ожидайте лог, где будут сообщения VERIFY OK и Initialization Sequence Completed. Проверьте внешний IP через https://whatismyip.com — он должен совпадать с IP вашего OpenVPN‑сервера.

Результат whatismyip — отображение IP сервера

Проверьте DNS‑утечки на https://www.dnsleaktest.com/ — должны отображаться OpenDNS‑резолверы, если вы их запушили.

Результаты теста утечки DNS

Чтобы запустить OpenVPN в фоне:

sudo openvpn --config client1.ovpn --daemon
$ ps aux | grep openvpn
$ sudo kill -9 

OpenVPN также имеет GUI‑клиенты для Windows, macOS, Android и iOS, куда можно импортировать .ovpn.

Шаг 14 — Отзыв сертификатов (revoke)

На CA‑сервере:

$ cd ~/easy-rsa
$ ./easyrsa revoke client1
$ ./easyrsa gen-crl

Скопируйте pki/crl.pem на OpenVPN‑сервер и поместите в /etc/openvpn/server:

$ scp ~/easy-rsa/pki/crl.pem username@your_server_ip:/tmp
$ sudo cp /tmp/crl.pem /etc/openvpn/server/

В серверной конфигурации добавьте:

crl-verify crl.pem

Перезапустите OpenVPN. Отозванный клиент не сможет подключиться.

Рекомендации по безопасности и жёсткому ужесточению

  • Храните ca.key исключительно на CA‑сервере, с ограниченным доступом и резервным копированием в зашифрованном хранилище.
  • Используйте ECC (EASYRSA_ALGO=”ec”) и SHA‑512 в CA, а для канала данных AES‑GCM и HMAC SHA256.
  • Регулярно проверяйте и обновляйте пакеты безопасности (dnf update).
  • Разделяйте роли: один сервер — CA, другой — VPN. CA по возможности держите оффлайн.
  • Ограничьте доступ SSH к CA по IP и ключам, не используйте парольную аутентификацию.
  • Настройте журналирование и мониторинг: auditd, системные логи, alerting на аномалии.
  • Подпишите CRL и автоматизируйте распространение нового crl.pem на OpenVPN‑сервер(а).

Важно: не используйте nopass для CA‑ключа без дополнительных мер защиты. Для CA допустимы более строгие процедуры, включая аппаратные HSM.

Руководство по расследованию проблем (runbook)

  1. Клиент не может подключиться:
    • Проверьте журнал OpenVPN на сервере: sudo journalctl -u [email protected]
    • Проверьте совпадение сертификатов и отсутствие crl‑браузинга.
    • Убедитесь, что порт/протокол открыты в firewall и слушаются: sudo ss -lnpt | grep openvpn
  2. После подключения нет доступа в интернет:
    • Проверьте net.ipv4.ip_forward = 1 и sysctl -p.
    • Убедитесь, что MASQUERADE правило применено и правило POSTROUTING указано верно.
  3. DNS‑утечки:
    • Убедитесь, что push dhcp‑option DNS … присутствует и клиент применил настройки.
  4. Разрыв по таймауту:
    • Проверьте network MTU, latency, переключитесь на UDP, если нужно.

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

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

  • Защитить /home/*/easy-rsa/pki/private/ca.key
  • Запускать CA только при необходимости
  • Хранить журнал подписаний
  • Генерировать и передавать crl.pem после отзывов

Администратор VPN‑сервера:

  • Хранить server.key в /etc/openvpn/server с правами root
  • Настроить firewall и NAT
  • Настроить sysctl ip_forward
  • Обновлять OpenVPN и OpenSSL

Оператор клиента:

  • Импортировать client.ovpn
  • Проверить DNS и внешний IP
  • Тестировать доступ к ресурсам за VPN

Мини‑методология создания PKI

  1. Инициализация PKI на CA и OpenVPN‑серверах отдельно.
  2. Генерация приватных ключей локально и генерация CSR на той же машине.
  3. Передача CSR на CA, подпись и возврат подписанных CRT пользователю.
  4. Контроль версий и резервных копий ключей и crl.

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

  • OpenVPN‑служба запущена и активна на сервере.
  • Клиент получает адрес из диапазона OpenVPN и видит внешний IP сервера.
  • DNS‑запросы проходят через указанные резолверы (нет утечек).
  • Отзыв сертификата блокирует подключение отозванного клиента.

Типовые тесты и критерии приёмки

  • Подключение клиента: успешная TLS‑аутентификация и инициализация туннеля.
  • Маршрутизация: проверка traceroute/route по 0.0.0.0 → через туннель.
  • NAT: проверка исходящего IP на whatismyip.com.
  • DNS: стандартный и расширенный тест на dnsleaktest.com.

Модель зрелости внедрения VPN (уровни)

  • Уровень 0 — Proof of Concept: OpenVPN с парой клиентов, ручное управление сертификатами.
  • Уровень 1 — Production‑Basic: Автозагрузка сервиса, регулярные бэкапы, ручные отзывы.
  • Уровень 2 — Production‑Hardened: Отдельный CA, автоматизация CRL, мониторинг, бэкапы с шифрованием.
  • Уровень 3 — Enterprise: HSM для CA, централизованное управление сертификатами, аудит и SSO интеграция.

Типовые ошибки и способы их исправления

  • “VERIFY ERROR” — проверьте совпадение ca.crt и цепочки сертификатов, проверьте дату/время на серверах.
  • “Connection refused” — неверный порт/iptables/firewalld блокирует входящие.
  • “TLS key negotiation failed” — проверьте ta.key и параметр key‑direction.

Матрица рисков и смягчения

  • Компрометация ca.key: высокий риск → хранить оффлайн, использовать HSM, немедленно генерировать новую CA и отзывать старую.
  • Неправильный NAT/маскарадинг: средний риск → автоматические тесты маршрута и CI проверка конфигурации.
  • DNS‑утечки: средний риск → push dhcp‑option и принудительные правила DNS через firewall.

Простая диаграмма принятия решения (Mermaid)

flowchart TD
  A[Нужен VPN] --> B{Есть ли собственный сервер?}
  B -- Да --> C{Нужен приватный CA?}
  B -- Нет --> D[Использовать облачный VPN или хостинг]
  C -- Да --> E[Развернуть CA отдельно и следовать руководству]
  C -- Нет --> F[Сгенерировать локальный самоподписанный сертификат]
  E --> G[Настроить OpenVPN и клиенты]
  F --> G

Проверка совместимости и миграция

  • OpenVPN 2.4+ поддерживает tls‑crypt и AES‑GCM; старые клиенты (до 2.4) могут не поддерживать AEAD. В этом случае используйте совместимые cipher‑списки или обновите клиента.
  • Если у вас уже есть PKI на RSA и вы переходите на ECC — планируйте постепенную миграцию с параллельной поддержкой старых сертификатов.

Короткое объявление (для рассылки, 100–200 слов)

Мы подготовили полное руководство по установке OpenVPN на Rocky Linux 9 с отдельным приватным CA. В руководстве показано, как настроить PKI с помощью Easy‑RSA, подписать серверные и клиентские сертификаты, включить tls‑crypt, настроить шифрование AES‑GCM, выполнить настройки firewall и NAT, собрать единый .ovpn‑профиль и протестировать подключение. Включены советы по безопасности, runbook для устранения неполадок и процедуры отзыва сертификатов. Руководство пригодится администраторам, которые хотят контролировать собственную VPN‑инфраструктуру без привлечения внешних сервисов.

1‑строчный глоссарий

  • CA — центр сертификации; PKI — инфраструктура открытых ключей; CSR — запрос на подпись; CRL — список отозванных сертификатов.

Итог

  • Следуйте шагам по созданию PKI, подписи и конфигурации OpenVPN.
  • Обеспечьте защиту CA и автоматизацию распространения CRL.
  • Тестируйте подключение клиента и проверяйте DNS‑утечки.

Если у вас остались вопросы или нужна помощь с конкретной конфигурацией — опишите окружение (IP‑сеть, версии OpenVPN/OpenSSL, используемые порты) и мы поможем точечно.

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

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

Ошибка Microsoft Store 0x80d03801 — как исправить
Windows

Ошибка Microsoft Store 0x80d03801 — как исправить

Как защитить Windows от трояна Emotet
Безопасность

Как защитить Windows от трояна Emotet

Как изменить язык YouTube — инструкция
Руководство

Как изменить язык YouTube — инструкция

iCloud Photos не синхронизируется — быстрые решения
Техподдержка

iCloud Photos не синхронизируется — быстрые решения

Cordon и drain в Kubernetes — безопасное обслуживание узлов
Kubernetes

Cordon и drain в Kubernetes — безопасное обслуживание узлов

Убрать режим уведомления Windows
Windows

Убрать режим уведомления Windows