XTLS Vision: что это
- Автор
- Екатерина Лебедева, редактор раздела knowledge base
- Проверил:
- Артём Волков
- Проверено:
- Опубликовано:
- , обновлено
- Версия гайда:
- 1.0
Коротко
XTLS Vision — режим flow у VLESS в Xray-core: он ускоряет передачу уже установленного TLS-соединения и добавляет случайную подкладку в рукопожатие. В Happ включается параметром flow=xtls-rprx-vision в ссылке vless:// и работает только с TCP и TLS или Reality.
После обычного TLS-рукопожатия данные в любом случае проходят через шифрование и расшифровку на клиенте и сервере. Vision ускоряет именно эту часть: он распознаёт, что рукопожатие уже завершено, и переключается на прямую передачу зашифрованных TCP-данных через функцию ядра Linux splice, снижая нагрузку на процессор. Отдельно Vision по умолчанию перехватывает UDP на порт 443, то есть QUIC, из-за чего браузеры на этом канале переходят на обычный HTTPS. Режим доступен только у VLESS и только с транспортом TCP поверх TLS или Reality — для WebSocket, gRPC и XHTTP его не указывают.
XTLS Vision — режим параметра flow у протокола VLESS в Xray-core, который добавляет случайную подкладку в TLS-рукопожатие и затем передаёт данные напрямую через ядро операционной системы, снижая нагрузку на процессор.
Суть термина
XTLS Vision — значение параметра flow у протокола VLESS, а не отдельный протокол и не самостоятельная настройка. Он относится к тому, как передаются данные уже после TLS-рукопожатия, а не к тому, как сервер проверяет клиента.
Во время самого рукопожатия Vision добавляет случайную внутреннюю подкладку — лишние байты переменного размера, из-за которых форма рукопожатия отличается от подключения к подключению. Как только TLS-сессия установлена, Vision переключается на прямую передачу зашифрованных TCP-данных через функцию ядра Linux splice, минуя часть обработки в памяти приложения Xray-core. Это снижает нагрузку на процессор сервера при большом числе одновременных соединений.
Отдельная особенность Vision — поведение с UDP на порту 443. По умолчанию режим перехватывает такие пакеты, из-за чего браузеры, которые пробуют установить QUIC-соединение, переходят на обычный TCP с TLS. Если это поведение не нужно, есть вариант flow=xtls-rprx-vision-udp443, который перехват отключает.
Где Vision работает, а где нет
Режим совместим не с любой комбинацией транспорта и защиты — только с определёнными.
| Транспорт | Защита | Работает Vision |
|---|---|---|
| TCP | TLS | да |
| TCP | Reality | да |
| WebSocket | TLS | нет |
| gRPC | TLS или Reality | нет |
| XHTTP | TLS или Reality | нет |
Значение flow должно совпадать на клиенте и сервере: если сервер настроен на Vision, а клиент подключается без этого параметра, или наоборот, Xray-core разорвёт соединение.
Как это выглядит в Happ
В интерфейсе Happ отдельного переключателя для Vision нет — параметр приходит внутри ссылки или подписки как часть настройки VLESS.
Ссылка. В vless:// после type=tcp и security=reality или security=tls добавляется flow=xtls-rprx-vision:
vless://00000000-0000-0000-0000-000000000000@example.com:443?type=tcp&security=reality&flow=xtls-rprx-vision&pbk=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&sid=0123abcd&sni=example.com#ExampleРучной ввод. Кнопка «+» вверху справа → «Ручной ввод» → протокол VLESS → поле для flow среди параметров транспорта → «Готово».
Если значение flow не совпадает с настройкой сервера, Happ, скорее всего, покажет обычную неудачу подключения или ошибку TLS-рукопожатия, а не отдельное сообщение про Vision.
Чем Vision отличается от похожих терминов
- Reality — способ, которым сервер доказывает подлинность без сертификата; Vision к проверке подлинности отношения не имеет.
- uTLS fingerprint — параметр
fp, который задаёт форму TLS-приветствия клиента; Vision работает уже после рукопожатия, аfp— во время него. - TLS-рукопожатие — сам процесс установления защищённого соединения; Vision добавляет подкладку в этот процесс, но не заменяет его.
- VLESS — протокол, у которого единственного существует параметр
flow; в VMess, Trojan и Shadowsocks режима Vision нет.
Главное
- Vision — не протокол, а значение параметра flow у VLESS; без VLESS такого режима не существует.
- Vision работает только с транспортом TCP и слоем защиты TLS или Reality — для WebSocket, gRPC и XHTTP параметр flow не указывают.
- После завершения TLS-рукопожатия Vision передаёт зашифрованные данные напрямую через функцию ядра Linux splice, снижая нагрузку на процессор сервера.
- По умолчанию Vision перехватывает UDP на порт 443 (QUIC), и браузеры на этом соединении переходят на обычный TCP; вариант flow xtls-rprx-vision-udp443 отключает перехват.
- Значение flow должно совпадать у клиента и сервера: если один ждёт Vision, а другой подключается без него, соединение не установится.
Частые вопросы
Что означает слово Vision в названии режима?
Официальная документация Xray не расшифровывает происхождение названия — это просто имя конкретной реализации flow control внутри XTLS, второй по счёту после более раннего экспериментального варианта. Технически Vision описывает, как именно передаются данные после TLS-рукопожатия: с внутренней подкладкой во время установления соединения и прямой передачей после него.
Насколько заметно Vision ускоряет соединение?
Выигрыш заметнее всего на сервере с высокой нагрузкой: прямая передача через функцию ядра Linux splice снижает копирование данных между памятью процесса и ядра и переключения контекста процессора. На стороне клиента и на слабо загруженном сервере разница в скорости может быть небольшой, а само TLS-рукопожатие Vision не ускоряет — оно проходит как обычно.
Что случится, если в ссылке указать flow=xtls-rprx-vision вместе с type=ws?
Такая комбинация не соответствует тому, как реализован Vision: он рассчитан на прямую работу с TCP-соединением после TLS-рукопожатия, а внутри кадров WebSocket так вмешаться в поток нельзя. На практике сервер и клиент должны быть настроены согласованно: для WebSocket, gRPC и XHTTP параметр flow в конфигурации VLESS просто не указывают.
Как понять, что сервер провайдера работает именно с Vision?
Проще всего посмотреть на саму ссылку — в ней должен быть параметр flow со значением xtls-rprx-vision, обычно рядом с type=tcp и security=reality или security=tls. Если подписка не зашифрована и не скрыта, то же самое видно в параметрах сервера внутри Happ. В зашифрованной подписке эти детали пользователю недоступны.
Зачем Vision перехватывает трафик на UDP-порт 443?
На порту 443 браузеры нередко пробуют установить соединение по QUIC — транспорту на основе UDP, который использует, например, HTTP/3. По умолчанию Vision перехватывает такие попытки, и браузер после неудачи переключается на обычный TCP с TLS, через который и идёт туннель VLESS. Вариант flow xtls-rprx-vision-udp443 этот перехват отключает, если он не нужен.
Обязательно ли использовать Vision вместе с Reality?
Нет, это независимые настройки: Reality отвечает за то, как сервер доказывает подлинность без сертификата, а Vision — за то, как передаются уже зашифрованные данные. VLESS с Reality без Vision вполне работает, как и VLESS с обычным TLS и включённым Vision. На практике их часто комбинируют, потому что оба рассчитаны на транспорт TCP.
Что за подкладка появляется в рукопожатии Vision?
Подкладка (padding) — это лишние байты, которые Vision добавляет во время TLS-рукопожатия, меняя его точный размер и структуру от подключения к подключению. После установления соединения подкладка исчезает, и дальше идёт прямая передача полезных данных без изменений. Это часть внутреннего устройства режима, а не отдельный параметр, который пользователь настраивает вручную.
Упомянутые темы
Похожие материалы
Разделы по теме
Источники
- Документация Happ: примеры ссылок и параметры — обращение 28 сентября 2026
- Документация Xray: исходящее подключение VLESS — обращение 28 сентября 2026