OpenVPN vs WireGuard: корпоративный VPN для 100 удалённых сотрудников юридической фирмы

Задача: VPN для юридической фирмы

Юридическая фирма «ПравоГрупп» перевела 100 адвокатов на удалённую работу. Требовалось организовать безопасный доступ к внутренним системам: 1С, CRM, файловому серверу с конфиденциальными документами (адвокатская тайна) и корпоративной почте.

Требования:

  • Безопасность — шифрование AES-256 или ChaCha20, двухфакторная аутентификация, отсутствие логов на VPN-сервере.
  • Совместимость — Windows 10/11, macOS, iOS, Android. Часть адвокатов работает из судов с мобильных устройств.
  • Простота — сотрудники не IT-специалисты, настройка на устройстве должна занимать 2 минуты.
  • Производительность — VPN не должен замедлять работу с документами (файлы до 500 МБ).
  • Управление — веб-панель для IT-администратора, отзыв доступа за 30 секунд при увольнении сотрудника.

Мы развернули оба решения — OpenVPN и WireGuard — на тестовых серверах и провели сравнение.

Архитектурное сравнение

OpenVPN и WireGuard — принципиально разные подходы к VPN:

КритерийOpenVPNWireGuard
Строки кода~600 000~4 000
ПротоколTLS/SSL (userspace)Noise Protocol (kernel module)
ШифрованиеAES-256-GCM, ChaCha20-Poly1305 (настраивается)ChaCha20-Poly1305 (единственный, не настраивается)
ТранспортTCP или UDPТолько UDP
АутентификацияСертификаты X.509, username/password, 2FAПара ключей Curve25519
Динамический IP клиентаПоддерживает (keepalive)Поддерживает (roaming)
NAT traversalTCP через 443 (маскировка под HTTPS)UDP, нужен открытый порт
Аудит кодаМножество CVE за 20+ летФормально верифицирован, 1 CVE
Отзыв доступаCRL (Certificate Revocation List)Удаление peer из конфигурации

Ключевое отличие: OpenVPN работает в userspace через TUN/TAP, WireGuard — как модуль ядра Linux. Это даёт WireGuard преимущество в производительности до 3-4x, но ограничивает гибкость.

OpenVPN: полная настройка с easy-rsa

Установка OpenVPN и создание PKI (Public Key Infrastructure):

# Ubuntu 22.04
apt install -y openvpn easy-rsa

# Инициализация PKI
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa

# Параметры CA
cat > vars << 'EOF'
set_var EASYRSA_REQ_COUNTRY    "RU"
set_var EASYRSA_REQ_PROVINCE   "Moscow"
set_var EASYRSA_REQ_CITY       "Moscow"
set_var EASYRSA_REQ_ORG        "PravoGroup LLC"
set_var EASYRSA_REQ_EMAIL      "it@pravogroup.ru"
set_var EASYRSA_REQ_OU         "IT Department"
set_var EASYRSA_KEY_SIZE       4096
set_var EASYRSA_ALGO           rsa
set_var EASYRSA_CA_EXPIRE      3650
set_var EASYRSA_CERT_EXPIRE    365
set_var EASYRSA_CRL_DAYS       180
EOF

# Создание CA
./easyrsa init-pki
./easyrsa build-ca nopass
# Common Name: PravoGroup-CA

# Серверный сертификат
./easyrsa gen-req vpn-server nopass
./easyrsa sign-req server vpn-server

# DH-параметры (занимает 5-10 минут)
./easyrsa gen-dh

# TLS-Auth ключ (защита от DoS)
openvpn --genkey secret /etc/openvpn/ta.key

# Клиентский сертификат (для каждого сотрудника)
./easyrsa gen-req ivanov-av nopass
./easyrsa sign-req client ivanov-av

Серверная конфигурация /etc/openvpn/server.conf:

port 1194
proto udp
dev tun

ca       /etc/openvpn/easy-rsa/pki/ca.crt
cert     /etc/openvpn/easy-rsa/pki/issued/vpn-server.crt
key      /etc/openvpn/easy-rsa/pki/private/vpn-server.key
dh       /etc/openvpn/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/ta.key 0

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt

# Маршруты к корпоративной сети
push "route 192.168.1.0 255.255.255.0"
push "route 192.168.2.0 255.255.255.0"

# DNS
push "dhcp-option DNS 192.168.1.10"
push "dhcp-option DOMAIN pravogroup.local"

# Безопасность
cipher AES-256-GCM
data-ciphers AES-256-GCM:CHACHA20-POLY1305
auth SHA256
tls-version-min 1.2

# Производительность
sndbuf 524288
rcvbuf 524288
push "sndbuf 524288"
push "rcvbuf 524288"

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

# Keepalive
keepalive 10 120

# Максимум клиентов
max-clients 120

# Безопасность процесса
user nobody
group nogroup
persist-key
persist-tun

Клиентский файл ivanov-av.ovpn:

client
dev tun
proto udp
remote vpn.pravogroup.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
data-ciphers AES-256-GCM:CHACHA20-POLY1305
auth SHA256
key-direction 1
verb 3


-----BEGIN CERTIFICATE-----
# ... содержимое ca.crt ...
-----END CERTIFICATE-----



-----BEGIN CERTIFICATE-----
# ... содержимое ivanov-av.crt ...
-----END CERTIFICATE-----



-----BEGIN PRIVATE KEY-----
# ... содержимое ivanov-av.key ...
-----END PRIVATE KEY-----



-----BEGIN OpenVPN Static key V1-----
# ... содержимое ta.key ...
-----END OpenVPN Static key V1-----

WireGuard: настройка сервера и клиентов

WireGuard кардинально проще в настройке:

# Установка
apt install -y wireguard

# Генерация ключей сервера
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key

# Генерация ключей клиента
wg genkey | tee /etc/wireguard/clients/ivanov-av_private.key | wg pubkey > /etc/wireguard/clients/ivanov-av_public.key

Серверная конфигурация /etc/wireguard/wg0.conf:

[Interface]
Address = 10.9.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY_HERE

# Firewall rules при запуске/остановке
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# DNS для клиентов
DNS = 192.168.1.10

# Клиент: Иванов А.В.
[Peer]
PublicKey = IVANOV_PUBLIC_KEY_HERE
AllowedIPs = 10.9.0.2/32

# Клиент: Петрова М.С.
[Peer]
PublicKey = PETROVA_PUBLIC_KEY_HERE
AllowedIPs = 10.9.0.3/32

# ... повторить для каждого из 100 сотрудников

Клиентская конфигурация:

[Interface]
PrivateKey = IVANOV_PRIVATE_KEY_HERE
Address = 10.9.0.2/24
DNS = 192.168.1.10

[Peer]
PublicKey = SERVER_PUBLIC_KEY_HERE
Endpoint = vpn.pravogroup.ru:51820
AllowedIPs = 192.168.1.0/24, 192.168.2.0/24   # Split tunneling
PersistentKeepalive = 25

Запуск:

# Включить и запустить
systemctl enable --now wg-quick@wg0

# Проверить статус
wg show

# Добавить нового клиента без рестарта
wg set wg0 peer NEW_CLIENT_PUBLIC_KEY allowed-ips 10.9.0.4/32

# Удалить клиента (отзыв доступа)
wg set wg0 peer FIRED_EMPLOYEE_PUBLIC_KEY remove

Главное преимущество WireGuard — простота. Весь конфиг клиента помещается в QR-код, который сотрудник сканирует приложением WireGuard на телефоне:

# Генерация QR-кода
apt install -y qrencode
qrencode -t ansiutf8 < /etc/wireguard/clients/ivanov-av.conf

2FA для OpenVPN и производительность

Двухфакторная аутентификация — критическое требование для юридической фирмы. OpenVPN поддерживает 2FA через PAM-плагин и Google Authenticator:

# Установка
apt install -y libpam-google-authenticator

# Настройка для каждого пользователя
su - ivanov-av
google-authenticator
# Ответы: y, y, n, y (TOTP, update .google_authenticator, no time-skew, rate-limiting)

# PAM модуль для OpenVPN
cat > /etc/pam.d/openvpn << 'EOF'
auth required pam_google_authenticator.so secret=/home/${USER}/.google_authenticator
account required pam_permit.so
EOF

# Добавить в server.conf:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn

# В клиентском .ovpn добавить:
auth-user-pass
# При подключении OpenVPN спросит username и password (= OTP код)

WireGuard не поддерживает 2FA нативно — аутентификация только по ключам. Для 2FA на WireGuard нужен внешний портал (Firezone, Headscale).

Бенчмарки производительности (сервер: 4 ядра, 8 ГБ RAM; канал 1 Гбит/с):

ТестБез VPNOpenVPN (UDP)WireGuard
Throughput (iperf3)940 Мбит/с340 Мбит/с880 Мбит/с
Latency (ping)1.2 мс3.8 мс1.5 мс
CPU при полной нагрузке5%85% (одно ядро)15%
Handshake timeN/A380 мс120 мс
Roaming (смена Wi-Fi)N/AПереподключение 3-5 секМгновенно

WireGuard быстрее в 2.5 раза по throughput и потребляет в 5.5 раз меньше CPU. Для 100 одновременных клиентов это критично: OpenVPN на одном ядре «упирается» в CPU уже при 50 активных клиентах.

Split tunneling и kill switch

Split tunneling — направление через VPN только корпоративного трафика, а остальное — напрямую в интернет. Экономит пропускную способность VPN-сервера.

OpenVPN split tunneling:

# server.conf — НЕ push'ить default gateway
# Удалить: push "redirect-gateway def1"

# Только корпоративные маршруты
push "route 192.168.1.0 255.255.255.0"
push "route 192.168.2.0 255.255.255.0"
push "route 10.10.0.0 255.255.0.0"

# DNS только для корпоративного домена
push "dhcp-option DOMAIN pravogroup.local"
push "dhcp-option DNS 192.168.1.10"

WireGuard split tunneling:

# Клиентский конфиг — AllowedIPs определяет, что идёт через VPN
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.pravogroup.ru:51820
# Полный туннель (весь трафик через VPN):
# AllowedIPs = 0.0.0.0/0
# Split tunnel (только корпоративные сети):
AllowedIPs = 192.168.1.0/24, 192.168.2.0/24, 10.10.0.0/16

Kill switch — блокировка интернета при разрыве VPN (защита от утечки данных):

OpenVPN kill switch (клиент Windows — в .ovpn):

# Блокировать весь трафик, кроме VPN, если соединение разорвано
script-security 2
up /etc/openvpn/killswitch-up.sh
down /etc/openvpn/killswitch-down.sh

WireGuard kill switch (встроенный через AllowedIPs):

# Если AllowedIPs = 0.0.0.0/0 — WireGuard создаёт правила iptables,
# блокирующие весь трафик мимо VPN. Kill switch — из коробки.

# Linux клиент — дополнительная защита:
[Interface]
PrivateKey = ...
Address = 10.9.0.2/24
DNS = 192.168.1.10
PostUp = iptables -I OUTPUT ! -o wg0 -m mark ! --mark $(wg show wg0 fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o wg0 -m mark ! --mark $(wg show wg0 fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

Management UI: Firezone и Pritunl

Управление 100 VPN-клиентами через конфиг-файлы — боль. Мы оценили два решения с веб-интерфейсом:

Firezone — управление WireGuard через веб-панель:

# Установка Firezone (Docker)
curl -fsSL https://raw.githubusercontent.com/firezone/firezone/legacy/scripts/install.sh | bash

# Или Docker Compose
curl -fsSL https://raw.githubusercontent.com/firezone/firezone/legacy/docker-compose.prod.yml \
    -o docker-compose.yml
docker compose up -d

# Панель доступна на https://vpn.pravogroup.ru
# Возможности:
# - SSO через OIDC (Google, Okta, Azure AD)
# - Создание/удаление пользователей через веб
# - Автоматическая генерация конфигов и QR-кодов
# - Правила доступа (какие сети видит пользователь)
# - Аудит-лог подключений

Pritunl — управление OpenVPN через веб-панель:

# Установка Pritunl
apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv E162F504A20CDF15827F718D4B7C549A058F8B6B
apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A

echo "deb http://repo.pritunl.com/stable/apt jammy main" > /etc/apt/sources.list.d/pritunl.list
apt update && apt install -y pritunl mongodb-org

systemctl enable --now pritunl mongod

# Получить setup key
pritunl setup-key

# Панель: https://vpn.pravogroup.ru
# Возможности:
# - Управление сертификатами через веб
# - Двухфакторная аутентификация (Google Authenticator)
# - Multi-server (несколько VPN-серверов в одной панели)
# - API для автоматизации
# - Audit logging для compliance

Для «ПравоГрупп» мы выбрали Pritunl + OpenVPN по двум причинам:

  1. 2FA из коробки — адвокаты работают с конфиденциальными данными, двухфакторная аутентификация обязательна.
  2. TCP через 443 — часть адвокатов работает из судов и гостиниц, где UDP блокируется. OpenVPN через TCP/443 выглядит как обычный HTTPS и проходит через любой firewall.

Итоговое решение и результаты

Мы развернули гибридную архитектуру:

  • Pritunl + OpenVPN — основной VPN для ноутбуков и десктопов. 2FA, TCP/443 для обхода ограничений, сертификаты через веб-панель.
  • WireGuard — VPN для мобильных устройств адвокатов. Мгновенный роуминг при переключении Wi-Fi/4G, QR-код для подключения.

Оба VPN-сервера подключены к одной корпоративной сети и используют общие правила доступа через iptables.

Результаты за 3 месяца:

МетрикаЗначение
Среднее количество активных подключений72
Пиковое количество подключений98
Среднее время подключения (OpenVPN)1.2 секунды
Среднее время подключения (WireGuard)0.3 секунды
Инцидентов утечки данных0
Обращений в IT-поддержку по VPN3 в месяц
Время отзыва доступа (увольнение)15 секунд

Рекомендации:

  • Нужен 2FA или TCP/443? → OpenVPN (через Pritunl для удобства управления).
  • Нужна максимальная скорость и мобильность? → WireGuard (через Firezone для веб-управления).
  • Enterprise с compliance? → OpenVPN: сертификаты X.509, CRL, аудит-логи, интеграция с AD/LDAP.
  • Гибридный подход — лучшее из двух миров: OpenVPN для десктопов с 2FA, WireGuard для мобильных.

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

Оба безопасны, но по-разному. WireGuard использует современную криптографию (ChaCha20, Curve25519) и имеет всего 4000 строк кода — меньше кода = меньше поверхность атаки. OpenVPN проверен 20+ годами эксплуатации и множеством аудитов. WireGuard не поддерживает выбор шифров — если в ChaCha20 найдут уязвимость, придётся обновлять протокол. OpenVPN позволяет сменить шифр за минуту. Для compliance-сред (PCI DSS, ФЗ-152) OpenVPN удобнее документально.
Нативно — нет, WireGuard работает только через UDP. Для обхода блокировок используют обёртки: udp2raw (маскировка UDP под TCP), wstunnel (туннель через WebSocket), или Shadowsocks/V2Ray как транспорт. Альтернатива — OpenVPN через TCP/443, который неотличим от HTTPS. Если сеть блокирует все порты кроме 80/443 — OpenVPN через TCP единственный надёжный вариант.
OpenVPN: easyrsa revoke username && easyrsa gen-crl, затем перезагрузка CRL. Сертификат навсегда недействителен. WireGuard: wg set wg0 peer PUBLIC_KEY remove — мгновенно, но при утечке конфига клиент может подключиться снова. В WireGuard безопаснее сгенерировать новую серверную ключевую пару и обновить конфиги всех оставшихся клиентов — но это неудобно при 100 пользователях. Pritunl и Firezone упрощают отзыв до одной кнопки.
WireGuard: на сервере с 4 ядрами — 500+ клиентов при средней нагрузке (веб, почта). При максимальной пропускной способности WireGuard утилизирует все ядра и обрабатывает до 10 Гбит/с. OpenVPN: 200-300 клиентов на 4 ядрах (ограничение — userspace обработка, однопоточность до версии 2.6). OpenVPN 2.6+ поддерживает multithreading, что увеличивает лимит до 500+ клиентов.
Зависит от задачи. Полный туннель (весь трафик через VPN) обеспечивает максимальную безопасность — весь трафик шифрован, утечки исключены. Но нагружает VPN-сервер и замедляет YouTube/streaming. Split tunneling экономит ресурсы VPN-сервера и не замедляет личный трафик. Для юридической фирмы мы выбрали split tunneling с kill switch: корпоративный трафик через VPN, остальной — напрямую, но при разрыве VPN весь трафик блокируется.

Нужна помощь с проектом?

Специалисты АйТи Фреш помогут с архитектурой, DevOps, безопасностью и разработкой — 15+ лет опыта

📞 Связаться с нами
#openvpn#wireguard#vpn#easy-rsa#wg genkey#2fa#split tunneling#kill switch
Комментарии 0

Оставить комментарий

загрузка...