Настройка OpenVPN сервера на Linux: полное пошаговое руководство
OpenVPN — один из самых проверенных инструментов для построения VPN. Мы используем его в проектах уже много лет, и он ни разу не подвёл. Community Edition полностью бесплатен, работает на любой платформе и шифрует трафик через SSL/TLS — этого достаточно для большинства корпоративных задач. В этой статье разберём настройку OpenVPN-сервера на Linux (Ubuntu/Debian) с нуля: от установки до подключения первого клиента.
Зачем вообще нужен VPN? На практике — три сценария: безопасный удалённый доступ сотрудников к корпоративной сети, защита трафика в публичных Wi-Fi-сетях (особенно актуально для командировочных) и объединение офисов через зашифрованные туннели. OpenVPN закрывает все три. Он поддерживает mode server — когда к одному серверу подключаются десятки клиентов — и point-to-point (site-to-site) для связи между площадками.
Какие преимущества OpenVPN перед другими VPN-решениями?
Почему именно OpenVPN, а не что-то другое? Вот что перевешивает в его пользу на реальных проектах:
- Безопасность: SSL/TLS с поддержкой AES-256-GCM, HMAC-SHA256, Perfect Forward Secrecy — стек, который не стыдно показать на аудите
- Гибкость: работает через UDP и TCP, при необходимости поднимается на порту 443 — со стороны выглядит как обычный HTTPS-трафик
- Кросс-платформенность: клиенты есть для Windows, macOS, Linux, iOS, Android — один сервер, любые устройства
- Масштабируемость: без особых танцев держит сотни одновременных подключений — для компании до 50 рабочих мест это с запасом
- Аудит: открытый исходный код, который уже прошёл несколько независимых проверок безопасности — это не просто слова вендора
- NAT-friendly: поднимается за NAT без дополнительной настройки, что в офисных сетях встречается сплошь и рядом
Да, WireGuard быстрее и проще в конфигурации — спорить не буду. Но в корпоративной среде OpenVPN выигрывает за счёт зрелой PKI-инфраструктуры: отзыв сертификатов, per-client конфиги, интеграция с существующими CA. Если у вас больше пяти сотрудников с разными правами доступа — это важно.
Как подготовить сервер к установке OpenVPN?
Нужен VPS или выделенный сервер под Linux. Без экзотики — вот что реально работает:
- ОС: Ubuntu 22.04/24.04 LTS или Debian 12 — всё остальное можно, но геморроя больше
- ОЗУ: минимум 512 МБ, лучше 1 ГБ — иначе при пиковой нагрузке будет неприятно
- Статический внешний IP-адрес — без него клиенты просто не найдут сервер после перезагрузки
- Открытый порт UDP 1194 (или TCP 443, если UDP блокируется на стороне клиента)
Сначала обновите систему и поставьте нужные пакеты:
# Обновление системы
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. Поднимем собственный центр сертификации с помощью 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/
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: правила файрвола в 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 передайте пользователю по защищённому каналу — мессенджер с шифрованием, корпоративный портал, SCP, что угодно, только не обычный 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-сервера?
Базовая конфигурация уже достаточно крепкая, но если хочется сделать сервер по-настоящему устойчивым — вот что добавляем в первую очередь:
- Переходите с
tls-authнаtls-crypt— он не просто подписывает control channel, но и шифрует его, что существенно сужает поверхность атаки - Включите
verify-client-cert require— без клиентского сертификата подключение невозможно, никаких исключений - Настройте CRL (Certificate Revocation List) — когда сотрудник увольняется, его сертификат отзывается и доступ закрывается мгновенно
- При необходимости ограничьте подключение по IP через iptables — особенно актуально для администраторских аккаунтов
- Изолируйте процесс через
chroot /etc/openvpn/jail— даже если в OpenVPN найдут уязвимость, из chroot-окружения далеко не уйти - На всех клиентах включите
remote-cert-tls server— простая директива, которая блокирует MITM-атаки на уровне TLS-хендшейка
# Отзыв скомпрометированного сертификата
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 — там есть детали, которые сложно собрать по кускам из разных источников.
Как автоматизировать управление клиентами?
Когда пользователей становится больше 20–30, ручная выдача сертификатов превращается в настоящую головную боль. Выпустил, отозвал, потерял запрос — и понеслось. Автоматизируйте это с самого начала:
#!/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?
Нас часто спрашивают: а почему не WireGuard, не IPsec? Честный ответ такой. WireGuard быстрее и проще в настройке — но гибкости меньше, и с некоторыми корпоративными сценариями он просто не справляется. IPsec хорош для site-to-site, когда соединяете офисы. А для удалённого доступа сотрудников OpenVPN по-прежнему вне конкуренции — 20 лет в продакшене, совместимость с чем угодно, и настроить можно под любые требования безопасности.
Можно ли использовать OpenVPN бесплатно?
OpenVPN Community Edition — полностью бесплатный open source под лицензией GPLv2. Никаких скрытых ограничений по числу пользователей или функциям. Платный OpenVPN Access Server даёт красивый веб-интерфейс, но если вас не пугает конфиг-файл, Community Edition закроет 95% задач.
Какой порт лучше использовать для OpenVPN?
По умолчанию OpenVPN слушает UDP 1194. На практике это оптимальный выбор — меньше overhead, лучше производительность. Но если клиент сидит за жёстким корпоративным файрволом или в гостиничном Wi-Fi, UDP часто режут. В таких случаях переходим на TCP 443 — файрвол видит это как обычный HTTPS и пропускает без вопросов. Минус — чуть выше задержки из-за двойного TCP.
Настроим VPN для вашей компании
Развернём OpenVPN-сервер, настроим сертификаты, маршрутизацию и мониторинг. Обеспечим безопасный удалённый доступ для сотрудников к корпоративной сети.
Комментарии