VLESS(XTLS Vision Seed)
VLESS - это легкий транспортный протокол без сохранения состояния, который разделен на входящую и исходящую части и может служить мостом между клиентом и сервером Xray.
В отличие от VMess, VLESS не зависит от системного времени, аутентификация также осуществляется с помощью UUID.
OutboundConfigurationObject
OutboundConfigurationObject соответствует элементу settings в OutboundObject.
{
"outbounds": [
{
// ...
"protocol": "vless",
"settings": {
"address": "example.com",
"port": 443,
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0,
"reverse": {}
}
}
]
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
address: address
Адрес сервера, указывающий на сервер, поддерживаются доменные имена, IPv4 и IPv6.
port: number
Порт сервера, обычно тот же, что и порт, прослушиваемый сервером.
id: string
Идентификатор пользователя VLESS, может быть любой строкой длиной менее 30 байт или допустимым UUID. Пользовательская строка и ее UUID-отображение эквивалентны, это означает, что вы можете использовать следующие способы записи id в файле конфигурации для идентификации одного и того же пользователя:
- Напишите
"id": "Я люблю арбуз учителя 1314", - Или напишите
"id": "5783a3e7-e373-51cd-8642-c83782b807c5"(этот UUID является UUID-отображением строки "Я люблю арбуз учителя 1314")
Стандарт сопоставления описан в VLESS UUID Mapping Standard: Mapping Custom Strings to a UUIDv5.
Вы можете использовать команду xray uuid -i "Пользовательская строка" для генерации UUID, соответствующего пользовательской строке. Вы также можете использовать команду xray uuid для генерации случайного UUID.
encryption: "none"
Настройки шифрования VLESS. Не может быть пустым, для отключения необходимо явно установить значение "none".
Большинству пользователей рекомендуется использовать команду xray vlessenc для автоматической генерации этого поля, чтобы избежать ошибок. Подробные настройки ниже рекомендуются только для продвинутых пользователей.
Подробная конфигурация
Его формат представляет собой строку подробных настроек, соединенных символом .. Например, mlkem768x25519plus.native.0rtt.100-111-1111.75-0-111.50-0-3333.ptjHQxBQxTJ9MWr2cd5qWIflBSACHOevTauCQwa_71U. В этом документе отдельная часть, разделенная точкой, называется блоком.
- Первый блок, это метод рукопожатия, в настоящее время он может быть только
mlkem768x25519plus. Требуется, чтобы сервер и клиент совпадали. - Второй блок, это метод шифрования, возможные варианты:
native/xorpub/random, которые соответствуют: пакет данных в исходном формате / исходный формат + обфускация части открытого ключа / полностью случайное число (подобно VMESS/Shadowsocks). Требуется, чтобы сервер и клиент совпадали. - Третий блок, это восстановление сеанса. Выбор
0rttбудет следовать настройкам сервера, пытаясь использовать ранее сгенерированный тикет для пропуска рукопожатия и быстрого подключения (может быть вручную отключено сервером). Выбор1rttпринудительно выполнит процесс рукопожатия 1 RTT. Здесь это отличается по смыслу от настроек сервера; подробности см. в настройкахdecryptionдля входящих соединений VLESS.
Далее идет padding (заполнение). После установления соединения клиент отправляет некоторые "мусорные" данные для маскировки характеристик длины. Он не обязан совпадать с сервером (совпадающая часть для входящего трафика - это padding, отправляемый сервером в сторону клиента). Это переменная часть, формат: padding.delay.padding+(.delay.padding)*n (можно вставлять несколько padding, но требуется, чтобы между двумя блоками padding обязательно был блок delay). Например, можно написать очень длинную строку padding.delay.padding.delay.padding.delay.padding.delay.padding.delay.padding.
- Формат
padding:probability-min-max, например,100-111-1111, что означает отправку padding длиной 111~1111 с вероятностью 100%. - Формат
delayтакжеprobability-min-max, например,75-0-111, что означает ожидание 0~111 миллисекунд с вероятностью 75%.
Первый блок padding имеет особые требования: вероятность должна быть 100%, а минимальная длина должна быть больше 0. Если padding отсутствует, ядро автоматически использует 100-111-1111.75-0-111.50-0-3333 в качестве настроек padding.
Последний блок будет распознан ядром как параметр, используемый для аутентификации сервера. Он может быть сгенерирован с помощью ./xray x25519 (используя часть Password) или ./xray mlkem768 (используя часть Client) и должен соответствовать серверу. mlkem768 является постквантовым алгоритмом, который может предотвратить (в будущем) компрометацию параметров клиента и использование квантового компьютера для взлома закрытого ключа и выдачи себя за сервер. Этот параметр используется только для проверки, сам процесс рукопожатия в любом случае является постквантово-безопасным, и существующие зашифрованные данные не могут быть взломаны будущими квантовыми компьютерами.
flow: string
Режим управления потоком, используется для выбора алгоритма XTLS.
В настоящее время для исходящего протокола доступны следующие режимы управления потоком:
- Отсутствует
flowили пустая строка: используется обычный TLS-прокси. xtls-rprx-vision:Использует XTLS, включает случайное заполнение внутреннего рукопожатия. Перехватывает UDP-трафик на порт 443 (QUIC), побуждая браузеры использовать обычный HTTPS для увеличения объема трафика, к которому может быть применен Splice.xtls-rprx-vision-udp443:Аналогиченxtls-rprx-vision, но не перехватывает UDP 443. Используется в случаях, когда программы принудительно используют QUIC, и перехват приводит к их неработоспособности.
XTLS доступен только в следующих комбинациях
- TCP+TLS/REALITY: если в данный момент передаётся TLS 1.3, ядро попытается выполнить Splice на зашифрованных данных нижнего уровня; в случае успеха это позволит сэкономить все IO-затраты ядра.
- VLESS Encryption: не имеет ограничений по нижнему уровню транспорта. Если нижний уровень не TCP, будет предпринята только попытка «прозрачного» прохождения Encryption, что сэкономит накладные расходы Encryption; если же используется TCP, всё равно будет предпринята попытка выполнения Splice.
О Splice
Splice - это функция, предоставляемая ядром Linux, где ядро системы напрямую пересылает TCP, минуя память Xray, что значительно сокращает количество операций копирования данных и переключения контекста процессора.
Ограничения использования режима Splice:
- Среда Linux.
- Входящий протокол:
Dokodemo door,Socks,HTTPи другие чистые TCP-соединения или другие входящие протоколы, использующие XTLS. - Исходящий протокол: VLESS + XTLS.
При использовании Splice отображение скорости сети происходит с задержкой: статистика учитывается только после разрыва соединения, так как в период, когда ядро управляет соединением, Xray не имеет информации о проходящем трафике.
level: number
Уровень пользователя, для соединения будет использоваться локальная политика, соответствующая этому уровню пользователя.
Значение level соответствует значению level в разделе policy. Если не указано, используется значение по умолчанию - 0.
reverse: struct
Упрощённая конфигурация обратного прокси VLESS. При этом сохраняет информацию о реальном исходном IP-адресе со стороны публичной сети.
Наличие этого параметра означает, что данное исходящее соединение может быть использовано как исходящее соединение обратного прокси VLESS. Оно автоматически установит соединение с сервером для регистрации туннеля обратного прокси.
"reverse": {
"tag": "r-inbound",
"sniffing" : {}
}2
3
4
tag — это тег входящего прокси для данного обратного прокси. Когда сервер отправляет запрос обратного прокси, он войдет в систему маршрутизации через входящее соединение с этим тегом. Используйте систему маршрутизации, чтобы направить его на нужное вам исходящее соединение.
Используемый UUID должен совпадать с UUID, для которого на сервере также настроен reverse (подробнее см. в разделе о входящих соединениях VLESS).
sniffing см. sniffingObject — выполняет распознавание (sniffing) запросов, поступающих через этот обратный прокси.
TIP
Полное руководство: Примеры обратного проксирования VLESS