Клиент V2Ray не выбирает протокол за вас. Его задаёт конфиг, который вы импортируете, а конфиг приходит от провайдера или с вашего собственного сервера. Поэтому практический вопрос звучит так: что просить или что настраивать. В статье разобраны различия, которые действительно важны, и в конце дана короткая рекомендация.
Три слоя, а не один выбор
«VLESS или VMess» звучит как одно решение. На деле их три:
- Протокол: как клиент подтверждает себя и как выглядит полезная нагрузка (VMess, VLESS, Trojan, Shadowsocks).
- Транспорт: как идут байты (чистый TCP, WebSocket, gRPC и другие).
- Защита: во что обёрнуто соединение (ни во что, TLS или REALITY).
Один и тот же протокол может быть почти незаметным или сразу бросаться в глаза в зависимости от двух других слоёв. То, что видит цензор, определяют в основном транспорт и защита.
Что может увидеть цензор
- Байты, похожие на случайные. У Shadowsocks и VMess поверх чистого TCP нет узнаваемого заголовка. Это само по себе признак: с конца 2021 года Великий китайский файрвол блокирует соединения, у которых первый пакет похож на полностью зашифрованные данные. Подробности в статье про Китай.
- Рукопожатие TLS. Trojan, а также VLESS или VMess поверх TLS выглядят как HTTPS. Но цензор всё равно может проверить имя сервера, IP-адрес, сертификат и поведение соединения.
- Заимствованное рукопожатие. REALITY имитирует TLS-рукопожатие настоящего сайта, который вы выбрали. Проба без ключа перенаправляется на этот сайт и видит его настоящие страницы. Собственный домен и сертификат не нужны.
Четыре протокола рядом
| VMess | VLESS | Trojan | Shadowsocks | |
|---|---|---|---|---|
| Сам шифрует нагрузку | Да | Нет, опирается на TLS или REALITY | Нет, опирается на TLS | Да |
| Как выглядит по умолчанию | Случайные байты в чистом TCP | Зависит от защиты: случайные байты, TLS или REALITY | HTTPS | Случайные байты |
| Нужен свой домен и сертификат | Только с TLS | Только с TLS, с REALITY не нужен | Да | Нет |
| Ломается при неверных часах | Да | Нет | Нет | Нет |
| Импортируется в v2rc | Да | Да | Да | Да |
- VMess — исходный протокол V2Ray. Он проверяет UUID и метку времени, поэтому если часы на телефоне или сервере уходят на пару минут, соединение просто перестаёт работать без сообщения об ошибке. Используйте alterId 0 (режим AEAD); ненулевой alterId — устаревший.
- VLESS — более лёгкий преемник. Он сам ничего не шифрует, поэтому приватен ровно настолько, насколько надёжен слой под ним. Используйте его с TLS или REALITY и никогда с защитой
noneчерез открытый интернет. - Trojan копирует HTTPS: пароль внутри обычного TLS-соединения. Клиенту, который не знает пароль, показывают обычную веб-страницу. Нужен настоящий сертификат на настоящий домен, а домен можно заблокировать.
- Shadowsocks — давно известный шифрованный прокси, самый простой в развёртывании. Берите AEAD-шифр; старые потоковые шифры вроде
rc4-md5илиaes-256-cfbслабы. Без плагина или обёртки его трафик относится к полностью зашифрованному.
Что добавляют REALITY и Vision
В конфиге REALITY вы увидите security=reality, имя сервера (sni), публичный ключ (pbk) и короткий идентификатор (sid). Имя сервера должно быть настоящим сайтом с поддержкой TLS 1.3 и HTTP/2; именно это требует документация REALITY.
flow=xtls-rprx-vision — это поток Vision. TLS-соединение внутри другого TLS-соединения оставляет узнаваемый узор; в научной литературе его называют TLS-in-TLS, а Xue и соавторы (USENIX Security 2024) показали, что по таким узорам можно обнаруживать обфусцированные прокси. Vision задуман, чтобы ослабить этот узор для трафика, который сам является HTTPS.
Ни то, ни другое не волшебство. IP-адрес и хостинг-сеть вашего сервера по-прежнему важны, а REALITY не скрывает, что соединение идёт на зарубежный адрес дата-центра.
Что просить
- В сети с ограничениями (Россия, Иран, Китай и подобные): VLESS с REALITY и Vision поверх TCP на порту 443.
- Второй конфиг другого типа: Trojan или VLESS поверх TLS с WebSocket или gRPC, при желании за CDN. CDN скрывает IP-адрес вашего сервера, но зависит от того, доступна ли сама CDN и не замедляют ли её там, где вы находитесь.
- В открытой сети: любой из четырёх. Берите то, что уже поддерживает ваш провайдер.
- Если провайдер выдал подписку: выбирать вы не можете, но можете прочитать ссылки и понять, что получили. См. как читать ссылку конфига.
- Держите минимум два конфига с разных хостов. Когда один перестанет работать, нужен другой IP-адрес и желательно другой протокол, а не ещё один конфиг с того же сервера.
Что v2rc умеет и не умеет импортировать
v2rc импортирует VMess, VLESS (включая REALITY), Shadowsocks и Trojan из ссылки, файла JSON V2Ray, буфера обмена или адреса подписки. Hysteria 2, TUIC, WireGuard, AmneziaWG и NaiveProxy он не импортирует. Первые четыре работают поверх UDP, который многие сети с ограничениями отбрасывают; NaiveProxy работает поверх HTTPS, но ему нужен собственный клиент. Для них понадобится другое приложение.
В v2rc нет встроенных серверов: конфиги вы приносите сами. Smart Connect выбирает самый быстрый конфиг и перед переключением проверяет, что туннель действительно пропускает трафик.
Источники
- Документация REALITY и примеры конфигураций Xray
- Описание протокола Trojan
- Спецификация Shadowsocks AEAD
- Xue, Kallitsis, Houmansadr, Ensafi: Fingerprinting Obfuscated Proxy Traffic with Encapsulated TLS Handshakes, USENIX Security 2024
- Wu и соавторы: How the Great Firewall of China Detects and Blocks Fully Encrypted Traffic, USENIX Security 2023