Параметры VLESS-ссылки могут выглядеть пугающе: длинная строка начинается с vless://, затем содержит UUID, домен, порт и десяток сокращений вроде type, security, sni, fp, pbk, sid и flow.
Для обычного пользователя это готовый ключ. Его достаточно полностью скопировать, импортировать в HAPP и включить подключение. Разбирать ссылку вручную для повседневного использования не требуется.
Однако понимание структуры помогает определить, почему профиль не импортируется, чем отличаются два сервера и какие данные нельзя публиковать. Также становится понятнее, почему случайная замена одного параметра почти всегда ломает подключение, а не улучшает его.
Разберём VLESS-ссылку по частям — от префикса vless:// до названия профиля в самом конце.
Как выглядит VLESS-ссылка
Упрощённый пример:
vless://UUID@server.example:443?encryption=none&security=reality&type=tcp&flow=xtls-rprx-vision&sni=example.com&fp=chrome&pbk=PUBLIC_KEY&sid=0123456789abcdef#Netherlands
Это демонстрационный ключ. Он не предназначен для подключения.
Ссылку можно условно разделить на пять частей:
vless://— тип конфигурации;UUID— идентификатор пользователя;server.example:443— адрес и порт сервера;- всё после
?— дополнительные параметры; - всё после
#— отображаемое название профиля.
Общая схема выглядит так:
vless://ID@ADDRESS:PORT?PARAMETERS#NAME
Что означает vless://
Начало:
vless://
называется схемой ссылки. Оно сообщает приложению, что перед ним конфигурация VLESS.
По аналогичному принципу используются другие схемы:
https://— веб-страница;socks://— SOCKS-прокси;trojan://— конфигурация Trojan;hysteria2://илиhy2://— Hysteria2;vless://— VLESS.
Когда пользователь вставляет такую строку в HAPP, приложение распознаёт схему и пытается разобрать остальные части как VLESS-профиль. HAPP официально поддерживает импорт конфигураций, начинающихся с vless://.
Если начало ссылки потеряно или повреждено, клиент может принять её за обычный текст.
UUID или ID пользователя
Сразу после vless:// находится идентификатор:
vless://UUID@...
Например:
vless://5783a3e7-e373-51cd-8642-c83782b807c5@...
Он сообщает серверу, какой пользователь пытается подключиться.
В большинстве готовых ключей используется UUID — длинная строка из букв, цифр и дефисов. В актуальной конфигурации Xray полем id также может быть произвольная строка размером менее 30 байт либо эквивалентный ей UUID.
Для пользователя главное следующее:
- ID выдаётся сервером;
- его нельзя придумывать самостоятельно;
- изменение одного символа делает идентификатор другим;
- ID может использоваться для учёта доступа и трафика;
- публикация полного ключа позволяет посторонним использовать этот доступ.
UUID в ссылке выполняет роль учётного идентификатора, но не является паролем от сайта, панели управления или аккаунта пользователя.
Символ @
Символ:
@
отделяет идентификатор пользователя от адреса сервера:
UUID@server.example
До @ находится ID, после него — узел подключения.
Если ссылка была повреждена и символ потерялся, приложение не сможет правильно отделить пользователя от адреса.
Адрес сервера
После @ указывается адрес:
server.example
Это может быть:
- доменное имя;
- IPv4-адрес;
- IPv6-адрес.
Xray поддерживает в поле address домены, IPv4 и IPv6.
Примеры:
node.example.com
192.0.2.10
[2001:db8::10]
Адрес определяет, куда клиент устанавливает физическое соединение.
Его нельзя путать с SNI. Адрес отвечает на вопрос «куда подключаться», а SNI используется позднее во время защищённого рукопожатия.
Если домен сервера изменился или перестал указывать на правильный IP, профиль может перестать подключаться даже при исправных остальных параметрах.
Порт сервера
После двоеточия указывается порт:
:443
Полный участок выглядит так:
server.example:443
Порт определяет сетевую точку входа на сервере. Он должен совпадать с портом, который слушает серверная конфигурация. В документации Xray поле port описано именно как порт сервера, обычно совпадающий с портом его прослушивания.
Часто встречаются:
443;80;8443;2053;2083;- другие значения, выбранные администратором.
Порт нельзя менять на 443 только потому, что он кажется более стандартным. Если сервер слушает 8443, после такой замены подключение прекратится.
Знак вопроса и параметры
После адреса и порта начинается участок:
?...
Знак вопроса отделяет основной адрес от дополнительных параметров:
server.example:443?encryption=none&type=tcp
Параметры записываются в формате:
название=значение
Между ними ставится амперсанд:
&
Например:
encryption=none&security=reality&type=tcp
Порядок параметров обычно не важен для клиента. Важно их наличие, корректное написание и совместимость с сервером.
Не каждый VLESS-ключ содержит одинаковый набор. RAW, XHTTP, gRPC, WebSocket и другие транспорты используют разные дополнительные поля.
Параметр encryption
Типичный ключ содержит:
encryption=none
Это поле относится непосредственно к протоколу VLESS.
Значение none долгое время являлось стандартным и до сих пор встречается в большинстве привычных конфигураций. Оно не может быть просто пустым: при отключении VLESS Encryption явно указывается none.
Значит ли encryption=none, что соединение не защищено
Не обязательно.
Это один из самых частых источников путаницы.
encryption=none означает, что не используется отдельный механизм VLESS Encryption на уровне этого поля. Защиту внешнего соединения может обеспечивать другой слой, указанный через security.
Например:
encryption=none&security=tls
или:
encryption=none&security=reality
Xray прямо предупреждает, что VLESS должен использоваться с внешним уровнем транспортной защиты, если соединение не проходит в доверенной частной сети и не включён VLESS Encryption.
Поэтому нельзя оценивать безопасность ключа только по слову none.
Современный VLESS Encryption
В новых версиях Xray поле encryption может содержать значительно более длинную конфигурацию VLESS Encryption, а не только none. Документация рекомендует генерировать её штатной командой Xray, поскольку ручная сборка сложна и легко приводит к ошибкам.
Обычному пользователю не нужно самостоятельно менять это поле. Следует импортировать значение, которое выдал сервис.
Параметр security
Пример:
security=reality
или:
security=tls
Он определяет внешний механизм транспортной защиты.
Чаще встречаются:
security=tls;security=reality;security=none.
Не следует путать:
encryption— поле самого VLESS;security— защита внешнего транспортного соединения.
Это разные уровни конфигурации.
security=none допустимо не во всех сценариях. Самостоятельно удалять TLS или другой защитный слой из готового публичного профиля нельзя.
Параметр type
Пример:
type=tcp
или:
type=xhttp
или:
type=grpc
Он указывает способ транспортировки данных между клиентом и сервером.
В старых и пользовательских ссылках часто встречается:
type=tcp
В актуальной документации Xray соответствующий транспорт называется RAW, но старое обозначение продолжает использоваться в ссылках и клиентах.
Другие распространённые значения:
xhttp;grpc;ws;httpupgrade;tcp.
Если на сервере настроен XHTTP, простая замена type=xhttp на type=tcp не создаст второй вариант подключения. Клиент начнёт отправлять другой тип трафика на сервер, который его не ожидает.
Транспорт должен совпадать с серверной конфигурацией.
Параметр flow
Пример:
flow=xtls-rprx-vision
flow выбирает режим управления потоком XTLS.
В актуальном Xray встречаются:
- пустое значение или отсутствие
flow; xtls-rprx-vision;xtls-rprx-vision-udp443.
- пустое значение или отсутствие
Обычный xtls-rprx-vision перехватывает UDP-трафик к порту 443, заставляя приложения использовать стандартный HTTPS вместо QUIC, когда это необходимо для работы механизма XTLS. Вариант с окончанием udp443 этого не делает.
Пользователю не нужно выбирать flow по принципу «какое название новее». Его совместимость зависит от транспорта, security и серверной стороны.
Параметр sni
Пример:
sni=example.com
SNI — имя, передаваемое во время начального защищённого соединения.
Оно может отличаться от адреса сервера:
node.example.net:443?...&sni=example.com
Адрес определяет, куда устанавливается соединение. SNI участвует в TLS-проверке и выборе серверной конфигурации.
Произвольная замена SNI обычно вызывает ошибку рукопожатия. Это поле не выбирает страну сервера и не увеличивает скорость.
Параметр fp
Пример:
fp=chrome
fp означает TLS fingerprint — отпечаток начального сообщения Client Hello.
Значение chrome заставляет клиент сформировать рукопожатие с характеристиками, похожими на соответствующий браузер. Это не запускает Chrome и не передаёт cookies, историю или данные браузерного аккаунта.
Встречаются значения:
chrome;firefox;safari;ios;android;edge;random;- другие поддерживаемые варианты.
Fingerprint практически не является настройкой скорости. Менять его без причины не следует.
Параметр pbk
Пример:
pbk=AbCdEf...
pbk обычно содержит public key — клиентское значение, соответствующее серверной криптографической паре.
Оно должно точно совпадать с конфигурацией конкретного сервера. Public key нельзя копировать из другого профиля, даже если совпадают:
- страна;
- порт;
- SNI;
- fingerprint;
- приложение.
Одного неверного символа достаточно, чтобы проверка соединения не прошла.
В современных внутренних конфигурациях Xray это поле может называться иначе, но в VLESS-ссылках и HAPP продолжает встречаться параметр pbk. Официальные примеры HAPP используют именно такую форму.
Параметр sid
Пример:
sid=0123456789abcdef
Это short ID — дополнительное значение, которое должно быть разрешено на сервере.
Оно записывается шестнадцатеричными символами и относится к конкретной серверной конфигурации.
Short ID нельзя:
- сокращать;
- дополнять случайными символами;
- копировать из другого ключа;
- путать с UUID.
pbk и sid обычно встречаются рядом, но выполняют разные задачи.
Параметр path
Пример:
path=%2Fexample
После декодирования:
/example
path используется HTTP-подобными транспортами, например WebSocket или XHTTP. Он помогает серверу и reverse proxy определить нужную точку обработки запроса.
Знак %2F — закодированная форма обычного /.
Другие символы тоже могут быть закодированы, поскольку внутри ссылки нельзя безопасно использовать любые символы в исходном виде.
Path должен совпадать на клиенте, сервере и при необходимости reverse proxy. Изменение /example на / только на стороне клиента сломает соединение.
Параметр host
Пример:
host=cdn.example.com
Он может использоваться HTTP-транспортами для указания HTTP Host.
host и sni способны совпадать, но это не одно и то же:
sniотносится к защищённому TLS-рукопожатию;hostотносится к HTTP-запросу.
В конкретной конфигурации они могут иметь одинаковое значение либо различаться.
Не каждый транспорт использует host.
Параметр serviceName
Для gRPC может встречаться:
serviceName=example
Он определяет название gRPC-сервиса, которое ожидает сервер или reverse proxy.
В разных клиентах параметр может отображаться как:
- serviceName;
- service name;
- gRPC service;
- service.
Он должен совпадать с сервером. Случайное изменение приведёт к тому, что запрос попадёт не в тот gRPC-обработчик.
Параметры XHTTP
В XHTTP-ссылках могут появляться дополнительные поля:
path;host;mode;- параметры XMUX;
- параметры разделения направлений;
- дополнительные настройки HTTP.
Набор зависит от версии Xray и способа формирования ссылки.
Обычному пользователю не нужно выбирать packet-up, stream-up или другие режимы вручную. Если профиль выдан сервисом, параметры уже должны соответствовать серверу и промежуточной HTTP-инфраструктуре.
Старый клиент может не распознать новое поле. Если XHTTP-ключ не импортируется, сначала обновите HAPP.
Параметр headerType
Пример:
headerType=none
Это дополнительное поле транспорта, которое часто сохраняется в ссылках для совместимости с клиентами и панелями.
Значение none означает отсутствие дополнительного заголовочного режима данного типа.
Пользователь может увидеть этот параметр даже тогда, когда он почти не влияет на конкретную готовую конфигурацию. Удалять его вручную без необходимости всё равно не стоит.
Параметр alpn
Пример:
alpn=h2
или закодированный список значений.
ALPN используется во время TLS-соединения для согласования прикладного протокола, например:
- HTTP/1.1;
- HTTP/2;
- HTTP/3 в подходящей конфигурации.
ALPN особенно важен при использовании reverse proxy, CDN и HTTP-транспортов.
Случайное изменение может нарушить совместимость с сервером или промежуточной инфраструктурой.
Параметр insecure
Иногда встречается:
insecure=1
или аналогичное поле.
Обычно оно отключает строгую проверку сертификата. Такая настройка может позволить подключение с недоверенным или несовпадающим сертификатом, но одновременно ослабляет проверку подлинности сервера.
Включать insecure только ради устранения ошибки сертификата не следует. Правильнее исправить сертификат, домен или получить корректный профиль от сервиса.
Если параметр присутствует в готовом ключе, его назначение лучше уточнить у администратора.
Что находится после
В конце ссылки может быть:
#Netherlands
или:
#Amsterdam%20Server
Это отображаемое название профиля.
Символ # отделяет техническую конфигурацию от комментария. Всё после него обычно не участвует в подключении.
Например:
#Netherlands
можно заменить на:
#Мой сервер
Само соединение при этом не изменится.
Пробелы и национальные символы часто кодируются:
%20— пробел;- русские буквы — последовательности
%D0...; - эмодзи — более длинные кодированные значения.
После импорта HAPP показывает нормальное читаемое название.
Название — самая безопасная часть для редактирования
Пользователь обычно может менять:
- название профиля;
- эмодзи;
- локальную группу;
- комментарий.
При этом лучше переименовывать профиль внутри HAPP, а не редактировать длинную ссылку вручную.
Почему одинаковые ссылки выглядят по-разному
Два ключа могут описывать похожую конфигурацию, но отличаться внешне.
Причины:
- другой порядок параметров;
- разные сокращения;
- URL-кодирование;
- пустые необязательные поля;
- параметры совместимости конкретного клиента;
- разные версии формата;
- дополнительные поля панели или приложения.
Например, эти фрагменты могут передавать одинаковую идею:
type=tcp&security=reality
security=reality&type=tcp
Сам по себе порядок здесь не меняет сервер.
Но нельзя удалять незнакомые параметры только потому, что другой ключ обходится без них. У профилей могут быть разные транспорты и серверные схемы.
Почему ключ не стоит редактировать вручную
В длинной ссылке легко:
- потерять символ;
- удалить
&; - повредить UUID;
- обрезать public key;
- вставить пробел;
- изменить регистр;
- неправильно декодировать path;
- перенести параметры между разными профилями.
После этого приложение может:
- отказаться импортировать ссылку;
- создать неполный профиль;
- показать ошибку TLS Handshake;
- долго подключаться и завершаться тайм-аутом;
- включить VPN без доступа к интернету.
Если нужно исправить ключ, безопаснее получить новую ссылку или обновить подписку.
QR-код и VLESS-ссылка
QR-код обычно содержит ту же конфигурацию vless://, только в графическом виде.
Сканирование QR не создаёт другой тип подключения. Клиент просто считывает строку и импортирует её автоматически.
QR удобен тем, что снижает риск:
- обрезать ссылку;
- потерять символ;
- добавить пробел;
- скопировать не весь public key;
- повредить параметры.
Но QR-код тоже является данными доступа. Его нельзя публиковать открыто.
Ссылка подписки и VLESS-ключ — не одно и то же
Отдельный VLESS-ключ обычно описывает один профиль.
Подписка может содержать:
- несколько VLESS-серверов;
- разные страны;
- Hysteria2;
- резервные профили;
- обновляемые названия;
- срок действия;
- дополнительные правила сервиса.
Пользователь добавляет в HAPP ссылку подписки, а приложение получает из неё набор готовых конфигураций.
Саму ссылку подписки также нельзя публиковать. По ней посторонний может получить все содержащиеся внутри ключи.
Какие параметры можно менять пользователю
Относительно безопасно менять:
- название профиля;
- эмодзи;
- локальную группу;
- правила маршрутизации;
- выбор активного сервера;
- глобальный или выборочный режим HAPP.
Без указания сервиса не следует менять:
- UUID;
- адрес;
- порт;
encryption;security;type;flow;sni;fp;pbk;sid;path;host;serviceName;alpn;- транспортные режимы.
Серверные параметры должны изменяться одновременно на обеих сторонах.
Что скрывать на скриншоте
Перед публикацией скриншота закройте:
- полный ключ;
- UUID;
- адрес сервера;
- QR-код;
- ссылку подписки;
pbk;sid;- токены и идентификаторы сервиса.
Одного размытия средней части ссылки может быть недостаточно. Начало, конец и QR-код тоже способны содержать полезные данные для восстановления доступа.
Для публичного вопроса обычно достаточно показать:
- название клиента;
- текст ошибки;
- тип транспорта;
- операционную систему;
- статус подключения.
Полный ключ следует передавать только официальной поддержке через доверенный канал.
Короткая схема VLESS-ссылки
| Часть | Пример | Значение |
|---|---|---|
| Схема | vless:// | Тип профиля |
| ID | UUID | Идентификатор пользователя |
| Адрес | server.example | Узел подключения |
| Порт | 443 | Серверная точка входа |
| encryption | none | Настройки уровня VLESS |
| security | tls | Защита транспорта |
| type | xhttp | Транспорт |
| flow | xtls-rprx-vision | Режим XTLS |
| sni | example.com | Имя TLS-соединения |
| fp | chrome | TLS fingerprint |
| pbk | длинная строка | Клиентское ключевое значение |
| sid | hex-строка | Short ID |
| path | /example | HTTP-путь |
| host | cdn.example.com | HTTP Host |
| #name | #Netherlands | Название профиля |
Итог
VLESS-ссылка — это готовое описание подключения, собранное в одну строку.
До знака ? находятся основные данные: идентификатор пользователя, адрес и порт. После ? передаются дополнительные параметры транспорта и защиты. Символ & разделяет параметры, а после # находится отображаемое название профиля.
UUID отвечает за идентификацию пользователя. type выбирает транспорт, security — внешний защитный механизм, а encryption относится к уровню VLESS. flow, SNI, fingerprint, public key и short ID должны соответствовать серверной конфигурации.
Параметры path, host, serviceName и ALPN появляются в зависимости от используемого транспорта и промежуточной HTTP-инфраструктуры.
Обычному пользователю не нужно редактировать техническую часть ключа. Правильный способ использования — целиком импортировать ссылку или QR-код в HAPP. Безопасно менять можно главным образом название профиля и локальные правила маршрутизации.
Полный ключ и QR-код являются данными доступа. Их нельзя публиковать в комментариях, на форумах и в открытых чатах. Если профиль повреждён или перестал работать после ручной правки, лучше удалить его и заново импортировать оригинальную ссылку либо обновить подписку.
