Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

NET-SSL-MUX-020 Сетевое оборудование и VPN

Настройка OpenVPN через TCP 443 и проксирование через Nginx / HAProxy

Обновлено: 25.08.2026 · Официальная документация ↗

В условиях жестких корпоративных фаерволов и публичных Wi-Fi сетей возникают ограничения:

  • Блокировка любых исходящих портов, кроме TCP 80 (HTTP) и TCP 443 (HTTPS).
  • Активное сканирование фаерволом порта 443 (Active Probing): при обнаружении заголовков OpenVPN порт мгновенно блокируется.
  • Необходимость разместить на одном публичном IPv4 адресе одновременно боевой веб-сайт и VPN-сервер.
  • Падение производительности веб-сервера при прямом пробросе трафика.

1. Архитектура SSL Multiplexing (Разделение протоколов)

Мультиплексор (HAProxy или sslh) слушает входящие соединения на порту 0.0.0.0:443. При поступлении запроса он анализирует первые байты пакета: если это валидный HTTPS-запрос от браузера — он передается на локальный Nginx (127.0.0.1:8443), если это хэндшейк OpenVPN — он уходит на локальный сокет OpenVPN (127.0.0.1:1194).

2. Настройка мультиплексирования через HAProxy (/etc/haproxy/haproxy.cfg)

global
    log /dev/log local0
    maxconn 4096

defaults
    log global
    mode tcp
    timeout connect 5s
    timeout client 50s
    timeout server 50s

frontend SSL_MUX_FRONTEND
    bind 0.0.0.0:443
    mode tcp
    tcp-request inspect-delay 5s
    tcp-request content accept if { req_ssl_hello_type 1 }

    # Если в начале идет сигнатура OpenVPN, отправляем на VPN:
    use_backend OPENVPN_BACKEND if !{ req_ssl_hello_type 1 }
    # Весь стандартный TLS трафик направляем на реальный веб-сервер:
    default_backend HTTPS_WEB_BACKEND

backend HTTPS_WEB_BACKEND
    mode tcp
    server nginx_web 127.0.0.1:8443 check

backend OPENVPN_BACKEND
    mode tcp
    timeout server 2h
    server ovpn_srv 127.0.0.1:1194 check

3. Конфигурация OpenVPN Сервера (/etc/openvpn/server-tcp.conf)

# Работа строго в режиме TCP на локальном сокете:
proto tcp-server
port 1194
local 127.0.0.1
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh.pem

server 10.9.0.0 255.255.255.0
cipher AES-256-GCM
auth SHA256
keepalive 10 120

# Маскировка под реальный веб-сервер при некорректных запросах:
port-share 127.0.0.1 8443

4. Альтернатива: Легковесный мультиплексор `sslh`

# /etc/default/sslh:
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:8443 --openvpn 127.0.0.1:1194 --pidfile /var/run/sslh/sslh.pid"
💡 Практика специалистов: При настройке SSL Multiplexing обязательно размещайте на локальном порту 8443 работающий валидный HTTPS-сайт с настоящим TLS-сертификатом Let's Encrypt. Это делает порт 443 полностью неотличимым от обычного веб-сервера при внешнем аудите сетевыми сканерами.

Частые вопросы (FAQ)

Почему TCP режим OpenVPN работает медленнее, чем UDP?

При потере пакетов на физическом уровне протокол TCP внутри туннеля и внешний TCP мультиплексора начинают одновременно выполнять повторную передачу (TCP Meltdown), что вызывает кратковременные просадки скорости.

Как директива port-share защищает от активного сканирования DPI?

Если цензор или сканер безопасности отправляет обычный HTTP/HTTPS запрос на порт OpenVPN, сервер не сбрасывает соединение (что выдало бы VPN), а прозрачно проксирует запрос на локальный веб-сервер, возвращая реальный сайт-визитку.

Можно ли добавить проксирование SSH на этот же 443 порт?

Да, мультиплексор sslh и HAProxy поддерживают одновременное разделение на SSH, HTTPS, OpenVPN и Shadowsocks на одном единственном порту 443.

Теряется ли реальный IP-адрес клиента веб-сайта при использовании HAProxy?

Чтобы веб-сервер Nginx видел реальные IP посетителей, настройте передачу PROXY Protocol: добавьте директиву send-proxy в конфигурации HAProxy и proxy_protocol в директиве listen у Nginx.

Полезные материалы
Рекомендуем