· 15 мин чтения

OpenConnect поверх VLESS: корпоративный VPN, который не режет DPI

Семёнов Евгений Сергеевич, директор АйТи Фреш. 15+ лет в корпоративных VPN. В 2025-м у нас на практике началось обвальное падение качества чистых OpenConnect-туннелей: у одних клиентов DPI режет соединение через пять минут, у других SSL handshake прерывается на середине. Вариант «поменять порт» перестал работать: системы DPI уже давно определяют AnyConnect по характерному TLS handshake. В статье — рабочая связка ocserv+VLESS Reality, которую я выкатил на четырёх клиентов за последние полгода.

Зачем OpenConnect если есть чистый VLESS

Хороший вопрос. VLESS-клиенты сегодня позволяют и туннелировать весь трафик, и работать с маршрутизацией. Но у корпоратива есть специфика, которую VLESS плохо закрывает:

Собственно, связка даёт лучшее от обоих: снаружи — неотличимый от обычного HTTPS трафик VLESS Reality, внутри — полноценный корпоративный OpenConnect со всеми удобствами.

Архитектура связки

У меня на практике работают две схемы.

Схема A: VLESS как внешний маскировщик. На VPS в европейском дата-центре стоит Xray с VLESS Reality на 443. Клиент подключается к VLESS, в нём поднимается SOCKS5 на localhost, через этот SOCKS OpenConnect идёт к корпоративному ocserv, расположенному за NAT в офисе или на другом VPS. DPI видит только VLESS-трафик к cdn-домену, внутри которого туннелирован OpenConnect.

Схема B: один сервер, два сервиса. Xray слушает 443 с VLESS, плюс fallback на локальный порт 8443, где живёт ocserv. Клиент сначала устанавливает VLESS-сессию, в ней настроен прокси на OpenConnect. Плюсы схемы B — один VPS, минусы — чуть сложнее конфигурация и общая точка отказа.

Железо и сеть

Для офиса до 100 удалёнщиков подходит VPS 2 vCPU / 2 ГБ RAM / 30 ГБ SSD с честным каналом 500 Мбит/с. Локация — Европа или Турция, поближе к России. У нас в АйТи Фреш под основной пул развёрнуто два сервера во Франкфурте и Стокгольме, резерв — в Амстердаме.

ПараметрРекомендация
ОСUbuntu 22.04 LTS или Debian 12
CPU2 vCPU с AES-NI (проверка: grep aes /proc/cpuinfo)
RAM2 ГБ (на 100 одновременных сессий достаточно)
Канал500 Мбит/с симметрично, с анлим-трафиком
IPБелый IPv4, желательно из «чистого» пула хостера
ДоменA-запись на IP, обязательно валидный TLS-сертификат Let's Encrypt

Установка Xray с VLESS Reality

Ставим Xray через официальный скрипт, конфиг — минимальный для Reality:

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

# Генерим ключ Reality
xray x25519
# Получаем privateKey и publicKey, запоминаем

# UUID для пользователя
xray uuid

Конфиг /usr/local/etc/xray/config.json:

{
  "inbounds": [{
    "port": 443,
    "protocol": "vless",
    "settings": {
      "clients": [{"id": "<UUID>", "flow": "xtls-rprx-vision"}],
      "decryption": "none"
    },
    "streamSettings": {
      "network": "tcp",
      "security": "reality",
      "realitySettings": {
        "dest": "www.microsoft.com:443",
        "serverNames": ["www.microsoft.com"],
        "privateKey": "<PrivateKey>",
        "shortIds": ["", "01a2b3c4d5e6f7"]
      }
    }
  }],
  "outbounds": [{"protocol": "freedom"}]
}

systemctl restart xray

Проверяем, что 443 слушается и корректно проксирует на microsoft.com при обычном TLS-подключении:

curl -v https://ваш_домен:443
# Ответ должен быть от Microsoft

Установка ocserv на внутренний порт

OpenConnect-сервер ставится на тот же VPS или отдельный, но обязательно за TLS. В связке с VLESS можно обойтись self-signed — наружу всё равно смотрит Xray:

apt install ocserv gnutls-bin -y

# Self-signed сертификат
certtool --generate-privkey --outfile /etc/ocserv/server-key.pem
cat > /etc/ocserv/server.tmpl << EOF
organization = "ITfresh"
cn = "vpn.internal"
expiration_days = 3650
signing_key
tls_www_server
EOF
certtool --generate-self-signed --load-privkey /etc/ocserv/server-key.pem \
  --template /etc/ocserv/server.tmpl --outfile /etc/ocserv/server-cert.pem

Основные параметры /etc/ocserv/ocserv.conf:

auth = "plain[passwd=/etc/ocserv/ocpasswd]"
tcp-port = 8443
udp-port = 8443
run-as-user = nobody
run-as-group = daemon
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
max-clients = 128
max-same-clients = 3
keepalive = 32400
dpd = 90
mobile-dpd = 1800
try-mtu-discovery = true
cert-user-oid = 2.5.4.3
tls-priorities = "NORMAL:-VERS-SSL3.0:-ARCFOUR-128"
auth-timeout = 240
idle-timeout = 86400
ipv4-network = 10.77.0.0
ipv4-netmask = 255.255.255.0
dns = 10.10.0.10
route = 10.10.0.0/16
cisco-client-compat = true
# Создаём пользователя
ocpasswd -c /etc/ocserv/ocpasswd vpnuser1

systemctl enable --now ocserv
# Проверяем, что слушает 8443
ss -tlnp | grep 8443

Связка через fallback в Xray

В схеме B Xray принимает на 443 и, если запрос не VLESS — перенаправляет на ocserv. Но OpenConnect по TLS несложно отличить от сайта, поэтому мы идём другим путём: VLESS на 443, клиент использует свой VPN-клиент (Hiddify), в нём настраивается локальный SOCKS, через который стартует ocserv-клиент.

На клиенте Windows:

  1. Устанавливаем Hiddify, импортируем профиль VLESS Reality.
  2. В настройках Hiddify включаем локальный SOCKS5 на 127.0.0.1:2080.
  3. Ставим OpenConnect GUI (openconnect-gui).
  4. В профиле OpenConnect указываем Proxy: socks5://127.0.0.1:2080, адрес: vpn.internal:8443.
  5. Логинимся vpn-паролем, получаем корпоративный IP из 10.77.0.0/24.

Интеграция с Active Directory

Для корпоративной сети авторизацию OpenConnect я всегда привязываю к доменной учётке. ocserv поддерживает RADIUS и PAM — через RADIUS он ходит в наш NPS, проверяя логин/пароль в AD и учитывая членство в группе VPN_Users.

# /etc/ocserv/ocserv.conf
auth = "radius[config=/etc/radcli/radiusclient.conf,groupconfig=true]"

# /etc/radcli/radiusclient.conf
authserver nps.corp.ru:1812
acctserver nps.corp.ru:1813
servers /etc/radcli/servers
# /etc/radcli/servers
nps.corp.ru vashSharedSecret

На стороне NPS добавляем сервер ocserv как RADIUS-клиент, и создаём Network Policy с условием «Windows Groups = VPN_Users».

Мини-кейс: логистика, 70 удалёнщиков

В январе 2026 года клиент — логистическая компания в Москве, 180 человек, 70 из них работают удалённо. Предыдущий VPN на L2TP/IPsec лёг в декабре 2025 после обновления правил DPI: у 40% сотрудников соединение рвалось каждые 20 минут. Задача — развернуть стабильный удалённый доступ к корпоративной 1С, CRM Bitrix24 и внутреннему AD FS.

Схема: VPS 4 vCPU / 4 ГБ во Франкфурте, Xray VLESS Reality с маскировкой под aws.amazon.com, ocserv на 127.0.0.1:8443 с RADIUS-авторизацией в корпоративный NPS через SSH-туннель. Клиенты — Hiddify+OpenConnect GUI, инструкция на две страницы, раздана сотрудникам.

Результаты за месяц работы:

Маршрутизация и split-tunnel

Для корпоративного VPN важно, чтобы через туннель шёл только трафик к корпоративным ресурсам, а остальной — напрямую. Это снижает нагрузку на сервер и убирает проблемы с доступом сотрудников к внешним сервисам.

# В ocserv.conf
route = 10.10.0.0/16     # локальные сети офиса
route = 192.168.100.0/24 # удалённый филиал
route = 172.16.0.0/12    # VPN-сеть дата-центра

# Не гнать в туннель всё
tunnel-all-dns = false
dns = 10.10.0.10  # корпоративный DNS только для push

no-route = 0.0.0.0/0  # дефолтный маршрут у клиента

На нашем стенде с выделенным Dell Xeon Platinum 8280 и коммутацией 40G Mellanox задержка между ocserv на VPS и корпоративным NPS составляет 12 мс — пользователи не ощущают разницы с прямым подключением.

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

Для отладки связки я держу три источника логов:

# Мониторинг активных ocserv-сессий
occtl show users
occtl show status

# Тест производительности одного канала
speedtest-cli  # из-под VPN-клиента

Телеметрию отправляю в Grafana+Prometheus через node_exporter и xray-exporter, чтобы видеть RPS, активные сессии и ошибки в реальном времени.

Разворачиваем корпоративный VPN с маскировкой

Связка ocserv + VLESS Reality для офисов от 30 удалённых сотрудников. Настройка на ваших VPS или на наших серверах в дата-центре МТС, интеграция с AD/NPS, клиентские инструкции на русском, мониторинг через Grafana. Работа под ключ за 3–5 рабочих дней.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы про OpenConnect+VLESS

Чем связка OpenConnect+VLESS лучше чистого OpenConnect?
Чистый OpenConnect работает по TLS на 443, что в ряде случаев блокируется DPI. Внешний VLESS Reality поверх транспорта делает канал неотличимым от обычного HTTPS-трафика к реальному сайту — это снижает вероятность блокировки, сохраняя удобство AnyConnect-совместимого клиента.
Нужен ли клиент для такой связки?
Да, работает это через VLESS-клиент (например, Hiddify) с локальным SOCKS, через который потом OpenConnect соединяется с сервером. Либо через обратный подход — VLESS на входе, OpenConnect на бэке. Оба варианта рабочие.
Можно ли использовать один сервер для обеих ролей?
Да, ocserv и Xray прекрасно уживаются на одном VPS. Xray слушает 443 с VLESS Reality, внутренний порт проксирует в ocserv. Для офиса до 100 удалёнщиков достаточно сервера 2 vCPU / 2 ГБ RAM в европейском дата-центре.
Какая производительность у связки?
В наших тестах — около 300 Мбит/с на VPS 4 vCPU/4 ГБ без аппаратной криптографии. С AES-NI на хост-процессоре — до 800 Мбит/с. Задержка добавляет 5–15 мс по сравнению с чистым OpenConnect.
Какой SNI использовать в Reality?
Любой реальный популярный домен с TLS 1.3 и X25519 — github.com, aws.amazon.com, cloudflare.com. Важно, чтобы домен реально работал и был достижим с сервера. Избегайте доменов, запрещённых в вашей юрисдикции.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.