OpenConnect VPN Server - SSL VPN для Remote Access

OpenConnect VPN Server - SSL VPN для Remote Access

OpenConnect VPN Server (ocserv) - это современный SSL VPN сервер, полностью совместимый с клиентами Cisco AnyConnect. Он обеспечивает безопасный remote access с использованием SSL/TLS протокола, поддерживает множество методов аутентификации включая двухфакторную (2FA) и идеально подходит для корпоративных сценариев удаленного доступа.

Обзор

Ключевые особенности

Преимущества OpenConnect:

  • Полная совместимость с клиентами Cisco AnyConnect
  • SSL/TLS шифрование (работает на порту TCP 443)
  • Множественные методы аутентификации (локальная, RADIUS, 2FA)
  • Двухфакторная аутентификация с OTP (Time-based One-Time Password)
  • DTLS (Datagram TLS) для улучшенной производительности
  • HTTP security headers для защиты web интерфейса
  • RADIUS accounting для мониторинга сессий
  • Identity-based конфигурация (per-user/per-group настройки)
  • Работает через любые firewall (TCP 443, HTTPS)
  • Кросс-платформенные клиенты (Windows, macOS, Linux, iOS, Android)

OpenConnect vs другие SSL VPN:

КритерийOpenConnectOpenVPNWireGuard
AnyConnect совместимостьПолнаяНетНет
ПроизводительностьВысокая (DTLS)СредняяОчень высокая
2FA встроеннаяДа (OTP)Через плагиныНет
Работа через firewallОтлично (443/tcp)ХорошоХорошо
Enterprise готовностьОтличноХорошоБазовая
Простота клиентаОтличноХорошоОтлично

Когда использовать OpenConnect

Идеальные сценарии:

  • Корпоративный remote access VPN для сотрудников
  • Замена коммерческого Cisco AnyConnect
  • Требуется двухфакторная аутентификация
  • Строгие firewall ограничения (только 443/tcp доступен)
  • Интеграция с RADIUS для централизованной аутентификации
  • Accounting и аудит VPN сессий
  • Использование существующих AnyConnect клиентов

Не рекомендуется когда:

  • Нужна максимальная производительность (используйте WireGuard)
  • Site-to-site туннели (используйте IPsec или WireGuard)
  • Простые домашние сценарии (OpenVPN или WireGuard проще)

Архитектура и компоненты

SSL/TLS и DTLS

OpenConnect использует два протокола:

TLS (TCP based):

  • Control channel и data transfer
  • Guaranteed delivery
  • Работает через любые сети
  • Используется для аутентификации

DTLS (UDP based):

  • Data transfer (после успешной TLS аутентификации)
  • Меньше latency, лучше производительность
  • Автоматический fallback на TLS при проблемах с UDP

Методы аутентификации

OpenConnect поддерживает несколько режимов:

  1. Local Password: Локальные пользователи с паролями
  2. RADIUS: Централизованная аутентификация через RADIUS сервер
  3. Password + OTP: Двухфакторная аутентификация (пароль + одноразовый код)
  4. OTP Only: Только одноразовые пароли

SSL Certificate

OpenConnect требует SSL сертификат для работы:

Варианты сертификатов:

  • Self-signed сертификаты (для тестирования)
  • Let’s Encrypt (бесплатные, автоматическое обновление)
  • Корпоративные CA сертификаты
  • Коммерческие SSL сертификаты

Network Settings

Настройки сети для клиентов:

  • Client IP Pool: Пул IP адресов для VPN клиентов
  • DNS Servers: DNS серверы для клиентов
  • Split Tunneling: Маршрутизация только определенного трафика через VPN
  • Full Tunneling: Весь трафик клиента через VPN

Базовая конфигурация

Подготовка SSL сертификатов

Self-signed сертификаты (тестирование)

# Создание CA
generate pki ca install openconnect-ca common-name "OpenConnect CA"

# Создание серверного сертификата
generate pki certificate sign openconnect-ca install openconnect-server common-name "vpn.company.com"

commit
save

Let’s Encrypt сертификаты (production)

# Установка Certbot (выполните в operational mode)
sudo apt-get update
sudo apt-get install certbot

# Получение сертификата (требуется DNS A record)
sudo certbot certonly --standalone -d vpn.company.com

# Сертификаты будут в /etc/letsencrypt/live/vpn.company.com/
# fullchain.pem - полный сертификат
# privkey.pem - приватный ключ

# Импорт в VyOS PKI
configure
set pki certificate openconnect-server certificate "$(cat /etc/letsencrypt/live/vpn.company.com/fullchain.pem)"
set pki certificate openconnect-server private key "$(cat /etc/letsencrypt/live/vpn.company.com/privkey.pem)"

commit
save

Автоматическое обновление Let’s Encrypt:

# Добавьте в cron для автоматического обновления
set system task-scheduler task renew-ssl executable path '/usr/bin/certbot renew --quiet'
set system task-scheduler task renew-ssl interval '7d'

commit

Минимальная конфигурация с локальной аутентификацией

configure

# SSL сертификаты
set vpn openconnect ssl ca-certificate openconnect-ca
set vpn openconnect ssl certificate openconnect-server

# Локальная аутентификация
set vpn openconnect authentication mode local password
set vpn openconnect authentication local-users username alice password 'SecurePassword123!'
set vpn openconnect authentication local-users username bob password 'AnotherSecure456!'

# Сетевые настройки для клиентов
set vpn openconnect network-settings client-ip-settings subnet 10.100.0.0/24

# DNS серверы для клиентов
set vpn openconnect network-settings name-server 8.8.8.8
set vpn openconnect network-settings name-server 1.1.1.1

commit
save

Проверка базовой конфигурации

# Проверить что сервис запущен
show vpn openconnect-server sessions

# Системные процессы
show system processes openconnect

# Логи
show log vpn openconnect

Аутентификация

Локальная аутентификация (Password)

Простейший метод для небольших установок.

configure

# Режим локальной аутентификации
set vpn openconnect authentication mode local password

# Добавление пользователей
set vpn openconnect authentication local-users username user1 password 'Pass123!@#'
set vpn openconnect authentication local-users username user2 password 'Secure789$%^'
set vpn openconnect authentication local-users username user3 password 'MyVPN2024&*('

# Опционально: отключить пользователя
set vpn openconnect authentication local-users username user3 disable

commit
save

Рекомендации для паролей:

  • Минимум 12 символов
  • Комбинация букв, цифр, специальных символов
  • Регулярная смена паролей (каждые 90 дней)

Двухфакторная аутентификация (2FA OTP)

Значительно повышает безопасность, требуя пароль + одноразовый код.

Режим Password + OTP

configure

# Включение 2FA (пароль + OTP)
set vpn openconnect authentication mode local password-otp

# Пользователи с паролями
set vpn openconnect authentication local-users username alice password 'SecurePass123!'
set vpn openconnect authentication local-users username bob password 'BobPass456!'

# Генерация OTP ключей для пользователей
# Выполните в operational mode:
exit
generate openconnect username alice otp-key hotp-time

# VyOS выведет QR код и ключ вида:
# OTP Key: JBSWY3DPEHPK3PXP
# Используйте QR код в приложении Google Authenticator или Authy

OTP Key для пользователя:

configure
# Установка OTP ключа вручную
set vpn openconnect authentication local-users username alice otp JBSWY3DPEHPK3PXP
set vpn openconnect authentication local-users username bob otp KRSXG5CTORHG6YLM

commit
save

Режим OTP Only

Только одноразовые коды (без паролей).

configure

# Режим только OTP
set vpn openconnect authentication mode local otp

# OTP ключи пользователей
set vpn openconnect authentication local-users username alice otp JBSWY3DPEHPK3PXP
set vpn openconnect authentication local-users username bob otp KRSXG5CTORHG6YLM

commit
save

Настройка клиентского приложения:

  1. Google Authenticator (iOS/Android):

    • Установите приложение
    • Отсканируйте QR код от VyOS
    • Приложение будет генерировать 6-значные коды каждые 30 секунд
  2. Microsoft Authenticator (iOS/Android):

    • Альтернатива Google Authenticator
    • Те же принципы работы
  3. Authy (iOS/Android/Desktop):

    • Поддержка cloud backup
    • Синхронизация между устройствами

Подключение с 2FA:

Username: alice
Password: SecurePass123!123456
          ^^^^^^^^^^^^^^^^ ^^^^^^
          обычный пароль   OTP код

или в режиме password-otp через AnyConnect:
Username: alice
Password: SecurePass123!
Second Password: 123456 (OTP код)

RADIUS аутентификация

Централизованная аутентификация через RADIUS сервер.

configure

# RADIUS режим
set vpn openconnect authentication mode radius

# Основной RADIUS сервер
set vpn openconnect authentication radius server 192.168.1.10
set vpn openconnect authentication radius server 192.168.1.10 key 'SharedSecret123'
set vpn openconnect authentication radius server 192.168.1.10 port 1812

# Backup RADIUS сервер
set vpn openconnect authentication radius server 192.168.1.11
set vpn openconnect authentication radius server 192.168.1.11 key 'SharedSecret123'
set vpn openconnect authentication radius server 192.168.1.11 port 1812

# Timeout (опционально)
set vpn openconnect authentication radius timeout 5

commit
save

RADIUS атрибуты:

OpenConnect отправляет:

  • User-Name: username пользователя
  • User-Password: пароль
  • NAS-IP-Address: IP адрес VyOS
  • NAS-Port-Type: Virtual
  • Service-Type: Framed-User
  • Framed-Protocol: PPP

FreeRADIUS конфигурация (на RADIUS сервере):

# /etc/freeradius/clients.conf
client vyos-vpn {
    ipaddr = 192.168.1.1
    secret = SharedSecret123
    shortname = vyos
}

# /etc/freeradius/users
alice Cleartext-Password := "SecurePassword"
    Reply-Message = "Welcome to VPN"

bob Cleartext-Password := "BobPassword"

RADIUS Accounting

Мониторинг VPN сессий через RADIUS accounting.

configure

# Включение RADIUS accounting
set vpn openconnect accounting mode radius

# RADIUS accounting сервер
set vpn openconnect accounting radius server 192.168.1.10
set vpn openconnect accounting radius server 192.168.1.10 key 'SharedSecret123'
set vpn openconnect accounting radius server 192.168.1.10 port 1813

# Backup accounting сервер
set vpn openconnect accounting radius server 192.168.1.11
set vpn openconnect accounting radius server 192.168.1.11 key 'SharedSecret123'
set vpn openconnect accounting radius server 192.168.1.11 port 1813

commit
save

RADIUS Accounting сообщения:

OpenConnect отправляет:

  • Accounting-Start: При подключении клиента
  • Interim-Update: Периодически (каждые N минут)
  • Accounting-Stop: При отключении клиента

Атрибуты accounting:

  • Acct-Session-Id: Уникальный ID сессии
  • Acct-Input-Octets: Байты входящего трафика
  • Acct-Output-Octets: Байты исходящего трафика
  • Acct-Session-Time: Длительность сессии в секундах
  • Framed-IP-Address: IP адрес VPN клиента

Сетевые настройки

Client IP Pool

Пул IP адресов для VPN клиентов.

configure

# IPv4 subnet для клиентов
set vpn openconnect network-settings client-ip-settings subnet 10.100.0.0/24

# IPv6 subnet (опционально)
set vpn openconnect network-settings client-ipv6-pool prefix 2001:db8:100::/64
set vpn openconnect network-settings client-ipv6-pool mask 96

commit
save

Планирование IP адресов:

  • Используйте приватные диапазоны (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
  • Избегайте пересечения с существующими сетями
  • Учитывайте количество одновременных пользователей
  • Оставьте запас для роста

DNS и домены

DNS серверы для VPN клиентов.

configure

# DNS серверы
set vpn openconnect network-settings name-server 192.168.1.1
set vpn openconnect network-settings name-server 8.8.8.8

# Search domain
set vpn openconnect network-settings client-ip-settings subnet 10.100.0.0/24

commit
save

Варианты DNS:

  • Внутренний DNS: Для резолва корпоративных ресурсов
  • Публичные DNS: Google (8.8.8.8), Cloudflare (1.1.1.1)
  • Фильтрующие DNS: Cloudflare for Families (1.1.1.3), Quad9 (9.9.9.9)

Split Tunneling

Маршрутизация только корпоративного трафика через VPN.

configure

# Split-include: только определенные сети через VPN
set vpn openconnect network-settings split-dns include-domains company.local
set vpn openconnect network-settings split-dns include-domains internal.local

# Маршруты через VPN (пока не поддерживается в VyOS напрямую, используйте identity-based)
# Альтернатива: настройка через опции сервера

commit
save

Split tunneling через custom опции:

configure

# Push только определенных маршрутов (для split tunneling)
# Этот функционал доступен через identity-based config или прямые опции ocserv

commit
save

Full Tunneling

Весь трафик клиента через VPN.

По умолчанию OpenConnect настроен на full tunneling. Клиенты получают default route через VPN.

Для явного указания:

configure

# Client IP pool (автоматически включает full tunnel)
set vpn openconnect network-settings client-ip-settings subnet 10.100.0.0/24

# DNS для всех запросов
set vpn openconnect network-settings name-server 192.168.1.1

commit
save

NAT для VPN клиентов (если нужен доступ в интернет):

configure

# NAT для VPN клиентов
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 10.100.0.0/24
set nat source rule 100 translation address masquerade

commit
save

Identity-Based конфигурация

Настройки для отдельных пользователей или групп.

Per-User конфигурация

configure

# Статический IP для пользователя
set vpn openconnect network-settings client-ip-settings subnet 10.100.0.0/24

# Файл конфигурации для пользователей
# (создается через shell, так как VyOS не имеет прямого CLI)

# Для продвинутой per-user конфигурации используйте файлы в /config/
# Пример будет в разделе "Продвинутые конфигурации"

commit
save

Group-Based конфигурация

configure

# Группы пользователей настраиваются через RADIUS атрибуты или файлы конфигурации

commit
save

HTTP Security Headers

Защита web интерфейса OpenConnect.

configure

# HTTP security headers
set vpn openconnect listen-ports 443

commit
save

Security headers (настраиваются автоматически ocserv):

  • X-Frame-Options: DENY - Защита от clickjacking
  • X-Content-Type-Options: nosniff - Защита от MIME type sniffing
  • Strict-Transport-Security - HSTS для HTTPS
  • Content-Security-Policy - CSP для защиты от XSS

Firewall конфигурация

Разрешение трафика для OpenConnect VPN.

configure

# Входящий трафик на VPN порт
set firewall ipv4 input filter rule 150 action accept
set firewall ipv4 input filter rule 150 destination port 443
set firewall ipv4 input filter rule 150 protocol tcp
set firewall ipv4 input filter rule 150 description 'OpenConnect VPN'

# UDP для DTLS (опционально, но рекомендуется)
set firewall ipv4 input filter rule 151 action accept
set firewall ipv4 input filter rule 151 destination port 443
set firewall ipv4 input filter rule 151 protocol udp
set firewall ipv4 input filter rule 151 description 'OpenConnect DTLS'

# Forward для VPN клиентов
set firewall ipv4 forward filter rule 250 action accept
set firewall ipv4 forward filter rule 250 source address 10.100.0.0/24
set firewall ipv4 forward filter rule 250 description 'OpenConnect clients'

# Опционально: ограничение доступа VPN клиентов
set firewall ipv4 forward filter rule 251 action accept
set firewall ipv4 forward filter rule 251 source address 10.100.0.0/24
set firewall ipv4 forward filter rule 251 destination address 192.168.0.0/16
set firewall ipv4 forward filter rule 251 description 'VPN to corporate network'

commit
save

Примеры конфигураций

Пример 1: Remote Access VPN для Yandex Cloud

Сценарий: Сотрудники компании получают безопасный доступ к ресурсам в Yandex Cloud через OpenConnect VPN с двухфакторной аутентификацией.

Топология:

Internet
    |
    | (публичный IP)
    |
[VyOS OpenConnect VPN Server]
    | (внутренний IP)
    |
    |--- Yandex Cloud Internal Network (10.0.0.0/16)
          |
          |--- Web Server (10.0.1.10)
          |--- Database Server (10.0.2.20)
          |--- Application Server (10.0.3.30)

Требования:

  • 50 удаленных сотрудников
  • Двухфакторная аутентификация (пароль + OTP)
  • Split tunneling (только Yandex Cloud трафик через VPN)
  • Let’s Encrypt SSL сертификат
  • RADIUS accounting для аудита

Конфигурация:

configure

# SSL сертификаты (Let's Encrypt)
# Предварительно получите сертификат через Certbot
set pki certificate yc-vpn-server certificate "$(cat /etc/letsencrypt/live/vpn.yandex-cloud.example.com/fullchain.pem)"
set pki certificate yc-vpn-server private key "$(cat /etc/letsencrypt/live/vpn.yandex-cloud.example.com/privkey.pem)"

set vpn openconnect ssl ca-certificate yc-vpn-server
set vpn openconnect ssl certificate yc-vpn-server

# Аутентификация: локальная с 2FA
set vpn openconnect authentication mode local password-otp

# Пользователи с паролями и OTP
set vpn openconnect authentication local-users username admin password 'AdminSecure2024!'
set vpn openconnect authentication local-users username admin otp JBSWY3DPEHPK3PXP

set vpn openconnect authentication local-users username developer1 password 'DevPass123!@#'
set vpn openconnect authentication local-users username developer1 otp KRSXG5CTORHG6YLM

set vpn openconnect authentication local-users username manager1 password 'MgrPass456$%^'
set vpn openconnect authentication local-users username manager1 otp MFRGG2LFNFZXS4TP

# IP pool для клиентов (не пересекается с Yandex Cloud 10.0.0.0/16)
set vpn openconnect network-settings client-ip-settings subnet 10.100.0.0/24

# DNS серверы (внутренний Yandex Cloud DNS + публичный)
set vpn openconnect network-settings name-server 10.0.0.2
set vpn openconnect network-settings name-server 8.8.8.8

# RADIUS accounting (опционально)
set vpn openconnect accounting mode radius
set vpn openconnect accounting radius server 10.0.10.50
set vpn openconnect accounting radius server 10.0.10.50 key 'YandexCloudRADIUS2024'
set vpn openconnect accounting radius server 10.0.10.50 port 1813

# Порт (TCP 443)
set vpn openconnect listen-ports 443

# Firewall: разрешить VPN трафик
set firewall ipv4 input filter rule 150 action accept
set firewall ipv4 input filter rule 150 destination port 443
set firewall ipv4 input filter rule 150 protocol tcp
set firewall ipv4 input filter rule 150 description 'OpenConnect TCP'

set firewall ipv4 input filter rule 151 action accept
set firewall ipv4 input filter rule 151 destination port 443
set firewall ipv4 input filter rule 151 protocol udp
set firewall ipv4 input filter rule 151 description 'OpenConnect DTLS'

# Forward для VPN клиентов к Yandex Cloud сети
set firewall ipv4 forward filter rule 250 action accept
set firewall ipv4 forward filter rule 250 source address 10.100.0.0/24
set firewall ipv4 forward filter rule 250 destination address 10.0.0.0/16
set firewall ipv4 forward filter rule 250 description 'VPN to Yandex Cloud'

# Блокировка VPN client-to-client (безопасность)
set firewall ipv4 forward filter rule 259 action drop
set firewall ipv4 forward filter rule 259 source address 10.100.0.0/24
set firewall ipv4 forward filter rule 259 destination address 10.100.0.0/24

# NAT для интернет доступа VPN клиентов (опционально)
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 10.100.0.0/24
set nat source rule 100 translation address masquerade

commit
save

Генерация OTP ключей для пользователей:

# Выполните в operational mode для каждого пользователя
generate openconnect username admin otp-key hotp-time
generate openconnect username developer1 otp-key hotp-time
generate openconnect username manager1 otp-key hotp-time

# Отправьте QR коды пользователям для настройки Google Authenticator

Проверка:

# Статус сервера
show vpn openconnect-server sessions

# Логи подключений
show log vpn openconnect

# RADIUS accounting (если настроено)
# Проверьте на RADIUS сервере

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

Server: vpn.yandex-cloud.example.com
Username: developer1
Password: DevPass123!@#123456
          ^^^^^^^^^^^^^^ ^^^^^^
          пароль         OTP код

Пример 2: SSL VPN для VK Cloud

Сценарий: OpenConnect VPN для доступа к ресурсам VK Cloud с RADIUS аутентификацией и полным туннелированием (весь трафик через VPN).

Топология:

Internet
    |
    | (публичный IP)
    |
[VyOS OpenConnect VPN Server] ---- [RADIUS Server]
    |                                  (192.168.10.50)
    | (внутренний IP)
    |
    |--- VK Cloud Network (192.168.0.0/16)
          |
          |--- Application Servers (192.168.10.0/24)
          |--- Database Cluster (192.168.20.0/24)
          |--- Storage (192.168.30.0/24)

Требования:

  • 100 пользователей (RADIUS аутентификация)
  • Full tunneling (весь трафик через VPN)
  • RADIUS accounting
  • Self-signed сертификаты (внутреннее использование)
  • DNS фильтрация (Cloudflare for Families)

Конфигурация:

configure

# Генерация self-signed сертификатов
# В operational mode:
exit
generate pki ca install vkcloud-vpn-ca common-name "VK Cloud VPN CA"
generate pki certificate sign vkcloud-vpn-ca install vkcloud-vpn-server common-name "vpn.vkcloud.local"

configure

# SSL конфигурация
set vpn openconnect ssl ca-certificate vkcloud-vpn-ca
set vpn openconnect ssl certificate vkcloud-vpn-server

# RADIUS аутентификация
set vpn openconnect authentication mode radius

# Primary RADIUS сервер
set vpn openconnect authentication radius server 192.168.10.50
set vpn openconnect authentication radius server 192.168.10.50 key 'VKCloudRADIUS2024SecretKey'
set vpn openconnect authentication radius server 192.168.10.50 port 1812

# Backup RADIUS сервер
set vpn openconnect authentication radius server 192.168.10.51
set vpn openconnect authentication radius server 192.168.10.51 key 'VKCloudRADIUS2024SecretKey'
set vpn openconnect authentication radius server 192.168.10.51 port 1812

# RADIUS timeout
set vpn openconnect authentication radius timeout 5

# RADIUS Accounting
set vpn openconnect accounting mode radius
set vpn openconnect accounting radius server 192.168.10.50
set vpn openconnect accounting radius server 192.168.10.50 key 'VKCloudRADIUS2024SecretKey'
set vpn openconnect accounting radius server 192.168.10.50 port 1813

set vpn openconnect accounting radius server 192.168.10.51
set vpn openconnect accounting radius server 192.168.10.51 key 'VKCloudRADIUS2024SecretKey'
set vpn openconnect accounting radius server 192.168.10.51 port 1813

# IP pool для клиентов
set vpn openconnect network-settings client-ip-settings subnet 10.200.0.0/24

# DNS серверы (Cloudflare for Families - фильтрация malware)
set vpn openconnect network-settings name-server 1.1.1.3
set vpn openconnect network-settings name-server 1.0.0.3

# Порт
set vpn openconnect listen-ports 443

# Firewall правила
set firewall ipv4 input filter rule 160 action accept
set firewall ipv4 input filter rule 160 destination port 443
set firewall ipv4 input filter rule 160 protocol tcp
set firewall ipv4 input filter rule 160 description 'OpenConnect SSL VPN'

set firewall ipv4 input filter rule 161 action accept
set firewall ipv4 input filter rule 161 destination port 443
set firewall ipv4 input filter rule 161 protocol udp
set firewall ipv4 input filter rule 161 description 'OpenConnect DTLS'

# Forward для VPN клиентов ко всей VK Cloud сети
set firewall ipv4 forward filter rule 260 action accept
set firewall ipv4 forward filter rule 260 source address 10.200.0.0/24
set firewall ipv4 forward filter rule 260 description 'VPN clients to VK Cloud'

# NAT для full tunneling (интернет через VPN)
set nat source rule 110 outbound-interface name eth0
set nat source rule 110 source address 10.200.0.0/24
set nat source rule 110 translation address masquerade

commit
save

FreeRADIUS конфигурация (на RADIUS сервере 192.168.10.50):

# /etc/freeradius/3.0/clients.conf
client vkcloud-vpn {
    ipaddr = 192.168.10.1
    secret = VKCloudRADIUS2024SecretKey
    shortname = vyos-vpn
}

# /etc/freeradius/3.0/users
alice Cleartext-Password := "AliceSecure123"
    Reply-Message = "Welcome to VK Cloud VPN, Alice"

bob Cleartext-Password := "BobPassword456"
    Reply-Message = "Welcome to VK Cloud VPN, Bob"

charlie Cleartext-Password := "CharliePass789"
    Reply-Message = "Welcome to VK Cloud VPN, Charlie"

Проверка:

# Сессии VPN
show vpn openconnect-server sessions

# Accounting на RADIUS сервере
radclient -x 192.168.10.50:1813 status VKCloudRADIUS2024SecretKey

Пример 3: Enterprise VPN с 2FA для корпоративного доступа

Сценарий: Корпоративный OpenConnect VPN с жесткими требованиями безопасности: обязательная 2FA, accounting, ограничение доступа по времени, детальное логирование.

Требования:

  • Двухфакторная аутентификация (Password + OTP)
  • Let’s Encrypt SSL сертификаты
  • RADIUS accounting для мониторинга
  • Split tunneling (только корпоративные ресурсы)
  • Ограничение доступа к определенным сегментам сети
  • Детальное логирование и аудит

Конфигурация:

configure

# SSL сертификаты (Let's Encrypt)
set pki certificate corporate-vpn certificate "$(cat /etc/letsencrypt/live/vpn.corporation.com/fullchain.pem)"
set pki certificate corporate-vpn private key "$(cat /etc/letsencrypt/live/vpn.corporation.com/privkey.pem)"

set vpn openconnect ssl ca-certificate corporate-vpn
set vpn openconnect ssl certificate corporate-vpn

# 2FA аутентификация (Password + OTP)
set vpn openconnect authentication mode local password-otp

# Административные пользователи
set vpn openconnect authentication local-users username admin password 'Admin2FA2024!@#$'
set vpn openconnect authentication local-users username admin otp JBSWY3DPEHPK3PXP

# IT отдел
set vpn openconnect authentication local-users username it_user1 password 'ITSecure123!@#'
set vpn openconnect authentication local-users username it_user1 otp KRSXG5CTORHG6YLM

set vpn openconnect authentication local-users username it_user2 password 'ITSecure456$%^'
set vpn openconnect authentication local-users username it_user2 otp MFRGG2LFNFZXS4TP

# Финансовый отдел (ограниченный доступ)
set vpn openconnect authentication local-users username finance_user1 password 'FinPass789&*('
set vpn openconnect authentication local-users username finance_user1 otp GEZDGNBVGY3TQOJQ

# IP pool для VPN клиентов
set vpn openconnect network-settings client-ip-settings subnet 10.150.0.0/24

# DNS серверы (внутренний корпоративный)
set vpn openconnect network-settings name-server 192.168.100.10
set vpn openconnect network-settings name-server 192.168.100.11

# RADIUS Accounting
set vpn openconnect accounting mode radius
set vpn openconnect accounting radius server 192.168.100.50
set vpn openconnect accounting radius server 192.168.100.50 key 'CorporateRADIUS2024'
set vpn openconnect accounting radius server 192.168.100.50 port 1813

# Порт
set vpn openconnect listen-ports 443

# Firewall: входящий VPN трафик
set firewall ipv4 input filter rule 170 action accept
set firewall ipv4 input filter rule 170 destination port 443
set firewall ipv4 input filter rule 170 protocol tcp

set firewall ipv4 input filter rule 171 action accept
set firewall ipv4 input filter rule 171 destination port 443
set firewall ipv4 input filter rule 171 protocol udp

# Firewall: VPN клиенты к корпоративным серверам
set firewall ipv4 forward filter rule 270 action accept
set firewall ipv4 forward filter rule 270 source address 10.150.0.0/24
set firewall ipv4 forward filter rule 270 destination address 192.168.100.0/24
set firewall ipv4 forward filter rule 270 description 'VPN to corporate servers'

# Firewall: VPN клиенты к приложениям
set firewall ipv4 forward filter rule 271 action accept
set firewall ipv4 forward filter rule 271 source address 10.150.0.0/24
set firewall ipv4 forward filter rule 271 destination address 192.168.200.0/24
set firewall ipv4 forward filter rule 271 description 'VPN to applications'

# Firewall: ограничение доступа финансового отдела
# (предполагается использование per-user firewall или RADIUS атрибутов)

# Заблокировать все остальное от VPN клиентов
set firewall ipv4 forward filter rule 279 action drop
set firewall ipv4 forward filter rule 279 source address 10.150.0.0/24
set firewall ipv4 forward filter rule 279 description 'Block unauthorized VPN access'

# Логирование
set system syslog global facility all level info

commit
save

Генерация OTP ключей:

generate openconnect username admin otp-key hotp-time
generate openconnect username it_user1 otp-key hotp-time
generate openconnect username it_user2 otp-key hotp-time
generate openconnect username finance_user1 otp-key hotp-time

Мониторинг и аудит:

# Активные сессии
show vpn openconnect-server sessions

# Логи аутентификации
show log | match openconnect

# RADIUS accounting записи (на RADIUS сервере)
tail -f /var/log/freeradius/radacct/192.168.100.1/detail-*

Клиенты OpenConnect

Cisco AnyConnect (Windows/macOS)

Установка:

  1. Скачайте Cisco AnyConnect Secure Mobility Client
  2. Установите клиент
  3. Запустите приложение

Подключение:

1. Введите адрес сервера: vpn.company.com
2. Нажмите Connect
3. Введите Username: alice
4. Введите Password:
   - Для password-otp: SecurePass123!123456
     (пароль + 6-значный OTP код)
   - Для otp: 123456 (только OTP код)
5. Подключено

Автоматическая конфигурация (AnyConnect profile):

Создайте файл anyconnect-profile.xml:

<?xml version="1.0" encoding="UTF-8"?>
<AnyConnectProfile xmlns="http://schemas.xmlsoap.org/encoding/">
  <ServerList>
    <HostEntry>
      <HostName>Corporate VPN</HostName>
      <HostAddress>vpn.company.com</HostAddress>
    </HostEntry>
  </ServerList>
</AnyConnectProfile>

Импортируйте профиль в AnyConnect.

OpenConnect Client (Linux)

Установка:

# Ubuntu/Debian
sudo apt-get install openconnect network-manager-openconnect-gnome

# Fedora/RHEL
sudo dnf install openconnect NetworkManager-openconnect-gnome

# Arch Linux
sudo pacman -S openconnect networkmanager-openconnect

Подключение через CLI:

# Базовое подключение
sudo openconnect vpn.company.com

# С username
sudo openconnect -u alice vpn.company.com

# С сохранением пароля в файле (небезопасно!)
echo "SecurePass123!123456" | sudo openconnect -u alice --passwd-on-stdin vpn.company.com

# С кастомными опциями
sudo openconnect -u alice --authgroup=default vpn.company.com

Подключение через Network Manager (GUI):

  1. Settings -> Network
  2. Add VPN -> Cisco AnyConnect Compatible VPN (openconnect)
  3. Gateway: vpn.company.com
  4. Username: alice
  5. Save -> Connect
  6. Введите пароль + OTP при запросе

Скрипт автоматического подключения:

#!/bin/bash
# /usr/local/bin/vpn-connect.sh

USERNAME="alice"
SERVER="vpn.company.com"

# OTP код будет запрошен интерактивно
echo "Enter password + OTP (e.g., SecurePass123!123456):"
sudo openconnect -u "$USERNAME" "$SERVER"

OpenConnect Client (macOS)

Установка через Homebrew:

brew install openconnect

# GUI клиент (опционально)
brew install --cask openconnect-gui

Подключение:

# CLI
sudo openconnect -u alice vpn.company.com

# OpenConnect GUI
# Запустите приложение OpenConnect GUI
# Введите vpn.company.com и учетные данные

Mobile клиенты

iOS:

  • Cisco AnyConnect: Официальный клиент (App Store)
  • OpenConnect: Open-source клиент (ограниченный функционал)

Android:

  • Cisco AnyConnect: Официальный клиент (Google Play)
  • OpenConnect for Android: Open-source альтернатива

Настройка на мобильных:

  1. Установите приложение
  2. Добавьте VPN соединение
  3. Server: vpn.company.com
  4. Username: alice
  5. Password: SecurePass123!123456
  6. Connect

Продвинутые конфигурации

Кастомный порт (не 443)

Если порт 443 занят (например, HTTPS сервисом).

configure

# Использовать порт 8443 вместо 443
set vpn openconnect listen-ports 8443

# Firewall
set firewall ipv4 input filter rule 152 action accept
set firewall ipv4 input filter rule 152 destination port 8443
set firewall ipv4 input filter rule 152 protocol tcp

commit
save

Клиент подключается:

Server: vpn.company.com:8443

Несколько IP pools

Разные IP пулы для разных групп пользователей (требуется identity-based конфигурация через файлы).

# Основной пул (по умолчанию)
set vpn openconnect network-settings client-ip-settings subnet 10.100.0.0/24

# Дополнительные пулы настраиваются через /config/openconnect/ файлы
# (VyOS пока не имеет CLI для этого)

MTU и MSS настройки

Оптимизация для сетей с нестандартным MTU.

configure

# MTU настройка (через прямые опции ocserv, если поддерживается)
# По умолчанию OpenConnect использует MTU discovery

commit
save

Compression

OpenConnect поддерживает LZS compression.

# Compression включен по умолчанию
# Для отключения потребуется изменение конфигурационного файла ocserv напрямую

IPv6 Support

Поддержка IPv6 для VPN клиентов.

configure

# IPv6 pool для клиентов
set vpn openconnect network-settings client-ipv6-pool prefix 2001:db8:100::/64
set vpn openconnect network-settings client-ipv6-pool mask 96

# IPv6 DNS
# (настраивается через основные name-server если они поддерживают IPv6)

commit
save

Timeouts и Keepalive

Настройка таймаутов для сессий.

configure

# Idle timeout (автоматическое отключение после бездействия)
# Настраивается через конфигурационный файл ocserv

# DPD (Dead Peer Detection) включен по умолчанию

commit
save

Per-User static IP

Статические IP адреса для определенных пользователей.

# Через identity-based конфигурацию в /config/openconnect/
# Создайте файл /config/openconnect/config-per-user/alice

# Содержимое файла (пример):
# ipv4-network = 10.100.0.10/32
# routes = 192.168.1.0/24, 10.0.0.0/8

Мониторинг и диагностика

Проверка статуса сервера

# Активные VPN сессии
show vpn openconnect-server sessions

# Детальная информация о сессиях
show vpn openconnect-server sessions detail

Пример вывода:

Username    Remote IP       VPN IP        Connected Since  RX/TX Bytes
--------    ---------       ------        ---------------  -----------
alice       203.0.113.50    10.100.0.10   Jan 15 09:30:21  125M / 89M
bob         198.51.100.25   10.100.0.11   Jan 15 11:15:45  45M / 23M
charlie     192.0.2.100     10.100.0.12   Jan 15 13:22:10  12M / 5M

Логи

# Общий лог OpenConnect
show log vpn openconnect

# Последние 50 строк
show log tail 50 | match openconnect

# Поиск ошибок
show log | match "openconnect.*error"

# Поиск аутентификации
show log | match "openconnect.*auth"

# Live лог
monitor log | match openconnect

Системные процессы

# Процессы ocserv
show system processes openconnect

# Использование ресурсов
show system resources

Network статистика

# Интерфейсы OpenConnect
show interfaces

# Детальная статистика
show interfaces detail | match vpns

# Routing table (VPN маршруты)
show ip route

RADIUS статус

# Проверка связности с RADIUS сервером
# (выполните на VyOS)
ping 192.168.1.10

# Проверка RADIUS порта (на клиенте)
nc -zv 192.168.1.10 1812

# RADIUS accounting логи (на RADIUS сервере)
tail -f /var/log/freeradius/radius.log

Troubleshooting

Клиент не может подключиться

Проблема: “Connection failed” или “Connection timeout”.

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

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

# Проверить что порт открыт
sudo netstat -tlnp | grep 443

# Проверить логи
show log | match openconnect | tail 20

# Проверить SSL сертификаты
show pki certificate openconnect-server

Решение:

  1. Убедитесь что firewall правила разрешают TCP 443:

    set firewall ipv4 input filter rule 150 action accept
    set firewall ipv4 input filter rule 150 destination port 443
    set firewall ipv4 input filter rule 150 protocol tcp
    commit
  2. Проверьте SSL сертификат (не истек ли):

    show pki certificate openconnect-server
    # Проверьте поле "Valid until"
  3. Проверьте что OpenConnect сервис запущен:

    show vpn openconnect-server sessions

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

Проблема: “Authentication failed” или “Invalid username/password”.

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

# Проверить пользователей
show configuration commands | match openconnect.*username

# Проверить OTP ключи
show configuration commands | match openconnect.*otp

# Логи аутентификации
show log | match "auth.*failed"

Решение для локальной аутентификации:

# Сброс пароля пользователя
configure
set vpn openconnect authentication local-users username alice password 'NewSecurePass123!'
commit

Решение для RADIUS:

# Проверить связность с RADIUS
ping 192.168.1.10

# Проверить RADIUS shared secret
show configuration commands | match radius.*key

# Тест RADIUS (с RADIUS сервера)
radtest alice SecurePassword 192.168.1.1 0 SharedSecret123

Решение для 2FA OTP:

# Пересоздать OTP ключ
exit
generate openconnect username alice otp-key hotp-time

# Обновить ключ в конфигурации
configure
set vpn openconnect authentication local-users username alice otp НОВЫЙ_КЛЮЧ
commit

Подключился но нет связности

Проблема: VPN подключен, клиент получил IP, но нет доступа к внутренней сети.

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

# Проверить что клиент получил IP
show vpn openconnect-server sessions

# Проверить routing
show ip route

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

# Ping с VyOS к клиенту
ping 10.100.0.10 source-address 192.168.1.1

Решение:

configure

# Добавить firewall forward правила
set firewall ipv4 forward filter rule 250 action accept
set firewall ipv4 forward filter rule 250 source address 10.100.0.0/24
set firewall ipv4 forward filter rule 250 description 'VPN clients'

# Проверить NAT (если нужен интернет доступ)
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 10.100.0.0/24
set nat source rule 100 translation address masquerade

commit

DNS не работает

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

Решение:

configure

# Проверить DNS серверы
show configuration commands | match openconnect.*name-server

# Добавить публичные DNS
set vpn openconnect network-settings name-server 8.8.8.8
set vpn openconnect network-settings name-server 1.1.1.1

commit

Низкая производительность

Проблема: Медленная скорость через VPN.

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

# Проверить CPU/Memory
show system resources

# Network статистика
show interfaces statistics

Решение:

# MTU оптимизация (на клиенте)
# В AnyConnect: Settings -> Preferences -> MTU = 1400

# Проверить что DTLS работает (UDP 443 открыт)
set firewall ipv4 input filter rule 151 action accept
set firewall ipv4 input filter rule 151 destination port 443
set firewall ipv4 input filter rule 151 protocol udp
commit

# Hardware offload (если поддерживается)
set system acceleration options

RADIUS timeout

Проблема: “RADIUS server timeout” в логах.

Решение:

configure

# Увеличить timeout
set vpn openconnect authentication radius timeout 10

# Добавить backup RADIUS сервер
set vpn openconnect authentication radius server 192.168.1.11
set vpn openconnect authentication radius server 192.168.1.11 key 'SharedSecret'
set vpn openconnect authentication radius server 192.168.1.11 port 1812

commit

SSL Certificate errors

Проблема: “SSL certificate verification failed” на клиенте.

Решение для self-signed сертификатов:

# На клиенте отключите проверку сертификата:
# OpenConnect CLI:
sudo openconnect --no-cert-check vpn.company.com

# AnyConnect:
# Settings -> Preferences -> Untrusted Server Warning -> Unblock

Решение для production (используйте Let’s Encrypt):

# Получите действительный сертификат
sudo certbot certonly --standalone -d vpn.company.com

# Импортируйте в VyOS
configure
set pki certificate openconnect-server certificate "$(cat /etc/letsencrypt/live/vpn.company.com/fullchain.pem)"
set pki certificate openconnect-server private key "$(cat /etc/letsencrypt/live/vpn.company.com/privkey.pem)"
commit

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

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

  1. Используйте сильные пароли:

    • Минимум 12 символов
    • Комбинация букв, цифр, специальных символов
    • Регулярная смена паролей
  2. Обязательная 2FA для production:

    set vpn openconnect authentication mode local password-otp
  3. Используйте Let’s Encrypt сертификаты:

    • Автоматическое обновление
    • Доверенные клиентами
    • Бесплатные
  4. RADIUS для централизованной аутентификации:

    • Единая база пользователей
    • Accounting и аудит
    • Возможность интеграции с AD/LDAP
  5. Firewall ограничения:

    # Rate limiting для VPN порта
    set firewall ipv4 input filter rule 150 recent count 10
    set firewall ipv4 input filter rule 150 recent time minute 1
  6. Логирование всех подключений:

    set system syslog global facility all level info
  7. Регулярные обновления:

    # Обновление VyOS
    add system image latest
  8. IP whitelist (если возможно):

    # Разрешить VPN только с определенных IP
    set firewall ipv4 input filter rule 150 source address 203.0.113.0/24

Защита от атак

DDoS защита:

configure

# Connection rate limiting
set firewall ipv4 input filter rule 150 recent count 5
set firewall ipv4 input filter rule 150 recent time second 10

# SYN flood защита
set firewall ipv4 input filter rule 149 action drop
set firewall ipv4 input filter rule 149 protocol tcp
set firewall ipv4 input filter rule 149 tcp flags syn
set firewall ipv4 input filter rule 149 recent count 20
set firewall ipv4 input filter rule 149 recent time second 1

commit

Brute-force защита (через fail2ban на VyOS):

# Установка fail2ban (operational mode)
sudo apt-get install fail2ban

# Конфигурация fail2ban для OpenConnect
# /etc/fail2ban/jail.local
[openconnect]
enabled = true
port = 443
filter = openconnect
logpath = /var/log/messages
maxretry = 5
bantime = 3600
findtime = 600

Аудит и compliance

Логирование для compliance:

configure

# Syslog на удаленный сервер
set system syslog host 192.168.1.100 facility all level info
set system syslog host 192.168.1.100 port 514

# RADIUS accounting для аудита
set vpn openconnect accounting mode radius
set vpn openconnect accounting radius server 192.168.1.50
set vpn openconnect accounting radius server 192.168.1.50 key 'AuditSecret'
set vpn openconnect accounting radius server 192.168.1.50 port 1813

commit

Регулярный аудит пользователей:

# Список активных пользователей
show configuration commands | match openconnect.*username

# История подключений (из логов)
show log | match "openconnect.*connected"

Интеграция с другими сервисами

OpenConnect + LDAP/Active Directory

Интеграция через RADIUS как proxy к AD.

FreeRADIUS с LDAP (на RADIUS сервере):

# /etc/freeradius/3.0/mods-enabled/ldap
ldap {
    server = "ldap.company.com"
    identity = "cn=radius,dc=company,dc=com"
    password = "RadiusLDAPPassword"
    base_dn = "ou=users,dc=company,dc=com"

    filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"

    user {
        base_dn = "${..base_dn}"
        filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
    }
}

VyOS конфигурация:

configure
set vpn openconnect authentication mode radius
set vpn openconnect authentication radius server 192.168.1.10 key 'Secret'
commit

OpenConnect + Monitoring

Мониторинг VPN через Prometheus/Grafana.

Node Exporter на VyOS:

# Установка node_exporter
sudo apt-get install prometheus-node-exporter

# Firewall для Prometheus
set firewall ipv4 input filter rule 180 action accept
set firewall ipv4 input filter rule 180 source address 192.168.1.200
set firewall ipv4 input filter rule 180 destination port 9100
set firewall ipv4 input filter rule 180 protocol tcp

Custom метрики OpenConnect:

#!/bin/bash
# /usr/local/bin/openconnect_exporter.sh

# Количество активных сессий
SESSIONS=$(occtl show users | grep -c "Username:")
echo "openconnect_sessions $SESSIONS"

# Вывод метрик

OpenConnect + Backup VPN

OpenConnect как backup для IPsec.

configure

# Primary: IPsec
set vpn ipsec...

# Backup: OpenConnect
set vpn openconnect...

# Routing с приоритетами (через dynamic routing или мониторинг скриптами)

commit

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

  1. Всегда используйте 2FA для production окружений
  2. Let’s Encrypt сертификаты вместо self-signed
  3. RADIUS accounting для аудита и compliance
  4. Split tunneling когда full tunnel не требуется (экономия bandwidth)
  5. Firewall правила для ограничения доступа VPN клиентов
  6. Rate limiting на VPN порту для защиты от DDoS
  7. Регулярный аудит пользователей и сессий
  8. Backup конфигурации перед изменениями
  9. Мониторинг активных сессий и ресурсов
  10. Документирование доступов и конфигураций
  11. Регулярные обновления VyOS и OpenConnect
  12. Тестирование перед применением в production
  13. Disaster recovery план для VPN сервиса
  14. Ротация OTP ключей при смене сотрудников
  15. Логирование на удаленный syslog для сохранности аудита

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

С Cisco AnyConnect на OpenConnect

Преимущества миграции:

  • Open-source решение (без лицензий)
  • Полная совместимость с существующими клиентами
  • Больше гибкости в конфигурации
  • Меньше стоимость владения

План миграции:

  1. Настройте OpenConnect параллельно с Cisco AnyConnect
  2. Используйте тот же пул IP адресов (или новый, если возможно)
  3. Мигрируйте пользователей поэтапно (по отделам)
  4. Тестовый период (оба VPN работают)
  5. Полная миграция после успешных тестов
  6. Отключение Cisco AnyConnect

С OpenVPN на OpenConnect

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

  • Нужна совместимость с AnyConnect клиентами
  • Требуется встроенная 2FA (OTP)
  • Проще для пользователей (Cisco AnyConnect знаком многим)

План:

  1. Установите OpenConnect на новом порту (или новом сервере)
  2. Создайте тех же пользователей
  3. Выдайте инструкции по подключению
  4. Grace period (оба VPN работают)
  5. Миграция пользователей
  6. Отключение OpenVPN

Заключение

OpenConnect VPN Server - это мощное, безопасное и гибкое решение для корпоративного remote access VPN, особенно подходящее для:

  • Enterprise окружений с требованиями к безопасности и аудиту
  • Замены коммерческого Cisco AnyConnect на open-source решение
  • Двухфакторной аутентификации для критичных доступов
  • Интеграции с RADIUS/LDAP/AD для централизованного управления пользователями
  • Строгих firewall ограничений (работа только на TCP 443)
  • Кросс-платформенных клиентов с единым интерфейсом

VyOS обеспечивает полную поддержку OpenConnect со всеми enterprise функциями: локальная аутентификация, RADIUS, 2FA OTP, SSL сертификаты, RADIUS accounting, и identity-based конфигурация.

Для максимальной производительности site-to-site туннелей рассмотрите WireGuard или IPsec, а для простых remote access сценариев - OpenVPN. OpenConnect идеален когда требуется баланс между безопасностью, совместимостью и enterprise функциями.