openvpn сервер на ubuntu
OpenVPN сервер на Ubuntu: как не превратить VPS в решето безопасности
Если вы решили поднять openvpn сервер на ubuntu, то, скорее всего, уже знаете, зачем вам это нужно. Но даже опытные администраторы допускают ошибки, которые сводят на нет всю защиту. Разберём, как настроить всё правильно и какие грабли ждут новичков. Здесь не будет воды — только технические детали, реальные сценарии и честные предупреждения.
Почему свой сервер — это не паранойя, а необходимость
Провайдеры вроде «Ростелекома» или МТС видят каждый ваш запрос. Блокировки Telegram, YouTube, рунета — это реальность. Даже если вы просто сидите в публичном Wi-Fi в московском кафе, ваш трафик может перехватить кто угодно. Свой OpenVPN на VPS даёт контроль: вы сами выбираете логирование (а лучше его отключаете), шифрование и юрисдикцию. Торренты, обход цензуры, безопасная работа — для всего этого нужен собственный сервер.
Но есть нюанс: мало просто установить openvpn. Нужно закрыть утечки DNS, настроить kill switch, защититься от Deep Packet Inspection (DPI) и не забыть про perfect forward secrecy. Иначе ваш «защищённый» туннель будет как бумажная стена.
OpenVPN vs WireGuard vs IKEv2: что выбрать для Ubuntu в 2025 году?
Многие гайды предлагают ставить WireGuard «потому что быстрее». Но у каждого протокола свои слабые места. Сравним их в таблице.
| Параметр | OpenVPN (TCP/UDP) | WireGuard | IKEv2/IPsec |
|---|---|---|---|
| Шифрование по умолчанию | AES-256-GCM, ChaCha20-Poly1305 (опционально) | ChaCha20-Poly1305 | AES-256-GCM, 3DES (устарел) |
| Handshake | TLS 1.3 (сертификаты + ECDHE) | Noise_IK (прежде всего ключи + PSK) | IKEv2 с EAP или сертификатами |
| Perfect forward secrecy | Да (ECDHE) | Да (смена ключей каждые 2 минуты) | Да (DH группы) |
| Маскировка трафика | OpenVPN легко детектится DPI по портам | WireGuard можно задетектить по фиксированному UDP-порту | IKEv2 часто пропускают, но легко задетектить по IPsec |
| Поддержка на роутерах | Широкая (Asus, Keenetic, OpenWrt) | Хорошая (OpenWrt, Keenetic) | Встроена в Windows, macOS, iOS |
| Аудиты безопасности | Cure53, Quarkslab (много раз) | Cure53, (но есть уязвимости в реализации) | Встроенные протоколы (но много уязвимостей в IKEv1) |
| Скорость на среднем VPS ($5/мес) | 200-400 Мбит/с (AES-NI) | 800-1000 Мбит/с | 300-600 Мбит/с |
| Требования к CPU | Средние (AES-NI ускоряет) | Низкие | Средние |
| Простота настройки | Средняя (сертификаты, iptables) | Простая (один конфиг) | Сложная (StrongSwan, сертификаты) |
| Split tunnelling | Да (через маршруты) | Да (через AllowedIPs) | Да (через политики) |
| Kill switch | Легко (iptables или ufw) | Сложнее (требует настройки маршрутов) | Встроен в клиенты (но не на сервере) |
Вердикт: OpenVPN остаётся королём маскировки и гибкости. WireGuard быстрее, но его легко заблокировать. IKEv2 удобен для мобильных устройств, но сложен в настройке на сервере. Для российского региона, где DPI активно блокирует VPN, лучше OpenVPN + обфускация (например, через TCP 443 или Shadowsocks поверх). Но об этом позже.
Пошаговая настройка OpenVPN сервера на Ubuntu: от ECDHE до kill switch
Я не буду повторять миллион раз переписанные команды из официалки. Дам только то, что реально важно. Предполагаем, что у вас есть VPS (например, на Timeweb или Selectel) с Ubuntu 22.04 или 24.04, и вы зашли по SSH.
1. Генерация ключей с ECDHE (эллиптические кривые)
Используем easy-rsa с параметром nopass для сервера. Но вместо RSA 2048 бит — ECDSA P-384. Это быстрее и безопаснее.
apt update && apt install openvpn easy-rsa -y
make-cadir ~/easy-rsa
cd ~/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass
# для сервера используем ECDSA
./easyrsa --curve=secp384r1 gen-req server nopass
./easyrsa --curve=secp384r1 sign-req server server
# клиент
./easyrsa --curve=secp384r1 gen-req client1 nopass
./easyrsa --curve=secp384r1 sign-req client client1
# DH параметры (можно не генерировать, если используем ECDHE)
openssl dhparam -out pki/dh.pem 2048
Важно: отключите слабые шифры в конфиге сервера. Добавьте строку:
tls-crypt pki/ta.key
Это защитит от атак на TLS handshake.
2. Конфиг сервера — никаких компромиссов
Создайте /etc/openvpn/server.conf:
port 443
proto tcp
dev tun
ca pki/ca.crt
cert pki/issued/server.crt
key pki/private/server.key
dh pki/dh.pem
tls-crypt pki/ta.key
cipher AES-256-GCM
auth SHA512
tls-version-min 1.3
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256
reneg-sec 3600
sndbuf 0
rcvbuf 0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.2"
push "dhcp-option DNS 1.0.0.2"
keepalive 10 120
topology subnet
client-to-client
max-clients 10
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login
Ключевые моменты:
- Порт 443 TCP — маскируется под HTTPS, DPI часто пропускает.
- tls-crypt — шифрует TLS‑канал, делая невидимым сам факт OpenVPN.
- tls-cipher — только ECDHE + AES-256-GCM или ChaCha20.
- push "redirect-gateway def1" — весь трафик через VPN.
- DNS через 1.1.1.2 (блокирует вредоносное ПО) — не через провайдера.
3. Маршрутизация и kill switch без провалов
Добавьте в /etc/sysctl.conf:
net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6=1
И примените: sysctl -p.
Настройте iptables так, чтобы при падении OpenVPN трафик блокировался. Простое правило:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Kill switch: блокируем входящий трафик снаружи в tun0
iptables -A FORWARD -i eth0 -o tun0 -j DROP
# Исходящий без tun0 - тоже блок
iptables -A OUTPUT -o eth0 -j DROP
iptables -A OUTPUT -o tun0 -j ACCEPT
Но это грубо. Лучше использолвать policy routing:
# Создаём отдельную таблицу маршрутизации
echo "200 vpn" >> /etc/iproute2/rt_tables
# Правило: трафик от клиента VPN идёт только через tun0
ip rule add from 10.8.0.0/24 table vpn
ip route add default dev tun0 table vpn
Это гарантирует, что если tun0 упадёт, клиент останется без интернета — ни один пакет не утечёт наружу.
4. Split tunnelling — маршрутизируем только нужный трафик
Иногда не хочется гнать весь интернет через VPN (например, для доступа к local‑сети). Добавьте в конфиг сервера:
push "route 192.168.1.0 255.255.255.0"
push "route 10.0.0.0 255.0.0.0"
А для клиента — указать redirect-gateway def1 только для определённых IP (через файл .ovpn):
route-nopull
route 185.22.60.0 255.255.255.0
Или используйте vpn_slice на клиенте — но это отдельная история.
5. Обфускация: как обмануть DPI на уровне «Ростелекома»
OpenVPN легко детектится по хэнду. В России активно применяется DPI, который блокирует VPN по сигнатурам. Есть два рабочих способа:
a) Туннель внутри Shadowsocks — ставите Shadowsocks на порт 443, а OpenVPN подключается к нему как к прокси. Это превращает OpenVPN в обычный TCP‑поток, похожий на HTTPS.
b) OpenVPN over WebSocket — через nginx проксируете WebSocket на порт 443, маскируя трафик под обычный веб‑сокет. Это сложнее, но DPI пока не берёт.
Мы не пропагандируем обход законов, но технически это возможно. Если вам нужен рабочий вариант без танцев с бубном — переходите к готовым решениям.
Чего вам НЕ говорят в других гайдах
Этот блок — обязательный. Слишком много статей умалчивают о рисках. Поехали.
Бесплатные VPN — это бизнес на ваших данных
Сервер стоит от $5/мес. Если сервис бесплатный — он зарабатывает на чём‑то другом. Продажа логов, вставка рекламы, сбор статистики для брокеров. Пример: Hola VPN превращал пользователей в выходные ноды ботнета. Betternet торговал трафиком. Даже условно‑бесплатные ProtonVPN (ограничение скорости) — собирают метаданные (сколько вы сидите, какие страны). Аудитов «no‑log» у бесплатных почти нет.
Fake-утечки DNS и WebRTC
Даже с правильно настроенным OpenVPN у вас может произойти утечка DNS из‑за того, что система использует провайдерские DNS. Решение:
- На клиенте установить block-outside-dns (для Windows).
- В конфиге сервера push "dhcp-option DNS 1.1.1.2" и push "block-outside-dns".
- Отключить IPv6 (он часто не шифруется и утекает).
- Проверить WebRTC: зайдите на browserleaks.com/webrtc — если видите ваш реальный IP, отключите WebRTC в браузере.
Логообязательства по требованию суда
Даже если ваш сервер стоит в Нидерландах (юрисдикция 5 Eyes, как вы думаете? На самом деле 9/14 Eyes), местный

Good breakdown. A short 'common mistakes' section would fit well here. Good info for beginners.
This is a useful reference; it sets realistic expectations about deposit methods. The step-by-step flow is easy to follow.