Что такое XHTTP и зачем он нужен
XHTTP (eXtended HTTP) — это транспортный уровень для прокси-протоколов, разработанный в экосистеме Xray. Его основная задача — маскировать прокси-трафик под обычные HTTP-запросы, что делает его эффективным инструментом для обхода DPI и блокировок. В отличие от полноценного протокола, XHTTP не шифрует данные сам по себе, а лишь обеспечивает транспортировку зашифрованного потока внутри HTTP-сессий.
Появление XHTTP связано с ростом блокировок в России и других странах, где провайдеры начали блокировать целые подсети хостинг-провайдеров и применять DPI для анализа трафика. Классические решения, такие как VLESS с XTLS-Reality, работают напрямую с сервером, но их можно обнаружить по характерным признакам TLS-рукопожатий и паттернам трафика. XHTTP решает эту проблему, разделяя трафик на несколько HTTP-соединений и используя CDN в качестве промежуточного звена.
Важно понимать: XHTTP — это не протокол, а транспорт. Обычно его используют вместе с VLESS, но теоретически он может работать и с другими протоколами. Он был создан для работы через CDN, но может применяться и для прямых подключений, что даёт дополнительные преимущества в маскировке.
Как работает XHTTP: режимы и архитектура
XHTTP поддерживает три режима работы, каждый из которых предназначен для разных условий сети и уровня совместимости с CDN.
packet-up — самый медленный, но наиболее совместимый режим. Он использует одно долгоживущее соединение для передачи данных от сервера к клиенту и множество короткоживущих HTTP-запросов для передачи от клиента к серверу. Такой подход работает практически с любыми веб-серверами и CDN, включая те, которые не поддерживают WebSocket или gRPC.
stream-up — более скоростной режим, который использует два долгоживущих соединения: одно для загрузки, другое для выгрузки. Он требует более тонкой настройки сервера и совместим не со всеми CDN, но обеспечивает лучшую производительность.
stream-one — единственный режим, который не разделяет соединения для разных направлений. Все данные передаются в одном соединении, что делает его похожим на старый VLESS с HTTP-заголовком. Этот режим работает только с Nginx (через grpc_pass) и Cloudflare (с включённой поддержкой gRPC).
Ключевая инновация XHTTP — возможность разделять upload и download на разные соединения, которые могут идти через разные сети, IP-адреса и даже серверы. Например, можно отправлять данные через QUIC, а получать через HTTPS, или использовать IPv6 для одного направления и IPv4 для другого. Это сильно затрудняет анализ трафика и делает блокировку практически невозможной.
Преимущества XHTTP перед другими транспортами
XHTTP предлагает несколько уникальных преимуществ, которые делают его привлекательным для обхода блокировок.
Маскировка под реальный веб-трафик. В отличие от VLESS Reality, который имитирует TLS-соединение с реальным сайтом, XHTTP полностью встраивается в HTTP-сессии. DPI видит обычные запросы к CDN, которые невозможно отличить от трафика миллионов других пользователей.
Работа через CDN без поддержки WebSocket. Многие CDN не поддерживают WebSocket или gRPC, но XHTTP может работать через любой CDN, который умеет обрабатывать HTTP-запросы. Это расширяет выбор доступных CDN и повышает устойчивость к блокировкам.
Поддержка TLS 1.2 с аутентичным fingerprint. XHTTP позволяет подключаться к прокси через TLS 1.2, при этом fingerprint сервера будет соответствовать реальному веб-серверу (например, Nginx), который стоит перед Xray. Это решает проблему детектирования по отпечаткам TLS.
Browser dialer. Эта функция позволяет использовать реальный браузер в качестве клиента. Xray-клиент подключается к браузеру, а скрипт в браузере устанавливает соединение с прокси. В результате fingerprint клиента полностью соответствует реальному браузеру, что делает детектирование практически невозможным.
Устойчивость к анализу паттернов. Разделение трафика на несколько соединений и возможность использования разных сетей для upload/download сильно затрудняют анализ TLS-in-TLS и других характерных признаков VPN-трафика.
VLESS через CDN: как это работает и зачем
Использование CDN в связке с VLESS и XHTTP решает проблему блокировки IP-адресов. Когда клиент подключается к прокси напрямую, его трафик идёт на конкретный IP-адрес сервера в дата-центре. При белых списках (allowlist) ТСПУ такой IP-адрес блокируется первым, так как он не входит в список разрешённых сетей.
CDN-фронт решает эту проблему: клиент подключается к домену CDN, который проксирует трафик на ваш origin-сервер. Для наблюдателя это выглядит как обычный HTTPS-запрос к популярной CDN-сети, которую невозможно заблокировать точечно без ущерба для множества легитимных сервисов.
Важно различать два уровня защиты:
- Reality / TLS-маскировка — скрывает характер трафика от DPI.
- CDN-фронт — скрывает реальный IP-адрес ноды, делая её доступной даже при белых списках.
CDN не борется с DPI напрямую, но решает проблему достижимости адреса. Если ваш IP-адрес заблокирован, никакая маскировка не поможет — соединение просто не установится. CDN-фронт обеспечивает доступность, а XHTTP или Reality обеспечивают скрытность.
XHTTP vs WebSocket vs gRPC: сравнение под CDN
При выборе транспорта для работы через CDN важно понимать различия между основными вариантами.
WebSocket — самый совместимый транспорт, поддерживается почти всеми CDN. Однако у него есть недостатки: одна TCP-сессия на соединение, некоторые CDN обрывают upgrade или закрывают соединение по idle-таймауту.
gRPC — мультиплексный транспорт поверх HTTP/2, стабилен на длинных сессиях. Но требует сквозной поддержки HTTP/2, которую часть CDN даунгрейдит до HTTP/1.1, ломая стриминг.
XHTTP — гибкий транспорт, который изначально рассчитан на работу через промежуточные HTTP-прокси и CDN. Он разделяет upload и download, что важно для CDN, по-разному обрабатывающих направления. XHTTP может работать даже там, где CDN разрешает только GET-запросы, если явно задан режим packet-up.
Практический совет: для нового фронта через CDN чаще всего выбирают VLESS + XHTTP, так как он наиболее устойчив к ограничениям CDN. WebSocket остаётся хорошим запасным вариантом, а gRPC — для специфических случаев с гарантированной поддержкой HTTP/2.
Настройка XHTTP на сервере и клиенте
Для настройки XHTTP потребуется VPS-сервер, домен с SSL-сертификатом и клиент, поддерживающий XHTTP (например, Xray или Sing-Box).
Шаг 1: Установка Xray или Sing-Box. Для Xray можно использовать официальный скрипт установки, для Sing-Box — deb-пакет или скрипт. Убедитесь, что версии на сервере и клиенте совпадают, так как XHTTP активно развивается и несовместимость версий может вызвать проблемы.
Шаг 2: Получение SSL-сертификата. XHTTP требует HTTPS, поэтому необходимо получить сертификат для вашего домена. Можно использовать acme.sh или certbot.
Шаг 3: Конфигурация сервера. В конфигурации Xray или Sing-Box укажите inbound с типом xhttp, порт 443, путь (например, /xhttp) и режим (auto, packet-up, stream-up или stream-one). Для Sing-Box пример конфигурации выглядит так:
{
"inbounds": [
{
"type": "xhttp",
"listen": "0.0.0.0",
"listen_port": 443,
"users": [
{
"name": "user1",
"uuid": "ваш-uuid"
}
],
"tls": {
"enabled": true,
"server_name": "your-domain.com",
"certificate_path": "/etc/sing-box/tls/cert.pem",
"key_path": "/etc/sing-box/tls/key.pem"
},
"xhttp": {
"max_early_data": 2048,
"early_data_header_name": "X-Early-Data"
}
}
]
}Шаг 4: Конфигурация клиента. На клиенте укажите outbound с типом xhttp, адрес сервера (или CDN-домен), порт, UUID и TLS-настройки. Для Sing-Box также можно включить uTLS с fingerprint браузера.
Шаг 5: Настройка CDN. Если вы используете CDN, настройте DNS-запись вашего домена на CDN, а в панели CDN укажите origin-сервер (IP ноды). Убедитесь, что для пути /xhttp отключён кэш, иначе CDN будет отдавать устаревшие ответы.
Особенности работы через CDN: ограничения и подводные камни
Использование CDN с XHTTP имеет несколько важных ограничений, которые нужно учитывать.
CDN не всегда пропускает POST-запросы. Многие CDN разрешают только GET-запросы к произвольным путям. В этом случае XHTTP должен работать в режиме packet-up, который использует GET для загрузки данных. Если режим не задан явно, клиент и сервер могут не договориться о направлении аплоада, что приведёт к неработоспособности.
Проверка совместимости CDN. Перед настройкой проверьте, поддерживает ли ваш CDN POST и GET. Это можно сделать с помощью curl:
curl -s -o /dev/null -w "POST=%{http_code}\n" -X POST https://cdn-domain.example/xhttp -d x=1
curl -s -o /dev/null -w "GET=%{http_code}\n" https://cdn-domain.example/xhttpЕсли POST возвращает 403/405, а GET — 200/404, значит CDN работает только с GET, и нужно использовать packet-up.
Кэширование. Для трафикового пути обязательно отключите кэш на CDN (Cache-Control: no-cache). Иначе CDN будет отдавать устаревшие ответы, что приведёт к залипанию подписок и другим проблемам.
Латентность. Путь клиент → CDN edge → origin длиннее прямого подключения. Для веб-сёрфинга это незаметно, но для игр и VoIP может быть критично.
Стоимость. CDN тарифицирует не только трафик, но и количество запросов. XHTTP генерирует много мелких запросов, поэтому на масштабе счёт может оказаться выше ожидаемого. Закладывайте это в бюджет.
Когда выбирать XHTTP, а когда остаться на Reality
XHTTP — не универсальное решение, и в некоторых случаях лучше остаться на проверенном VLESS Reality.
Выбирайте XHTTP, если:
- Вы находитесь в регионе с агрессивным DPI (Москва, Санкт-Петербург, Краснодар и другие крупные города).
- У вас нестабильное соединение, и вы хотите использовать CDN для дополнительной стабильности.
- Вы используете Sing-Box или Xray и готовы к настройке.
- Вам нужна максимальная скрытность, и вы готовы пожертвовать скоростью.
Оставайтесь на Reality, если:
- У вас стабильное соединение, и Reality не блокируется.
- Вам критически важна минимальная задержка (игры, VoIP).
- Вы не хотите усложнять настройку и использовать CDN.
Важно помнить, что XHTTP и Reality не исключают друг друга. Разумная стратегия — держать оба входа: прямой Reality-inbound для быстрого подключения, когда блокировок нет, и CDN-фронт с XHTTP для устойчивости во время ужесточений. Переключение между ними обеспечит стабильность в любых условиях.
Будущее XHTTP и развитие методов обхода
XHTTP активно развивается, и его авторская команда продолжает улучшать транспорт. Вместе с XHTTP появился новый алгоритм мультиплексирования XMUX, который обеспечивает защиту от детектирования TLS-in-TLS. Важно следить за обновлениями Xray и Sing-Box, так как новые версии могут содержать исправления и улучшения.
Однако эксперты отмечают, что дальнейшая тактика борьбы с цензурой должна строиться не только на совершенствовании протоколов, но и на использовании особенностей самих механизмов блокировок. Например, трафик внутри страны часто не фильтруется, поэтому можно использовать отечественный VPS в качестве первого хопа, а уже с него направлять трафик за границу. Также можно использовать reverse proxy и bridge-механизмы, которые позволяют обходить фильтрацию обратного трафика.
CDN не обязательно должны быть иностранными — российские CDN также могут быть полезны, особенно если их диапазоны входят в белые списки. В любом случае, XHTTP — это важный шаг в эволюции обхода блокировок, и его значение будет только расти.
Вопросы и ответы
Чем XHTTP отличается от VLESS Reality?
XHTTP — это транспорт, который маскирует трафик под обычные HTTP-запросы к CDN, в то время как VLESS Reality имитирует TLS-соединение с реальным сайтом. XHTTP не создаёт отдельного TLS-соединения, а встраивается в HTTP-сессии, что делает его менее заметным для DPI. Reality быстрее в идеальных условиях, но XHTTP устойчивее к блокировкам и может работать через CDN.
Можно ли использовать XHTTP без CDN?
Да, XHTTP может работать и без CDN, напрямую подключаясь к серверу. Это даёт преимущества в маскировке: можно использовать TLS 1.2 с аутентичным fingerprint, а также разделять upload и download на разные соединения. Однако основное преимущество XHTTP раскрывается именно при работе через CDN.
Почему через CDN VLESS работает в одном приложении и не работает в другом?
Частая причина — CDN не пропускает POST-запросы, и режим XHTTP не зафиксирован явно. Разные клиенты по-разному выбирают направление аплоада, и без явного mode packet-up часть из них не договаривается с сервером. Проверьте POST/GET одним curl и задайте packet-up на обеих сторонах.
Нужно ли отключать кэш на CDN для VLESS-трафика?
Да, для path, через который идут трафик и подписки, кэш отключают (no-cache). Иначе CDN отдаёт устаревшие ответы, а в случае подписок — залипшие конфиги в клиенте. Кэш имеет смысл только для реальной статики, если она есть на этом домене.
Какие клиенты поддерживают XHTTP?
XHTTP поддерживается клиентами на базе Xray: v2rayN, v2rayNG, Nekoray и другими. Sing-Box также поддерживает XHTTP, но важно использовать версии 1.10+ и следить за совместимостью версий на сервере и клиенте.
Стоит ли переходить на XHTTP, если Reality работает стабильно?
Если у вас стабильный VLESS Reality и он не блокируется, менять работающую конфигурацию не стоит. XHTTP имеет смысл, когда вы сталкиваетесь с блокировками или хотите повысить скрытность. Лучше держать оба варианта и переключаться в зависимости от ситуации.