Настройка OpenVPN сервера на Linux: полное пошаговое руководство

Linux 24 марта 2026
Настройка OpenVPN сервера на Linux

OpenVPN — одно из самых популярных и надёжных решений для организации VPN-подключений. В отличие от проприетарных альтернатив, OpenVPN является полностью бесплатным (Community Edition), работает на всех платформах и обеспечивает высокий уровень безопасности благодаря SSL/TLS-шифрованию. В этой статье мы разберём полный процесс настройки OpenVPN-сервера на Linux (Ubuntu/Debian) — от установки до подключения клиентов.

VPN необходим для безопасного удалённого доступа к корпоративной сети, защиты данных при работе через публичные Wi-Fi-сети и объединения офисов через зашифрованные туннели. OpenVPN поддерживает как mode server (множество клиентов подключаются к серверу), так и point-to-point (site-to-site) соединения.

Какие преимущества OpenVPN перед другими VPN-решениями?

Прежде чем приступить к установке, разберём почему OpenVPN остаётся популярным выбором:

По сравнению с WireGuard, OpenVPN более зрелый и гибкий, хотя WireGuard выигрывает в производительности и простоте. Для корпоративного использования OpenVPN обычно предпочтительнее благодаря развитой инфраструктуре PKI.

Как подготовить сервер к установке OpenVPN?

Для установки потребуется VPS или выделенный сервер с Linux. Рекомендуемые параметры:

Обновите систему и установите необходимые пакеты:

# Обновление системы
sudo apt update && sudo apt upgrade -y

# Установка OpenVPN и Easy-RSA
sudo apt install openvpn easy-rsa -y

Также включите IP-forwarding, без которого VPN-сервер не сможет маршрутизировать трафик:

# Включение IP-forwarding
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Как создать инфраструктуру PKI и сертификаты?

OpenVPN использует сертификаты X.509 для аутентификации. Создадим собственный центр сертификации (CA) с помощью Easy-RSA:

# Создание директории PKI
make-cadir ~/openvpn-ca
cd ~/openvpn-ca

# Инициализация PKI
./easyrsa init-pki

# Создание корневого CA
./easyrsa build-ca nopass
# Common Name: OpenVPN-CA

Генерация сертификата и ключа сервера

# Запрос сертификата сервера
./easyrsa gen-req server nopass

# Подписание сертификата
./easyrsa sign-req server server

# Генерация параметров Diffie-Hellman
./easyrsa gen-dh

# Генерация TLS-auth ключа (защита от DoS)
openvpn --genkey secret ta.key

Генерация клиентского сертификата

# Для каждого клиента:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

Скопируйте необходимые файлы в директорию OpenVPN:

sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key \
  pki/dh.pem ta.key /etc/openvpn/server/
Храните приватный ключ CA (pki/private/ca.key) в безопасном месте. В идеале CA должен находиться на отдельной машине, не подключённой к интернету.

Как настроить конфигурацию сервера OpenVPN?

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

sudo nano /etc/openvpn/server/server.conf

Вставьте следующую конфигурацию:

# Основные параметры
port 1194
proto udp
dev tun

# Сертификаты
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0

# Сеть VPN
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

# Безопасность
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384

# Производительность
keepalive 10 120
persist-key
persist-tun
comp-lzo no

# Привилегии
user nobody
group nogroup

# Логирование
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3
mute 20

# Поддержка нескольких клиентов
max-clients 100
explicit-exit-notify 1
Параметр push "redirect-gateway def1" направляет ВЕСЬ трафик клиента через VPN. Если нужен только доступ к корпоративной сети — уберите эту строку и добавьте push "route 192.168.0.0 255.255.0.0" для нужных подсетей.

Как настроить файрвол и NAT для OpenVPN?

Для маршрутизации трафика VPN-клиентов через интернет необходимо настроить NAT (masquerade) на сервере:

# Определяем основной сетевой интерфейс
ip route | grep default
# Допустим, это eth0

# Настройка iptables
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Сохранение правил
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

Подробнее о настройке iptables можно прочитать в нашей статье iptables: правила файрвола в Linux. Для мониторинга сервера рекомендуем также ознакомиться с мониторингом Debian-сервера.

Как запустить и включить автозагрузку OpenVPN?

# Запуск OpenVPN
sudo systemctl start openvpn-server@server

# Включение автозагрузки
sudo systemctl enable openvpn-server@server

# Проверка статуса
sudo systemctl status openvpn-server@server

# Проверка, что tun0 создан
ip addr show tun0

Если сервис не запускается, проверьте логи:

sudo journalctl -u openvpn-server@server -e --no-pager
sudo cat /var/log/openvpn/openvpn.log

Как создать конфигурацию для клиентов?

Для удобства создадим скрипт, который генерирует единый .ovpn-файл с встроенными сертификатами:

#!/bin/bash
# make-client-config.sh
CLIENT=$1
CA=$(cat /etc/openvpn/server/ca.crt)
CERT=$(cat ~/openvpn-ca/pki/issued/${CLIENT}.crt)
KEY=$(cat ~/openvpn-ca/pki/private/${CLIENT}.key)
TA=$(cat /etc/openvpn/server/ta.key)

cat <<EOF > ~/clients/${CLIENT}.ovpn
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-GCM
auth SHA256
key-direction 1
verb 3

<ca>
${CA}
</ca>
<cert>
${CERT}
</cert>
<key>
${KEY}
</key>
<tls-auth>
${TA}
</tls-auth>
EOF

echo "Config created: ~/clients/${CLIENT}.ovpn"
# Использование
mkdir -p ~/clients
chmod +x make-client-config.sh
./make-client-config.sh client1

Передайте файл client1.ovpn клиенту по безопасному каналу (не по email!). Клиент импортирует его в OpenVPN Connect (Windows, macOS, iOS, Android) или через командную строку Linux.

Как настроить доступ к корпоративной сети через OpenVPN?

Для site-to-site или доступа к корпоративным ресурсам за VPN-сервером настройте маршруты:

# В server.conf добавьте маршруты к корпоративным подсетям:
push "route 192.168.1.0 255.255.255.0"    # Офисная сеть
push "route 192.168.2.0 255.255.255.0"    # Серверная подсеть
push "route 10.0.0.0 255.255.0.0"         # Внутренняя сеть

На маршрутизаторе корпоративной сети добавьте обратный маршрут:

# На корпоративном маршрутизаторе:
ip route add 10.8.0.0/24 via <IP_VPN_SERVER>

Для разграничения доступа используйте per-client конфигурации:

# В server.conf:
client-config-dir /etc/openvpn/ccd

# Создайте файл /etc/openvpn/ccd/client1:
push "route 192.168.1.0 255.255.255.0"
ifconfig-push 10.8.0.10 10.8.0.9

Как мониторить подключения и производительность OpenVPN?

OpenVPN предоставляет management interface для мониторинга:

# Добавьте в server.conf:
management 127.0.0.1 7505

# Подключение к management interface:
telnet 127.0.0.1 7505

# Команды:
status      # Текущие подключения
kill client1  # Отключить клиента
load-stats  # Статистика

Просмотр статуса через файл

# status.log обновляется каждые 60 секунд
cat /var/log/openvpn/status.log

# Скрипт мониторинга активных подключений
watch -n 5 'grep "^CLIENT_LIST" /var/log/openvpn/status.log | column -t -s,'

Для централизованного мониторинга серверов рекомендуем использовать подход из статьи мониторинг Debian-сервера.

Как усилить безопасность OpenVPN-сервера?

Базовая конфигурация уже достаточно безопасна, но можно усилить защиту:

# Отзыв скомпрометированного сертификата
cd ~/openvpn-ca
./easyrsa revoke client-compromised
./easyrsa gen-crl

# Скопируйте CRL в OpenVPN
sudo cp pki/crl.pem /etc/openvpn/server/

# Добавьте в server.conf:
crl-verify crl.pem

Также рекомендуется настроить автоматический мониторинг сертификатов, как описано в статье мониторинг SSL-сертификатов, адаптировав подход для OpenSSL. Для дополнительной информации обратитесь к официальному руководству по hardening OpenVPN.

Как автоматизировать управление клиентами?

При большом количестве пользователей ручное управление сертификатами становится трудоёмким. Автоматизируйте процесс:

#!/bin/bash
# add-vpn-user.sh — создание нового VPN-пользователя
set -e
USERNAME=$1

if [ -z "$USERNAME" ]; then
  echo "Usage: $0 username"
  exit 1
fi

cd ~/openvpn-ca

# Генерация сертификата
./easyrsa gen-req "$USERNAME" nopass
./easyrsa sign-req client "$USERNAME"

# Создание .ovpn файла
./make-client-config.sh "$USERNAME"

echo "VPN user $USERNAME created. Config: ~/clients/${USERNAME}.ovpn"
#!/bin/bash
# revoke-vpn-user.sh — отзыв VPN-пользователя
set -e
USERNAME=$1
cd ~/openvpn-ca
./easyrsa revoke "$USERNAME"
./easyrsa gen-crl
sudo cp pki/crl.pem /etc/openvpn/server/
echo "Certificate for $USERNAME revoked."

Для интеграции с Active Directory можно использовать плагин openvpn-auth-ldap, который проверяет логин/пароль через LDAP, дополнительно к сертификату. Более подробно об интеграции с AD читайте в документации на openvpn.net.

Часто задаваемые вопросы

Какой протокол лучше: OpenVPN, WireGuard или IPsec?

OpenVPN — зрелое и проверенное решение с максимальной совместимостью и гибкостью настройки. WireGuard проще и быстрее, но менее гибок. IPsec лучше для site-to-site VPN. Для удалённого доступа сотрудников OpenVPN остаётся оптимальным выбором.

Можно ли использовать OpenVPN бесплатно?

Да, OpenVPN Community Edition — полностью бесплатное ПО с открытым исходным кодом (GPLv2). Платная версия OpenVPN Access Server добавляет веб-интерфейс, но для большинства задач достаточно Community Edition.

Какой порт лучше использовать для OpenVPN?

По умолчанию OpenVPN использует UDP 1194. Для обхода блокировок можно использовать TCP 443 — он выглядит как обычный HTTPS-трафик. UDP обеспечивает лучшую производительность, TCP — лучшую проходимость через файрволы.

ООО АйТи Фреш возьмём это на себя

Настроим VPN для вашей компании

Развернём OpenVPN-сервер, настроим сертификаты, маршрутизацию и мониторинг. Обеспечим безопасный удалённый доступ для сотрудников к корпоративной сети.

10+лет опыта
500+серверов
24/7поддержка

Читайте также