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

Настройка OpenVPN на CentOS 7

• 5 min read • Linux • Обновлено 26 Nov 2025
OpenVPN: настройка сервера и клиента на CentOS 7
OpenVPN: настройка сервера и клиента на CentOS 7

Введение

OpenVPN — это открытое ПО для создания защищённой частной сети поверх публичного интернета. Оно устанавливает зашифрованный туннель между клиентом и сервером, позволяя безопасно передавать трафик. Кратко: VPN = защищённый туннель; CA = центр сертификации; DH = обмен ключами Диффи—Хеллмана.

В этой инструкции мы настроим OpenVPN-сервер и клиента на CentOS 7.

Ключевые шаги:

  • Включить репозиторий EPEL
  • Установить openvpn, easy-rsa и iptables-services
  • Сгенерировать CA, сертификаты сервера и клиента, DH
  • Настроить /etc/openvpn/server.conf
  • Настроить маршрутизацию и iptables
  • Запустить сервис openvpn@server
  • Подготовить client.ovpn и подключиться

Важно: в примерах используются IP-сети и пути, которые нужно адаптировать под вашу инфраструктуру.

Требования

  • Сервер с CentOS 7
  • root-привилегии (или sudo)
  • Доступ к порту сервера (по UDP/TCP) из клиентских сетей

Включение репозитория EPEL

Выполните:

sudo su
yum -y install epel-release

Примечание: в некоторых системах пакет называется epel-release.

Установка OpenVPN, easy-rsa и iptables

yum -y install openvpn easy-rsa iptables-services

Генерация ключей и сертификатов (easy-rsa)

На этом этапе мы создадим:

  • CA (Certificate Authority)
  • Сертификат и ключ сервера
  • Diffie-Hellman параметры
  • Сертификат и ключ клиента

Шаг 1 — скопировать шаблоны easy-rsa в /etc/openvpn:

cp -r /usr/share/easy-rsa/ /etc/openvpn/

Перейдите в каталог easy-rsa и отредактируйте файл vars:

cd /etc/openvpn/easy-rsa/2.*/
vim vars

Редактирование файла vars

Шаг 2 — загрузить vars и очистить старые ключи:

source ./vars
./clean-all

Шаг 3 — создать CA. Вас попросят ввести Country, Province, City, Organization и Common Name:

./build-ca

Создание CA

Шаг 4 — сгенерировать серверный ключ и сертификат:

./build-key-server server

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

Шаг 5 — сгенерировать параметры Diffie-Hellman (занимает время):

./build-dh

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

Шаг 6 — сгенерировать клиентский ключ и сертификат (пример с именем client):

./build-key client

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

Шаг 7 — скопировать ключи в /etc/openvpn (путь важен для конфигурации сервера):

cd /etc/openvpn/easy-rsa/2.0/
cp -r keys/ /etc/openvpn/

Примечание: в исходной инструкции была опечатка в названии каталога; используйте /etc/openvpn.

Настройка OpenVPN-сервера

Создайте файл конфигурации сервера:

cd /etc/openvpn/
vim server.conf

Вставьте следующий пример и отредактируйте под свои значения (порт, интерфейс, путь к ключам, сеть VPN):

#change with your port
port 1337

#You can use udp or tcp
proto udp

# "dev tun" will create a routed IP tunnel.
dev tun

#Certificate Configuration

#ca certificate
ca /etc/openvpn/keys/ca.crt

#Server Certificate
cert /etc/openvpn/keys/server.crt

#Server Key and keep this is secret
key /etc/openvpn/keys/server.key

#See the size a dh key in /etc/openvpn/keys/
dh /etc/openvpn/keys/dh1024.pem

#Internal IP will get when already connect
server 192.168.200.0 255.255.255.0

#this line will redirect all traffic through our OpenVPN
push "redirect-gateway def1"

#Provide DNS servers to the client, you can use goolge DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

#Enable multiple client to connect with same key
duplicate-cn

keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon

#enable log
log-append /var/log/myvpn/openvpn.log

#Log Level
verb 3

Создайте папку для логов и файл:

mkdir -p /var/log/myvpn/
touch /var/log/myvpn/openvpn.log

Важно: храните серверный ключ (server.key) в безопасном месте и с нужными правами (600).

Отключение firewalld и SELinux (варианты)

В оригинале предлагается отключить firewalld и SELinux. Это рабочий, но менее безопасный путь. Лучший вариант — настроить брандмауэр и оставить SELinux в permissive или enabled с нужными правилами.

Если вы всё же отключаете (на тестовой машине):

systemctl mask firewalld
systemctl stop firewalld

Чтобы отключить SELinux, отредактируйте:

vim /etc/sysconfig/selinux

Измените строку:

SELINUX=disabled

После изменения перезагрузите сервер.

Замечание: предпочтительнее настроить правила firewalld или использовать iptables-services и не отключать SELinux в продуктивной среде.

Маршрутизация и iptables

Шаг 1 — включить сервис iptables и очистить правила:

systemctl enable iptables
systemctl start iptables
iptables -F

Шаг 2 — добавить правило NAT для маршрутизации трафика из подсети VPN в интернет. В исходном примере была опечатка в сети. Правильный вариант:

iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptablesvpn

Замените eth0 на имя внешнего интерфейса вашего сервера (ip addr show покажет список).

Шаг 3 — включить форвардинг IPv4:

vim /etc/sysctl.conf

Добавьте или отредактируйте строку:

net.ipv4.ip_forward = 1

Примените изменения:

sysctl -p

Шаг 4 — запустить OpenVPN-сервер (юнит openvpn@server соответствует файлу /etc/openvpn/server.conf):

systemctl start openvpn@server
systemctl enable openvpn@server

Проверьте статус и логи:

systemctl status openvpn@server
tail -f /var/log/myvpn/openvpn.log

Настройка клиента

Скопируйте на клиент 3 файла из /etc/openvpn/keys/: ca.crt, client.crt, client.key (через SCP или SFTP). Пример для Windows — WinSCP.

Создайте файл client.ovpn и вставьте пример ниже, заменив remote на реальный публичный IP/домен сервера и порт:

client
dev tun
proto udp

#Server IP and Port
remote 192.168.1.104 1337

resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo

Копирование файлов на клиент через SCP

Установите клиент:

  • Windows: OpenVPN GUI (инсталлятор OpenVPN)
  • macOS: Tunnelblick или OpenVPN Connect
  • Linux: networkmanager-openvpn или запуск вручную

Пример запуска вручную на Linux:

sudo openvpn --config client.ovpn

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

  • Серверный процесс openvpn@server запущен и активен
  • Клиент успешно устанавливает соединение и получает IP из диапазона 192.168.200.0/24
  • Маршрутизация: клиентский трафик выходит в интернет через сервер (проверяем внешним IP)
  • Логи не содержат ошибок шифрования или проверки сертификатов

Типичные ошибки и как их исправить

  • Неверный путь к ключам в server.conf — проверьте /etc/openvpn/keys/
  • Опечатка в правиле iptables или неправильный внешний интерфейс — используйте ip addr
  • SELinux блокирует доступ — временно переключите в permissive и проверьте audit.log
  • Порт/протокол заблокирован провайдером — проверьте доступность порта через nc/telnet

Рекомендации по безопасности

  • Используйте сильный ключ DH (2048 или выше) и RSA 2048/3072
  • Ограничьте доступ к server.key: chmod 600
  • В продакшне не отключайте SELinux: настройте политики или добавьте исключения
  • Настройте автоматическую ротацию и отозвание сертификатов при компрометации

Сценарии отказа и откат

  • Если после изменений сервер перестал поднимать туннель: верните предыдущую конфигурацию server.conf и перезапустите openvpn@server
  • Если iptables сохранили неправильные правила, восстановите /etc/sysconfig/iptablesvpn или примените iptables-restore

Мини‑чеклист для ролей

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

  • Установил пакеты и скопировал keys/
  • Проверил порты и внешний интерфейс
  • Настроил ip_forward и iptables

Сетевой инженер:

  • Проверил NAT/маршрутизацию
  • Настроил мониторинг доступности порта

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

  • Получил ca.crt, client.crt, client.key
  • Импортировал client.ovpn и проверил подключение

Заключение

OpenVPN остаётся простым и гибким решением для создания защищённого VPN. Правильная генерация сертификатов, корректная маршрутизация и безопасное хранение ключей — основные составляющие надёжного развёртывания. Настройте брандмауэр и SELinux аккуратно, не отключая их в продакшене без крайней необходимости.

Полезные ссылки

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