Конвертер VLESS XTLS: что это, зачем нужен и как работает транспорт XHTTP

Подробный разбор технологии XHTTP для VLESS: режимы работы, преимущества перед классическими транспортами, настройка через CDN и без, сравнение с XTLS-Reality и ответы на частые вопросы.

Что такое VLESS и XTLS: базовые понятия

VLESS — это легковесный транспортный протокол без сохранения состояния, разработанный для проекта Xray. Он не зависит от системного времени, а аутентификация клиента выполняется по UUID. В отличие от более старого VMess, VLESS требует обязательного внешнего уровня транспортной защиты — TLS или REALITY.

XTLS (Xray TLS) — это расширение, которое позволяет ядру Xray перехватывать зашифрованные данные на нижнем уровне и, при определённых условиях, выполнять прямую пересылку TCP-сегментов через системный вызов splice. Это значительно снижает нагрузку на процессор и уменьшает задержки, так как данные минуют пространство пользователя.

Комбинация VLESS + XTLS даёт высокую производительность и хорошую маскировку трафика, но классическая реализация имеет ограничения: она использует одно TCP-соединение для передачи данных в обе стороны, что делает её уязвимой для анализа паттернов трафика и блокировок по fingerprint TLS.

Проблемы классического VLESS и почему появился XHTTP

Классическое использование VLESS (в том числе с XTLS-Reality) предполагает прямое подключение клиента к прокси-серверу на VPS. Однако во многих странах, включая Россию, провайдеры начали блокировать целые подсети популярных хостинг-провайдеров, а также отслеживать подключения к одиночным IP-адресам с большим объёмом трафика.

Ранее для обхода таких блокировок использовали WebSocket-транспорт через CDN, но у него есть недостатки:

  • Характерный признак в трафике, который могут детектировать системы глубокого анализа пакетов (DPI).
  • Не все CDN поддерживают проксирование WebSocket.

Альтернативой стал транспорт meek из проекта Tor, который передаёт данные через множество HTTP-запросов-ответов. Однако meek крайне медленный (полудуплексная передача) и создаёт огромное количество запросов, что приводит к быстрому исчерпанию лимитов бесплатных CDN и высоким счетам на платных.

XHTTP был разработан авторами Xray как эволюция идей SplitTunnel и meek. Он решает обе проблемы: обеспечивает высокую скорость за счёт разделения потоков приёма и передачи, и совместим с большинством CDN, включая те, что не поддерживают WebSocket или gRPC.

Как работает XHTTP: три режима транспорта

XHTTP — это не протокол, а транспорт, который обычно используется с VLESS, но теоретически может работать и с другими протоколами. Он имеет три режима работы:

packet-up — самый медленный, но наиболее совместимый. Данные от сервера к клиенту передаются по одному долгоживущему соединению, а от клиента к серверу — через множество короткоживущих HTTP-запросов. Этот режим проходит практически через любые веб-серверы и CDN.

stream-up — более скоростной, но требует определённой настройки веб-сервера. Использует два отдельных долгоживущих соединения: одно для передачи от клиента к серверу, другое — обратно. Совместим с Nginx (при определённых директивах) и Cloudflare (с включённой поддержкой gRPC).

stream-one — единственный режим, который не разделяет потоки «туда» и «обратно», а передаёт данные в обе стороны внутри одного соединения. По сути, это аналог старого VLESS с HTTP-заголовком. Пролезает только через Nginx с директивой grpc_pass и Cloudflare с включённым gRPC.

Выбор режима зависит от конкретной инфраструктуры: если нужно гарантированно работать через любой CDN — выбирайте packet-up, если важна скорость и есть контроль над сервером — stream-up или stream-one.

Преимущества XHTTP перед классическим VLESS и XTLS-Reality

XHTTP даёт несколько ключевых преимуществ, которые делают его привлекательным для обхода современных блокировок:

1. Работа через CDN с domain fronting. XHTTP позволяет подключаться к прокси через CDN, которые поддерживают domain fronting. При этом вы маскируетесь под чужой домен: подключаетесь к IP-адресу, который резолвится для этого домена, и получаете его настоящий сертификат. Тысячи пользователей, посещающих этот сайт, создают естественный шум, скрывающий ваше соединение.

2. Использование TLS v1.2 с аутентичным fingerprint. XTLS-Reality работает только через TLS v1.3, который некоторые провайдеры уже блокируют в сторону популярных хостингов. XHTTP позволяет подключаться по TLS v1.2, при этом fingerprint сервера будет аутентичным, потому что на 443 порту слушает настоящий веб-сервер (например, Nginx), а Xray стоит позади него.

3. Поддержка QUIC. XHTTP может работать через QUIC (на клиенте нужно явно указать ALPN h3). Это эффективно при нестабильном канале связи и может обходить блокировки, если HTTPS заблокирован, а QUIC — нет.

4. Разделение потоков «туда» и «обратно». В режимах packet-up и stream-up данные передаются по разным соединениям, которые могут быть настроены независимо. Например, можно отправлять данные через QUIC, а получать через HTTPS; использовать разные IPv4/IPv6 адреса; или даже направлять трафик на разные серверы в разных странах. Это многократно усложняет анализ и блокировку.

5. Browser dialer. XHTTP поддерживает browser dialer: вы открываете в браузере страницу со специальным скриптом, и Xray-клиент подключается к прокси через этот браузер. Fingerprint клиента становится неотличим от настоящего браузера, что решает проблему детектирования по клиентскому fingerprint.

Ограничения и важные моменты при использовании XHTTP

Несмотря на все преимущества, XHTTP имеет ряд ограничений, которые важно учитывать:

  • Несовместимость с XTLS-Vision. XHTTP нельзя использовать вместе с XTLS-Vision. Защита от детектирования tls-inside-tls обеспечивается за счёт мультиплексирования XMUX и разделения потоков, а не за счёт Vision.
  • Совместимость с XTLS-Reality. XHTTP можно использовать с XTLS-Reality, но в этом случае по умолчанию выбирается режим stream-one (если не указано иное).
  • Зависимость от версий Xray. XHTTP активно развивается, поэтому версии Xray на клиенте и сервере должны быть одинаковыми. Иначе возможны странные глюки или полная неработоспособность.
  • Поддержка клиентов. Клиенты на базе Sing-box не поддерживают XHTTP. Необходимо использовать клиенты на базе Xray: v2raN, v2rayNG и другие работают без проблем.
  • Необходимость настройки веб-сервера. Для работы XHTTP через CDN или напрямую требуется правильно настроить веб-сервер (например, Nginx) для проксирования запросов к Xray. Примеры конфигурации можно найти в репозитории xray-examples.
  • Режимы и совместимость с CDN. Не все CDN одинаково хорошо работают со всеми режимами XHTTP. packet-up наиболее совместим, stream-up и stream-one требуют определённой поддержки со стороны CDN (например, gRPC).

Как настроить VLESS XTLS с XHTTP на сервере и клиенте

Настройка XHTTP требует конфигурации как серверной, так и клиентской части Xray. Рассмотрим базовые шаги.

Серверная часть:

  1. Установите Xray на сервер (например, через официальный скрипт).
  2. Настройте входящее соединение с протоколом VLESS и транспортом XHTTP. Пример конфигурации:
{
  "inbounds": [{
    "port": 443,
    "protocol": "vless",
    "settings": {
      "clients": [{"id": "ваш-uuid", "flow": "xtls-rprx-vision"}],
      "decryption": "none"
    },
    "streamSettings": {
      "network": "xhttp",
      "xhttpSettings": {
        "mode": "packet-up",
        "path": "/"
      },
      "security": "tls",
      "tlsSettings": {
        "certificates": [{"certificateFile": "/путь/к/сертификату.crt", "keyFile": "/путь/к/ключу.key"}]
      }
    }
  }]
}
  1. Если используете CDN, настройте веб-сервер (Nginx) для проксирования запросов на локальный порт Xray.

Клиентская часть:

  1. Установите Xray-клиент (например, v2raN на Windows или v2rayNG на Android).
  2. Настройте исходящее соединение с протоколом VLESS и транспортом XHTTP. Пример:
{
  "outbounds": [{
    "protocol": "vless",
    "settings": {
      "vnext": [{
        "address": "ваш-сервер.com",
        "port": 443,
        "users": [{"id": "ваш-uuid", "flow": "xtls-rprx-vision", "encryption": "none"}]
      }]
    },
    "streamSettings": {
      "network": "xhttp",
      "xhttpSettings": {
        "mode": "packet-up",
        "path": "/"
      },
      "security": "tls"
    }
  }]
}
  1. Если используете CDN, укажите адрес CDN вместо прямого адреса сервера.

Важно: режим и путь должны совпадать на клиенте и сервере. Для stream-up и stream-one могут потребоваться дополнительные настройки веб-сервера.

Использование XHTTP через CDN: практические рекомендации

XHTTP изначально разрабатывался для работы через CDN, и это его главное преимущество. Вот несколько практических советов:

Выбор CDN. Не все CDN одинаково хорошо работают с XHTTP. Лучше всего подходят те, которые поддерживают длительные HTTP-соединения и не обрывают их преждевременно. Cloudflare, Cloudfront, Fastly — хорошие варианты. Некоторые CDN до сих пор разрешают domain fronting, что даёт дополнительный уровень маскировки.

Режим packet-up — самый безопасный выбор для CDN, так как он использует множество короткоживущих запросов от клиента к серверу, что меньше нагружает CDN и реже приводит к обрывам.

Настройка путей. Укажите путь, который не будет конфликтовать с другими правилами на CDN. Лучше использовать уникальный путь, например /xhttp.

Domain fronting. Если ваш CDN поддерживает domain fronting, вы можете указать в SNI чужой домен (например, популярного сайта), а в Host — свой домен. Это делает соединение неотличимым от обычного посещения сайта.

Мониторинг трафика. Следите за объёмом трафика через CDN. Бесплатные тарифы имеют лимиты, и XHTTP в режиме packet-up может создавать больше запросов, чем обычный WebSocket. При больших объёмах рассмотрите платный тариф или прямой вариант без CDN.

Комбинирование с другими транспортами. XHTTP можно использовать не только как единственный транспорт, но и в комбинации: например, данные «туда» через CDN, а «обратно» напрямую. Это ещё больше усложняет анализ.

Безопасность и обход блокировок: стратегии с XHTTP

XHTTP даёт новые возможности для обхода блокировок, но важно понимать общую стратегию. Как отмечают эксперты, современные методы блокировок становятся всё более топорными: провайдеры блокируют целые протоколы (TLS v1.3), подсети хостингов, CDN, а также применяют шейпинг SSH-подключений после превышения лимитов трафика.

XHTTP помогает противостоять этому за счёт:

  • Разделения потоков. Даже если одно соединение будет замечено, второе может остаться незаблокированным.
  • Маскировки под обычный HTTP/HTTPS трафик. XHTTP использует стандартные HTTP-запросы, которые сложно отличить от легитимных.
  • Использования разных протоколов для разных направлений. Например, QUIC для отправки и HTTPS для получения.

Дополнительная стратегия — использование отечественного VPS в качестве первого узла. Трафик внутри страны обычно не фильтруется, поэтому можно подключаться к российскому VPS любым протоколом (даже Shadowsocks), а уже с него направлять трафик на зарубежный прокси. Это снижает риск блокировки на последнем участке.

Также стоит учитывать, что обратный трафик (от сервера к клиенту) часто не фильтруется, поэтому можно использовать reverse proxy или bridge для ещё большей скрытности.

Важно: XHTTP не является серебряной пулей. Он активно развивается, и методы детекции также эволюционируют. Рекомендуется комбинировать разные транспорты и стратегии, а также следить за обновлениями Xray.

Сравнение XHTTP с другими транспортами: WebSocket, gRPC, meek

Чтобы лучше понять место XHTTP, сравним его с основными альтернативами:

WebSocket (WS) — самый популярный транспорт для VLESS через CDN. Он прост в настройке, но имеет характерный признак в трафике, который могут детектировать DPI. Кроме того, не все CDN поддерживают WebSocket.

gRPC — более современный транспорт, использующий HTTP/2. Он быстрее WebSocket, но требует поддержки gRPC со стороны CDN и веб-сервера. Cloudflare поддерживает gRPC, но не все.

meek — транспорт из Tor, использующий множество HTTP-запросов-ответов. Очень медленный (полудуплекс) и создаёт огромную нагрузку на CDN. Практически не используется в современных реализациях.

XHTTP — объединяет преимущества всех трёх: скорость gRPC, совместимость meek (в режиме packet-up) и отсутствие характерных признаков WebSocket. При этом XHTTP добавляет уникальные возможности: разделение потоков, поддержка QUIC, browser dialer.

| Транспорт | Скорость | Совместимость с CDN | Скрытность | Сложность настройки | |-----------|----------|---------------------|------------|---------------------| | WebSocket | Высокая | Средняя | Средняя | Низкая | | gRPC | Высокая | Низкая | Высокая | Средняя | | meek | Низкая | Высокая | Высокая | Высокая | | XHTTP | Высокая | Высокая | Очень высокая | Средняя |

XHTTP — это эволюционный шаг вперёд, но он требует более тщательной настройки и понимания работы сети.

Практический пример: настройка VLESS XTLS с XHTTP на OpenWrt через Podkop

Для пользователей, которые хотят защитить весь домашний трафик, отличным решением является настройка VLESS на роутере с OpenWrt. Утилита Podkop предоставляет удобный веб-интерфейс для управления VPN-подключениями.

Предварительные требования:

  • Роутер с OpenWrt 24.10.4 или новее.
  • Не менее 30 МБ свободного места.
  • Доступ по SSH с правами root.
  • Ссылка vless:// из личного кабинета вашего VPN-провайдера (например, Red Shield VPN).

Установка Podkop:

  1. Подключитесь к роутеру по SSH: ssh root@192.168.1.1.
  2. Выполните команду: sh <(wget -O - https://raw.githubusercontent.com/itdoginfo/podkop/refs/heads/main/install.sh).

Если Podkop уже установлен, скрипт обновит его.

  1. Рекомендуется удалить getdomains и https-dns-proxy, если они были установлены ранее, чтобы избежать конфликтов.

Настройка VLESS (XTLS-Reality) в Podkop:

  1. Перейдите в меню роутера: Services → Podkop.
  2. Укажите:
  • Тип подключения: Proxy.
  • URL конфигурации прокси: вставьте ссылку vless://.
  • Списки сообщества: выберите Russia Inside (или другой список).
  1. Нажмите Save & Apply.
  2. Дополнительно можно настроить маршрутизацию вручную, выбрав пользовательский список доменов или указав внешние списки доменов/подсетей в формате .srs.

После этого все устройства, подключённые к роутеру, будут использовать VPN-соединение согласно настроенной маршрутизации. Обратите внимание: Podkop по умолчанию маршрутизирует только определённые ресурсы (список Russian Inside), а не весь трафик. Это позволяет экономить трафик и избегать блокировок для локальных сервисов.

Если ваш провайдер использует жёсткую фильтрацию, VLESS (XTLS-Reality) маскирует трафик под обычные TLS-соединения, делая его неотличимым от типичной активности браузера. В менее строгих условиях можно использовать AmneziaWG 2.

Вопросы и ответы

Чем отличается XHTTP от обычного VLESS с WebSocket?

XHTTP — это транспорт, который разделяет потоки приёма и передачи данных, в то время как WebSocket использует одно двунаправленное соединение. XHTTP может работать через CDN, которые не поддерживают WebSocket, и обеспечивает лучшую маскировку за счёт использования разных протоколов для разных направлений (например, QUIC для отправки и HTTPS для получения).

Можно ли использовать XHTTP с XTLS-Reality?

Да, XHTTP можно использовать с XTLS-Reality. В этом случае по умолчанию выбирается режим stream-one, если не указано иное. Однако XHTTP нельзя использовать с XTLS-Vision, так как защита от детектирования обеспечивается другими механизмами (XMUX и разделение потоков).

Какие клиенты поддерживают XHTTP?

XHTTP поддерживается клиентами на базе Xray: v2raN (Windows), v2rayNG (Android), а также другими клиентами, использующими ядро Xray. Клиенты на базе Sing-box (например, Sing-box для iOS) не поддерживают XHTTP.

Какой режим XHTTP выбрать для работы через CDN?

Для максимальной совместимости с CDN рекомендуется режим packet-up. Он использует множество короткоживущих HTTP-запросов от клиента к серверу, что реже приводит к обрывам соединения со стороны CDN. Режимы stream-up и stream-one требуют определённой поддержки со стороны CDN (например, gRPC).

Нужно ли настраивать веб-сервер для XHTTP?

Да, если вы используете XHTTP через CDN или хотите получить аутентичный fingerprint TLS, необходимо настроить веб-сервер (например, Nginx) на 443 порту, который будет проксировать запросы к Xray. Примеры конфигурации можно найти в репозитории xray-examples.

Влияет ли XHTTP на скорость соединения?

XHTTP может быть немного медленнее, чем прямое VLESS-соединение, из-за дополнительных HTTP-заголовков и разделения потоков. Однако в режиме stream-up скорость сопоставима с WebSocket, а в режиме packet-up — немного ниже, но всё равно значительно выше, чем у meek. Использование QUIC может улучшить производительность на нестабильных каналах.

Можно ли использовать XHTTP без CDN, напрямую к серверу?

Да, XHTTP может использоваться и без CDN для прямого подключения к серверу. В этом случае он также даёт преимущества: возможность использовать TLS v1.2 с аутентичным fingerprint, поддержку QUIC и разделение потоков. Это может быть полезно, если прямое VLESS-соединение блокируется по fingerprint.