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

КритерийOpenVPNIPsecWireGuard
ПроизводительностьСредняя (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

Режимы аутентификации

  1. TLS (рекомендуется): X.509 сертификаты + опционально username/password
  2. Static key: Pre-shared ключ (только для site-to-site)
  3. 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
save

Site 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.10

Site-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.key

Site 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
save

Site 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
save

Remote 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

commit

Server с 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'

commit

Server с 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 1

Windows клиент

  1. Скачайте OpenVPN GUI: https://openvpn.net/community-downloads/
  2. Установите
  3. Скопируйте client1.ovpn в C:\Program Files\OpenVPN\config\
  4. Запустите OpenVPN GUI
  5. Right-click → Connect

macOS клиент

  1. Скачайте Tunnelblick: https://tunnelblick.net/
  2. Установите
  3. Double-click на client1.ovpn
  4. 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@client1

iOS/Android клиенты

iOS: OpenVPN Connect (App Store) Android: OpenVPN for Android (Google Play)

  1. Установите приложение
  2. Импортируйте .ovpn файл
  3. 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-retry

Split-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

commit

Full-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

commit

IPv6 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

commit

Compression

# 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

commit

Benchmark производительности

# iperf3 через OpenVPN
# На сервере:
iperf3 -s

# На клиенте через VPN:
iperf3 -c 10.8.0.1

Типичная производительность:

  • UDP: 500-800 Mbps
  • TCP: 300-500 Mbps
  • С compression: -10-20%

Безопасность

Рекомендации по безопасности

  1. Используйте сильное шифрование:
set interfaces openvpn vtun10 encryption cipher aes256gcm
set interfaces openvpn vtun10 hash sha256
  1. TLS версия:
set interfaces openvpn vtun10 tls tls-version-min '1.2'
  1. TLS auth key (защита от DoS):
set interfaces openvpn vtun10 tls auth-key /config/auth/tls.key
  1. Регулярная ротация сертификатов:
# Устанавливайте срок действия при генерации
generate pki certificate sign ca-remote-vpn install client-cert days 365
  1. Отзыв скомпрометированных сертификатов:
# CRL (Certificate Revocation List)
set interfaces openvpn vtun10 tls crl /config/auth/crl.pem
  1. 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
  1. Логирование:
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-fragment

Troubleshooting

Туннель не устанавливается

Проблема: Клиент не может подключиться к серверу.

Диагностика:

# Проверить firewall
show firewall ipv4 input filter

# Проверить слушает ли OpenVPN
netstat -ulnp | grep openvpn

# Логи
show log openvpn | match error

Решение:

  1. Проверьте firewall правила для OpenVPN порта
  2. Убедитесь что remote-host доступен: ping 203.0.113.2
  3. Проверьте что порт открыт: nc -zvu 203.0.113.2 1194
  4. Проверьте сертификаты/ключи

Аутентификация не проходит

Проблема: “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

Решение:

  1. Добавьте маршруты если их нет
  2. Проверьте firewall forward правила
  3. Убедитесь что 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

commit

DNS не работает для клиентов

Проблема: Клиенты не могут резолвить имена.

Решение:

# 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

commit

OpenVPN + 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
save

IPsec 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

Лучшие практики

  1. Используйте TLS вместо static keys для production
  2. Настройте TLS auth key для защиты от DoS
  3. Используйте UDP вместо TCP (если возможно)
  4. AES-256-GCM для шифрования (производительность + безопасность)
  5. Регулярно обновляйте сертификаты (срок действия 1-2 года)
  6. Настройте CRL для возможности отзыва сертификатов
  7. Логируйте подключения для аудита
  8. Используйте strong DH params (2048+ бит)
  9. Firewall правила для VPN клиентов
  10. MTU 1400 для избежания фрагментации
  11. Backup конфигурация регулярно
  12. Мониторинг подключений и алерты
  13. Rate limiting на OpenVPN порту
  14. Split-tunnel когда full-tunnel не нужен (экономия bandwidth)
  15. Документируйте клиентские конфигурации

Миграция с других VPN

С IPsec на OpenVPN

Причины миграции:

  • Проблемы с NAT traversal
  • Нужна работа через HTTP proxy
  • Проще управление клиентами

План:

  1. Настройте OpenVPN параллельно с IPsec
  2. Выдайте клиентам .ovpn конфигурации
  3. Тестовый период (оба VPN работают)
  4. Миграция клиентов поэтапно
  5. Отключение IPsec после полной миграции

С PPTP/L2TP на OpenVPN

Причины: Безопасность (PPTP устарел).

План:

  1. Установите OpenVPN сервер
  2. Создайте клиентские сертификаты
  3. Отправьте инструкции пользователям
  4. Grace period (оба работают)
  5. Отключите 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, и многое другое.