OpenVPN
OpenVPN - это open-source SSL/TLS VPN решение, обеспечивающее защищенные point-to-point и remote access соединения. OpenVPN использует OpenSSL библиотеку для шифрования и может работать через NAT и firewall благодаря использованию одного TCP или UDP порта.
Обзор
Ключевые особенности
Преимущества OpenVPN:
- SSL/TLS безопасность с сертификатами X.509
- Работает через NAT и firewall (TCP/UDP на одном порту)
- Кросс-платформенные клиенты (Windows, macOS, Linux, iOS, Android)
- Гибкая конфигурация аутентификации
- Поддержка HTTP proxy
- Compression (LZO, LZ4)
- Perfect Forward Secrecy (PFS)
Режимы работы:
- Site-to-Site: Соединение между сетями
- Remote Access (Server): Сервер для удаленных клиентов
- Client: Подключение к OpenVPN серверу
OpenVPN vs другие VPN
| Критерий | OpenVPN | IPsec | WireGuard |
|---|---|---|---|
| Производительность | Средняя (500M-1G) | Высокая (1-3G) | Очень высокая (4-5G) |
| Простота настройки | Средняя | Сложная | Очень простая |
| NAT traversal | Отлично | Проблемы (NAT-T) | Отлично |
| Кросс-платформа | Отлично | Хорошо | Хорошо |
| Enterprise функции | Хорошо | Отлично | Базовые |
Когда использовать OpenVPN:
- Remote access VPN для сотрудников
- Когда нужна работа через HTTP proxy
- Сложные сетевые среды с NAT/firewall
- Когда нужна совместимость клиентов
- 2FA интеграция (через плагины)
Архитектура и компоненты
SSL/TLS безопасность
OpenVPN использует SSL/TLS для:
- Шифрование данных: AES, Blowfish, Camellia
- Аутентификация: X.509 сертификаты или pre-shared keys
- Целостность: HMAC с SHA-1, SHA-256, SHA-512
Режимы аутентификации
- TLS (рекомендуется): X.509 сертификаты + опционально username/password
- Static key: Pre-shared ключ (только для site-to-site)
- TLS + username/password: Двухфакторная аутентификация
Топологии
TUN (routing):
- Layer 3 (IP) туннель
- Маршрутизация между сетями
- Меньше broadcast трафика
- Рекомендуется для site-to-site
TAP (bridging):
- Layer 2 (Ethernet) туннель
- Bridging между сетями
- Поддержка non-IP протоколов
- Больше overhead
Transport протокол
UDP (рекомендуется):
- Лучшая производительность
- Меньше latency
- Может не работать через некоторые firewall
TCP:
- Гарантированная доставка
- Работает через HTTP proxy
- Хуже производительность (TCP over TCP)
- Используйте только если UDP не работает
Site-to-Site VPN
Базовая конфигурация
Site A (Initiator)
# Генерация static key
generate openvpn key /config/auth/openvpn-siteb.key
# Настройка интерфейса
set interfaces openvpn vtun0 mode site-to-site
set interfaces openvpn vtun0 protocol udp
set interfaces openvpn vtun0 local-port 1194
set interfaces openvpn vtun0 remote-port 1194
set interfaces openvpn vtun0 remote-host 203.0.113.2
set interfaces openvpn vtun0 shared-secret-key /config/auth/openvpn-siteb.key
# IP адреса туннеля
set interfaces openvpn vtun0 local-address 10.255.0.1
set interfaces openvpn vtun0 remote-address 10.255.0.2
# Шифрование
set interfaces openvpn vtun0 encryption cipher aes256
set interfaces openvpn vtun0 hash sha256
# Описание
set interfaces openvpn vtun0 description 'VPN to Site B'
# Firewall для OpenVPN порта
set firewall ipv4 input filter rule 110 action accept
set firewall ipv4 input filter rule 110 destination port 1194
set firewall ipv4 input filter rule 110 protocol udp
set firewall ipv4 input filter rule 110 description 'Allow OpenVPN'
# Routing
set protocols static route 192.168.2.0/24 interface vtun0
commit
saveSite B (Responder)
# Скопируйте тот же static key с Site A
# scp vyos@site-a:/config/auth/openvpn-siteb.key /config/auth/
set interfaces openvpn vtun0 mode site-to-site
set interfaces openvpn vtun0 protocol udp
set interfaces openvpn vtun0 local-port 1194
set interfaces openvpn vtun0 shared-secret-key /config/auth/openvpn-siteb.key
set interfaces openvpn vtun0 local-address 10.255.0.2
set interfaces openvpn vtun0 remote-address 10.255.0.1
set interfaces openvpn vtun0 encryption cipher aes256
set interfaces openvpn vtun0 hash sha256
set interfaces openvpn vtun0 description 'VPN to Site A'
set firewall ipv4 input filter rule 110 action accept
set firewall ipv4 input filter rule 110 destination port 1194
set firewall ipv4 input filter rule 110 protocol udp
set protocols static route 192.168.1.0/24 interface vtun0
commit
saveПроверка Site-to-Site
# Проверка интерфейса
show interfaces openvpn
# Проверка статуса
show openvpn status site-to-site
# Проверка routing
show ip route
# Ping через туннель
ping 192.168.2.10 source-address 192.168.1.10Site-to-Site с TLS (сертификаты)
Более безопасный вариант с использованием сертификатов вместо static key.
Генерация сертификатов (на Site A)
# CA (Certificate Authority)
generate pki ca install ca-openvpn
# Серверный сертификат для Site A
generate pki certificate sign ca-openvpn install site-a-cert
# Серверный сертификат для Site B
generate pki certificate sign ca-openvpn install site-b-cert
# Diffie-Hellman параметры
generate pki dh install dh-openvpn
# TLS auth key (дополнительная защита от DoS)
generate openvpn tls-auth-key /config/auth/openvpn-tls.keySite A конфигурация (TLS)
set interfaces openvpn vtun1 mode site-to-site
set interfaces openvpn vtun1 protocol udp
set interfaces openvpn vtun1 local-port 1195
set interfaces openvpn vtun1 remote-port 1195
set interfaces openvpn vtun1 remote-host 203.0.113.2
# TLS аутентификация
set interfaces openvpn vtun1 tls ca-certificate ca-openvpn
set interfaces openvpn vtun1 tls certificate site-a-cert
set interfaces openvpn vtun1 tls dh-params dh-openvpn
set interfaces openvpn vtun1 tls auth-key /config/auth/openvpn-tls.key
# IP адреса
set interfaces openvpn vtun1 local-address 10.255.1.1
set interfaces openvpn vtun1 remote-address 10.255.1.2
# Encryption
set interfaces openvpn vtun1 encryption cipher aes256
set interfaces openvpn vtun1 hash sha256
# Compression (опционально)
set interfaces openvpn vtun1 compression lz4
commit
saveSite B конфигурация (TLS)
# Скопируйте с Site A:
# - CA сертификат
# - Site B сертификат и ключ
# - DH параметры
# - TLS auth key
set interfaces openvpn vtun1 mode site-to-site
set interfaces openvpn vtun1 protocol udp
set interfaces openvpn vtun1 local-port 1195
set interfaces openvpn vtun1 tls ca-certificate ca-openvpn
set interfaces openvpn vtun1 tls certificate site-b-cert
set interfaces openvpn vtun1 tls dh-params dh-openvpn
set interfaces openvpn vtun1 tls auth-key /config/auth/openvpn-tls.key
set interfaces openvpn vtun1 local-address 10.255.1.2
set interfaces openvpn vtun1 remote-address 10.255.1.1
set interfaces openvpn vtun1 encryption cipher aes256
set interfaces openvpn vtun1 hash sha256
set interfaces openvpn vtun1 compression lz4
commit
saveRemote Access Server
OpenVPN сервер для удаленных клиентов (road warriors).
Подготовка сертификатов
# CA для OpenVPN
generate pki ca install ca-remote-vpn common-name "Remote VPN CA"
# Серверный сертификат
generate pki certificate sign ca-remote-vpn install vpn-server-cert common-name "vpn.company.com"
# Клиентские сертификаты
generate pki certificate sign ca-remote-vpn install client1-cert common-name "user1@company.com"
generate pki certificate sign ca-remote-vpn install client2-cert common-name "user2@company.com"
# DH параметры
generate pki dh install dh-remote-vpn
# TLS auth key
generate openvpn tls-auth-key /config/auth/remote-vpn-tls.keyБазовая конфигурация сервера
# Интерфейс сервера
set interfaces openvpn vtun10 mode server
set interfaces openvpn vtun10 protocol udp
set interfaces openvpn vtun10 local-port 1194
set interfaces openvpn vtun10 persistent-tunnel
# TLS
set interfaces openvpn vtun10 tls ca-certificate ca-remote-vpn
set interfaces openvpn vtun10 tls certificate vpn-server-cert
set interfaces openvpn vtun10 tls dh-params dh-remote-vpn
set interfaces openvpn vtun10 tls auth-key /config/auth/remote-vpn-tls.key
# Адресация для клиентов
set interfaces openvpn vtun10 server subnet 10.8.0.0/24
set interfaces openvpn vtun10 server topology subnet
# Push маршруты клиентам
set interfaces openvpn vtun10 server push-route 192.168.1.0/24
set interfaces openvpn vtun10 server push-route 10.0.0.0/8
# DNS серверы для клиентов
set interfaces openvpn vtun10 server name-server 192.168.1.1
set interfaces openvpn vtun10 server domain-name company.local
# Encryption
set interfaces openvpn vtun10 encryption cipher aes256
set interfaces openvpn vtun10 hash sha256
# Keepalive
set interfaces openvpn vtun10 server keepalive interval 10
set interfaces openvpn vtun10 server keepalive timeout 120
# Максимум клиентов
set interfaces openvpn vtun10 server max-connections 50
# Firewall
set firewall ipv4 input filter rule 120 action accept
set firewall ipv4 input filter rule 120 destination port 1194
set firewall ipv4 input filter rule 120 protocol udp
set firewall ipv4 input filter rule 120 description 'OpenVPN Remote Access'
# Разрешить VPN клиентам доступ к LAN
set firewall ipv4 forward filter rule 200 action accept
set firewall ipv4 forward filter rule 200 source address 10.8.0.0/24
set firewall ipv4 forward filter rule 200 destination address 192.168.1.0/24
commit
saveСтатические IP для клиентов
# Назначение статического IP клиенту
set interfaces openvpn vtun10 server client client1 ip 10.8.0.10
set interfaces openvpn vtun10 server client client1 subnet 192.168.100.0/24
set interfaces openvpn vtun10 server client client1 disable false
# Другой клиент
set interfaces openvpn vtun10 server client client2 ip 10.8.0.20
commitServer с username/password
Добавление аутентификации по username/password (в дополнение к сертификатам).
# Создание пользователей
set interfaces openvpn vtun10 server client user1 disable false
set interfaces openvpn vtun10 server client user1 ip 10.8.0.11
# Authentication plugin
set interfaces openvpn vtun10 authentication mode local
set interfaces openvpn vtun10 authentication local-users username user1 password 'SecurePass123!'
set interfaces openvpn vtun10 authentication local-users username user2 password 'AnotherPass456!'
# Require username/password
set interfaces openvpn vtun10 authentication require 'username'
commitServer с RADIUS
Интеграция с RADIUS для централизованной аутентификации.
# RADIUS конфигурация
set interfaces openvpn vtun10 authentication mode radius
set interfaces openvpn vtun10 authentication radius server 192.168.1.10 key 'RadiusSecret'
set interfaces openvpn vtun10 authentication radius server 192.168.1.11 key 'RadiusSecret'
# Timeout
set interfaces openvpn vtun10 authentication radius timeout 5
commitПроверка сервера
# Статус сервера
show openvpn status server
# Подключенные клиенты
show openvpn server-status vtun10
# Логи
show log openvpnПример вывода:
OpenVPN server status on vtun10
Client CN Remote Host Bytes In Bytes Out Connected Since
----------------------- -------------------- -------- --------- ---------------
user1@company.com 203.0.113.50:52341 125 MB 89 MB Jan 10 09:23:15
user2@company.com 198.51.100.25:41829 45 MB 23 MB Jan 10 11:45:32Клиентские конфигурации
Экспорт конфигурации для клиента
VyOS может сгенерировать .ovpn файл для клиента.
# Генерация конфигурации клиента
generate openvpn client-config vtun10 client1
# Вывод конфигурации
show openvpn client-config vtun10 client1Сохраните вывод в файл client1.ovpn.
Пример клиентской конфигурации
client
dev tun
proto udp
remote vpn.company.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
verb 3
# Embedded certificates
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1Windows клиент
- Скачайте OpenVPN GUI: https://openvpn.net/community-downloads/
- Установите
- Скопируйте
client1.ovpnвC:\Program Files\OpenVPN\config\ - Запустите OpenVPN GUI
- Right-click → Connect
macOS клиент
- Скачайте Tunnelblick: https://tunnelblick.net/
- Установите
- Double-click на
client1.ovpn - Connect
Linux клиент
# Установка
sudo apt-get install openvpn
# Подключение
sudo openvpn --config client1.ovpn
# Или через systemd
sudo cp client1.ovpn /etc/openvpn/client/client1.conf
sudo systemctl start openvpn-client@client1
sudo systemctl enable openvpn-client@client1iOS/Android клиенты
iOS: OpenVPN Connect (App Store) Android: OpenVPN for Android (Google Play)
- Установите приложение
- Импортируйте .ovpn файл
- Connect
Продвинутые конфигурации
OpenVPN через TCP с HTTP Proxy
Для работы через корпоративный proxy.
# Сервер на TCP
set interfaces openvpn vtun11 mode server
set interfaces openvpn vtun11 protocol tcp-passive
set interfaces openvpn vtun11 local-port 443
# Остальная конфигурация аналогична UDP
commitКлиент:
proto tcp-client
remote vpn.company.com 443
http-proxy proxy.company.com 8080
http-proxy-retrySplit-tunnel (только часть трафика через VPN)
По умолчанию OpenVPN перенаправляет весь трафик. Для split-tunnel:
# Убираем default-route push
set interfaces openvpn vtun10 server redirect-gateway def1 disable
# Push только нужные маршруты
set interfaces openvpn vtun10 server push-route 192.168.1.0/24
set interfaces openvpn vtun10 server push-route 10.0.0.0/8
commitFull-tunnel (весь трафик через VPN)
# Redirect default gateway
set interfaces openvpn vtun10 server redirect-gateway def1
# Push DNS
set interfaces openvpn vtun10 server name-server 192.168.1.1
commitIPv6 over OpenVPN
# Server IPv6 subnet
set interfaces openvpn vtun10 server subnet 10.8.0.0/24
set interfaces openvpn vtun10 server ipv6-subnet fd00:8::/64
# Push IPv6 routes
set interfaces openvpn vtun10 server push-route 2001:db8::/48
commitCompression
# LZ4 compression (рекомендуется)
set interfaces openvpn vtun10 compression lz4
# LZO compression (legacy)
set interfaces openvpn vtun10 compression lzo
# Отключить compression
delete interfaces openvpn vtun10 compression
commitВнимание: Compression может быть уязвим к VORACLE атаке. Используйте только в доверенных сетях или отключите.
Multi-factor Authentication (2FA)
OpenVPN поддерживает 2FA через плагины.
С TOTP (Time-based One-Time Password)
# Требовать username + password + OTP
set interfaces openvpn vtun10 authentication require 'username'
set interfaces openvpn vtun10 openvpn-option '--auth-user-pass-verify /config/scripts/2fa-verify.sh via-env'
commitСкрипт /config/scripts/2fa-verify.sh должен проверять OTP код.
Client-to-Client
Разрешить клиентам общаться друг с другом.
set interfaces openvpn vtun10 server client-to-client
commitЛогирование подключений
# Лог файл
set interfaces openvpn vtun10 openvpn-option '--log-append /var/log/openvpn/vtun10.log'
# Уровень детализации
set interfaces openvpn vtun10 openvpn-option '--verb 4'
commitПроизводительность
Оптимизация производительности
# Увеличить буферы
set interfaces openvpn vtun10 openvpn-option '--sndbuf 524288'
set interfaces openvpn vtun10 openvpn-option '--rcvbuf 524288'
# Отключить compression если не нужна
delete interfaces openvpn vtun10 compression
# Использовать UDP вместо TCP
set interfaces openvpn vtun10 protocol udp
# Использовать AES-GCM (быстрее)
set interfaces openvpn vtun10 encryption cipher aes256gcm
set interfaces openvpn vtun10 encryption ncp-ciphers aes256gcm
commitBenchmark производительности
# iperf3 через OpenVPN
# На сервере:
iperf3 -s
# На клиенте через VPN:
iperf3 -c 10.8.0.1Типичная производительность:
- UDP: 500-800 Mbps
- TCP: 300-500 Mbps
- С compression: -10-20%
Безопасность
Рекомендации по безопасности
- Используйте сильное шифрование:
set interfaces openvpn vtun10 encryption cipher aes256gcm
set interfaces openvpn vtun10 hash sha256- TLS версия:
set interfaces openvpn vtun10 tls tls-version-min '1.2'- TLS auth key (защита от DoS):
set interfaces openvpn vtun10 tls auth-key /config/auth/tls.key- Регулярная ротация сертификатов:
# Устанавливайте срок действия при генерации
generate pki certificate sign ca-remote-vpn install client-cert days 365- Отзыв скомпрометированных сертификатов:
# CRL (Certificate Revocation List)
set interfaces openvpn vtun10 tls crl /config/auth/crl.pem- Firewall правила:
# Rate limiting для OpenVPN порта
set firewall ipv4 input filter rule 120 recent count 5
set firewall ipv4 input filter rule 120 recent time minute 1
set firewall ipv4 input filter rule 120 action drop- Логирование:
set interfaces openvpn vtun10 openvpn-option '--log-append /var/log/openvpn/vtun10.log'Отзыв клиентских сертификатов
# Создать CRL
generate pki crl ca-remote-vpn
# Добавить сертификат в CRL
revoke pki certificate client1-cert
# Применить CRL
set interfaces openvpn vtun10 tls crl /config/auth/crl.pem
commitМониторинг и диагностика
Проверка статуса
# Интерфейсы
show interfaces openvpn
show interfaces openvpn vtun10
# Детальный статус
show interfaces openvpn vtun10 detail
# Статистика
show interfaces openvpn vtun10 statisticsПроверка сервера
# Сервер статус
show openvpn status server
# Конкретный сервер
show openvpn server-status vtun10
# Подключенные клиенты
show openvpn server-status vtun10 detailЛоги
# Общий лог
show log openvpn
# Последние 50 строк
show log openvpn tail 50
# Поиск ошибок
show log openvpn | match error
# Live лог
monitor log openvpnТестирование связности
# Ping с source
ping 10.8.0.10 source-address 192.168.1.1
# Traceroute
traceroute 10.8.0.10
# MTU discovery
ping 10.8.0.10 size 1400 do-not-fragmentTroubleshooting
Туннель не устанавливается
Проблема: Клиент не может подключиться к серверу.
Диагностика:
# Проверить firewall
show firewall ipv4 input filter
# Проверить слушает ли OpenVPN
netstat -ulnp | grep openvpn
# Логи
show log openvpn | match errorРешение:
- Проверьте firewall правила для OpenVPN порта
- Убедитесь что remote-host доступен:
ping 203.0.113.2 - Проверьте что порт открыт:
nc -zvu 203.0.113.2 1194 - Проверьте сертификаты/ключи
Аутентификация не проходит
Проблема: “TLS Error: TLS handshake failed”.
Решение:
# Проверить сертификаты
show pki certificate vpn-server-cert
# Проверить CA
show pki ca ca-remote-vpn
# Убедиться что TLS auth key одинаковый
cat /config/auth/remote-vpn-tls.keyТуннель поднялся но нет связности
Проблема: OpenVPN подключен, но нет доступа к удаленной сети.
Диагностика:
# Проверить routing
show ip route
show ip route 192.168.1.0/24
# Проверить firewall forward
show firewall ipv4 forward filter
# Ping
ping 192.168.1.1 source-address 10.8.0.10Решение:
- Добавьте маршруты если их нет
- Проверьте firewall forward правила
- Убедитесь что NAT не применяется к VPN трафику
Низкая производительность
Проблема: Скорость через VPN низкая.
Решение:
# MTU tuning
set interfaces openvpn vtun10 mtu 1400
# Отключить compression
delete interfaces openvpn vtun10 compression
# Использовать UDP
set interfaces openvpn vtun10 protocol udp
# AES-GCM вместо AES-CBC
set interfaces openvpn vtun10 encryption cipher aes256gcm
commitПрерывания соединения
Проблема: VPN периодически отключается.
Решение:
# Увеличить keepalive
set interfaces openvpn vtun10 server keepalive interval 10
set interfaces openvpn vtun10 server keepalive timeout 120
# Float (разрешить смену IP клиента)
set interfaces openvpn vtun10 openvpn-option '--float'
# Persist tun
set interfaces openvpn vtun10 persistent-tunnel
commitDNS не работает для клиентов
Проблема: Клиенты не могут резолвить имена.
Решение:
# Push DNS серверы
set interfaces openvpn vtun10 server name-server 8.8.8.8
set interfaces openvpn vtun10 server name-server 1.1.1.1
# Push domain
set interfaces openvpn vtun10 server domain-name company.local
commitНе работает client-to-client
Проблема: Клиенты не видят друг друга.
Решение:
# Включить client-to-client
set interfaces openvpn vtun10 server client-to-client
# Проверить firewall
show firewall ipv4 forward filter
commitИнтеграция с другими сервисами
OpenVPN + VRRP
Использование OpenVPN с high availability.
# Два сервера с VRRP
# Master и Backup конфигурируют идентичный OpenVPN
# VRRP IP
set high-availability vrrp group VPN vrid 30
set high-availability vrrp group VPN interface eth0
set high-availability vrrp group VPN address 203.0.113.100/24
# OpenVPN на VRRP IP
set interfaces openvpn vtun10 local-host 203.0.113.100
commitКлиенты подключаются к 203.0.113.100 (VRRP IP).
OpenVPN + RADIUS
Централизованная аутентификация через RADIUS.
set interfaces openvpn vtun10 authentication mode radius
set interfaces openvpn vtun10 authentication radius server 192.168.1.10 key 'Secret123'
set interfaces openvpn vtun10 authentication radius server 192.168.1.11 key 'Secret123'
set interfaces openvpn vtun10 authentication radius timeout 5
commitOpenVPN + Firewall
Детальный контроль VPN трафика.
# Разрешить только определенные протоколы
set firewall ipv4 forward filter rule 210 action accept
set firewall ipv4 forward filter rule 210 source address 10.8.0.0/24
set firewall ipv4 forward filter rule 210 destination address 192.168.1.0/24
set firewall ipv4 forward filter rule 210 destination port 80,443
set firewall ipv4 forward filter rule 210 protocol tcp
# Заблокировать остальное
set firewall ipv4 forward filter rule 299 action drop
set firewall ipv4 forward filter rule 299 source address 10.8.0.0/24
commitПримеры конфигураций
Пример 1: Простой Remote Access
Сценарий: Сотрудники подключаются к офисной сети.
Требования:
- 50 пользователей
- Full tunnel (весь трафик через VPN)
- Username/password аутентификация
- DNS фильтрация
Конфигурация:
# PKI
generate pki ca install ca-staff-vpn
generate pki certificate sign ca-staff-vpn install staff-vpn-server
generate pki dh install dh-staff
generate openvpn tls-auth-key /config/auth/staff-tls.key
# Server
set interfaces openvpn vtun20 mode server
set interfaces openvpn vtun20 protocol udp
set interfaces openvpn vtun20 local-port 1194
set interfaces openvpn vtun20 tls ca-certificate ca-staff-vpn
set interfaces openvpn vtun20 tls certificate staff-vpn-server
set interfaces openvpn vtun20 tls dh-params dh-staff
set interfaces openvpn vtun20 tls auth-key /config/auth/staff-tls.key
set interfaces openvpn vtun20 server subnet 10.9.0.0/24
set interfaces openvpn vtun20 server topology subnet
set interfaces openvpn vtun20 server max-connections 50
# Full tunnel
set interfaces openvpn vtun20 server redirect-gateway def1
# DNS
set interfaces openvpn vtun20 server name-server 1.1.1.3
set interfaces openvpn vtun20 server name-server 1.0.0.3
set interfaces openvpn vtun20 server domain-name company.local
# Push routes
set interfaces openvpn vtun20 server push-route 192.168.0.0/16
# Local auth
set interfaces openvpn vtun20 authentication mode local
set interfaces openvpn vtun20 authentication require 'username'
set interfaces openvpn vtun20 authentication local-users username alice password 'Pass123!'
set interfaces openvpn vtun20 authentication local-users username bob password 'Pass456!'
# Encryption
set interfaces openvpn vtun20 encryption cipher aes256gcm
set interfaces openvpn vtun20 hash sha256
# Keepalive
set interfaces openvpn vtun20 server keepalive interval 10
set interfaces openvpn vtun20 server keepalive timeout 60
# Firewall
set firewall ipv4 input filter rule 130 action accept
set firewall ipv4 input filter rule 130 destination port 1194
set firewall ipv4 input filter rule 130 protocol udp
set firewall ipv4 forward filter rule 220 action accept
set firewall ipv4 forward filter rule 220 source address 10.9.0.0/24
commit
saveПример 2: Site-to-Site Backup для IPsec
Сценарий: OpenVPN как backup для IPsec туннеля.
Конфигурация:
# Primary: IPsec на eth0
# Backup: OpenVPN на eth1
# OpenVPN backup
set interfaces openvpn vtun5 mode site-to-site
set interfaces openvpn vtun5 protocol udp
set interfaces openvpn vtun5 local-port 1194
set interfaces openvpn vtun5 remote-port 1194
set interfaces openvpn vtun5 remote-host 198.51.100.2
set interfaces openvpn vtun5 shared-secret-key /config/auth/backup-key
set interfaces openvpn vtun5 local-address 10.255.2.1
set interfaces openvpn vtun5 remote-address 10.255.2.2
# Routing с метриками
set protocols static route 192.168.2.0/24 interface vti0 distance 10
set protocols static route 192.168.2.0/24 interface vtun5 distance 20
commit
saveIPsec primary (metric 10), OpenVPN backup (metric 20).
Пример 3: Split-tunnel для подрядчиков
Сценарий: Подрядчики получают доступ только к определенным ресурсам.
Конфигурация:
# Server
set interfaces openvpn vtun30 mode server
set interfaces openvpn vtun30 protocol udp
set interfaces openvpn vtun30 local-port 1195
set interfaces openvpn vtun30 tls ca-certificate ca-contractors
set interfaces openvpn vtun30 tls certificate contractors-server
set interfaces openvpn vtun30 tls dh-params dh-contractors
set interfaces openvpn vtun30 server subnet 10.10.0.0/24
# Split-tunnel: только определенные маршруты
set interfaces openvpn vtun30 server push-route 192.168.10.0/24
set interfaces openvpn vtun30 server push-route 192.168.20.0/24
# Не перенаправлять default gateway
# (не используем redirect-gateway)
# DNS
set interfaces openvpn vtun30 server name-server 192.168.1.1
# Firewall: ограничить доступ
set firewall ipv4 forward filter rule 230 action accept
set firewall ipv4 forward filter rule 230 source address 10.10.0.0/24
set firewall ipv4 forward filter rule 230 destination address 192.168.10.0/24
set firewall ipv4 forward filter rule 231 action accept
set firewall ipv4 forward filter rule 231 source address 10.10.0.0/24
set firewall ipv4 forward filter rule 231 destination address 192.168.20.0/24
set firewall ipv4 forward filter rule 239 action drop
set firewall ipv4 forward filter rule 239 source address 10.10.0.0/24
commit
saveЛучшие практики
- Используйте TLS вместо static keys для production
- Настройте TLS auth key для защиты от DoS
- Используйте UDP вместо TCP (если возможно)
- AES-256-GCM для шифрования (производительность + безопасность)
- Регулярно обновляйте сертификаты (срок действия 1-2 года)
- Настройте CRL для возможности отзыва сертификатов
- Логируйте подключения для аудита
- Используйте strong DH params (2048+ бит)
- Firewall правила для VPN клиентов
- MTU 1400 для избежания фрагментации
- Backup конфигурация регулярно
- Мониторинг подключений и алерты
- Rate limiting на OpenVPN порту
- Split-tunnel когда full-tunnel не нужен (экономия bandwidth)
- Документируйте клиентские конфигурации
Миграция с других VPN
С IPsec на OpenVPN
Причины миграции:
- Проблемы с NAT traversal
- Нужна работа через HTTP proxy
- Проще управление клиентами
План:
- Настройте OpenVPN параллельно с IPsec
- Выдайте клиентам .ovpn конфигурации
- Тестовый период (оба VPN работают)
- Миграция клиентов поэтапно
- Отключение IPsec после полной миграции
С PPTP/L2TP на OpenVPN
Причины: Безопасность (PPTP устарел).
План:
- Установите OpenVPN сервер
- Создайте клиентские сертификаты
- Отправьте инструкции пользователям
- Grace period (оба работают)
- Отключите PPTP/L2TP
Заключение
OpenVPN - это надежное, гибкое и безопасное VPN решение, особенно подходящее для:
- Remote access VPN с кросс-платформенными клиентами
- Сложные сетевые среды с NAT, firewall, proxy
- Когда нужна совместимость и универсальность
Для максимальной производительности рассмотрите WireGuard, а для enterprise site-to-site с другими вендорами - IPsec.
VyOS обеспечивает полную поддержку OpenVPN со всеми enterprise функциями: TLS аутентификация, RADIUS интеграция, client-to-client, compression, IPv6, и многое другое.