Що таке VLESS: протокол, який доручає шифрування TLS або REALITY

Антон Белов

8 хв читанняТехнології

VLESS зсередини

Кожне з’єднання VLESS починається з короткого заголовка, де вказано ваш ідентифікатор і адресу призначення. Сам протокол нічого не шифрує й не маскує. Це завдання нижчого рівня — TLS або REALITY. Тому VLESS рідко обговорюють без TLS чи REALITY. У цій статті розібрано заголовок, відмінності від VMess, транспорти й REALITY. Також у ній перелічено, що містить ключ VLESS, і пояснено, як Ben's VPN використовує цей протокол.

Заголовок VLESS містить UUID, команду й адресу

VLESS — протокол для з’єднань між клієнтом і проксі-сервером. Кожне з’єднання починається із заголовка запиту. Ваші дані йдуть одразу після нього. Заголовок запиту складається з таких полів.

  • Версія протоколу.
  • UUID — ваш ідентифікатор на сервері, наприклад 8b71f62c-7736-4334-ab2f-032d2115d2fd. Він також слугує паролем, бо сервер приймає лише UUID зі свого списку.
  • Доповнення — додаткові параметри, наприклад режим flow, про який ідеться нижче.
  • Команда — запит на TCP-потік, UDP-пакети або кілька потоків через одне з’єднання (Mux).
  • Порт і адреса призначення. Адресою може бути IPv4, IPv6 або доменне ім’я.

VLESS нічого не додає до даних після заголовка. Сервер відповідає ще коротшим заголовком, де є лише версія й доповнення. У заголовку запиту немає ні мітки часу, ні поля шифру. VLESS не шифрує й сам заголовок. Це головна відмінність VLESS від VMess.

Перша версія VLESS вийшла в складі V2Ray улітку 2020 року. З кінця того самого року протокол розвивають переважно в Xray-core, форку V2Ray. Його також підтримують інші ядра, наприклад sing-box. Строго кажучи, сам VLESS — проксі-протокол. Він стає VPN для телефона чи комп’ютера, коли застосунок спрямовує через нього весь трафік пристрою. Наша стаття про те, чим VPN відрізняється від проксі, докладно їх порівнює.

VLESS обходиться без шифру й перевірки часу VMess

VMess, старіший протокол із V2Ray, шифрує дані власним шифром ChaCha20-Poly1305 або AES-128-GCM. Щоб автентифікувати з’єднання, він перевіряє і UUID, і поточний час. За документацією Xray, годинники клієнта й сервера не мають відхилятися від точного часу більше ніж на 2 хвилини. Із цих 2 перевірок VLESS залишив лише перевірку UUID. У стандартній конфігурації VLESS нічого не шифрує. Поле decryption на сервері й поле encryption на клієнті мають значення none. На з’єднання VLESS годинник не впливає.

Таблиця показує різницю в 3 ситуаціях. У перших 2 з них обидва протоколи працюють усередині TLS.

СитуаціяVMessVLESS
Годинник на телефоні поспішає на 5 хвилинСервер відхиляє з’єднанняСервер приймає з’єднання
Ви відкриваєте HTTPS-сайт через тунель3 шари шифрування (сайт, VMess і зовнішній TLS)2 шари шифрування (сайт і зовнішній TLS)
У з’єднанні немає зовнішнього TLSVMess усе одно шифрує дані власним шифромБудь-який спостерігач на маршруті бачить UUID і адреси призначення

Усередині TLS шифр VMess лише додає навантаження на процесор і розряджає акумулятор. У VLESS таких витрат немає. У режимі flow зовнішній TLS після рукостискання із сайтом перестає шифрувати дані вдруге. У 2025 році Xray додав до VLESS необов’язковий вбудований шифр VLESS Encryption. Він розрахований на конфігурації без зовнішнього TLS. Підходить він і для конфігурацій, де TLS завершується ще до сервера, наприклад на CDN. Конфігурації з REALITY шифр VLESS Encryption не потрібен.

Вигляд трафіку VLESS визначає транспорт

VLESS передається всередині транспорту, і спостерігач у мережі бачить саме транспорт. У Xray для VLESS є кілька транспортів. Нижче перелічено 4 основні.

  • RAW, який у старіших конфігураціях називався tcp. Це звичайне TCP-з’єднання. Якщо поверх нього працює TLS або REALITY, трафік схожий на звичайний HTTPS.
  • XHTTP, раніше SplitHTTP. Він розподіляє потік між звичайними HTTP-запитами й відповідями поверх HTTP/1.1, HTTP/2 або HTTP/3. XHTTP також працює через CDN. Для спостерігача він схожий на вебзастосунок, який постійно надсилає запити своєму серверу.
  • gRPC. Трафік передається як віддалені виклики процедур поверх HTTP/2. Так само з API обмінюються даними багато застосунків.
  • WebSocket. Довготривале з’єднання, яке використовують вебчати й браузерні ігри. Цей транспорт теж працює через CDN.

REALITY працює з RAW, XHTTP і gRPC, але не з WebSocket.

Сервер REALITY працює без домену й сертифіката

Звичайний TLS вимагає, щоб сервер мав доменне ім’я й відповідний сертифікат. REALITY, що з’явився в Xray-core 1.8.0 навесні 2023 року, не потребує ні того, ні іншого. Під час рукостискання сервер видає себе за справжній сторонній сайт, який називають цільовим. Нижче показано, як сервер обробляє 2 види з’єднань.

  1. Ваш клієнт починає рукостискання TLS так, як це зробив би популярний браузер. Його перше повідомлення, ClientHello, містить ім’я цільового сайту. Також у ClientHello є мітка, яку може перевірити лише власник приватного ключа сервера. Частина мітки — короткий ідентифікатор shortId.
  2. Сервер перевіряє мітку. Якщо мітка правильна, сервер сам завершує рукостискання. Далі йдуть дані VLESS.
  3. Сканер чи будь-який інший відвідувач надсилає звичайне повідомлення ClientHello без мітки. Сервер не відповідає на нього напряму. Натомість він перенаправляє з’єднання на цільовий сайт, і той відповідає своїм справжнім сертифікатом і сторінкою.

Цільовий сайт має підтримувати TLS 1.3 та HTTP/2. REALITY використовує пару ключів X25519. Приватний ключ лишається на сервері, а клієнт отримує публічний.

Ключ VLESS містить усі параметри підключення

Ключ VLESS від сервісу чи адміністратора сервера — це один довгий рядок. У ньому є все, що потрібно клієнту для підключення.

  • Адреса й порт сервера.
  • Ваш UUID, який слугує паролем.
  • Транспорт і рівень захисту (TLS або REALITY).
  • Ім’я сайту, яке клієнт надсилає під час рукостискання (SNI).
  • Для REALITY — публічний ключ сервера й shortId.
  • Відбиток браузера, який клієнт імітує у своєму ClientHello.
  • Режим flow, зазвичай xtls-rprx-vision. Якщо всередині тунелю йде ще одне TLS-з’єднання, цей режим приховує типові розміри пакетів його рукостискання. Після рукостискання режим не шифрує вдруге те, що сайт уже зашифрував.
  • Назва, за якою ключ можна впізнати в списку.

Такий сервер можна запустити й самостійно на орендованому VPS. Тоді за налаштування й оновлення ядра відповідаєте ви. Якщо стару адресу заблокують, перенести сервер на нову адресу теж доведеться вам. Докладніше про вибір між орендою сервера й оплатою VPN — у нашому порівнянні VPS і VPN.

Провайдер бачить адресу сервера

VLESS із REALITY приховує вміст з’єднання, але не те, який сервер на іншому кінці. Ваш провайдер однаково бачить з’єднання із цим сервером. Йому видно адресу сервера, час активності з’єднання й кількість байтів у кожен бік. Якщо цю адресу заблокують, жодне налаштування протоколу не відновить з’єднання. Тоді потрібен сервер з іншою адресою.

Деякі мережі пропускають трафік лише до адрес зі списку схвалених. Сервер поза цим списком лишається недоступним, хоч би як добре був замаскований протокол. У таких мережах трафік має йти іншим маршрутом.

Застосунок Ben's VPN сам вибирає протокол і не потребує ключа

У застосунку Ben's VPN є 4 способи підключення (VLESS + REALITY, XHTTP, Hysteria2 і Shadowsocks). Він вибирає між ними автоматично. Закріпити один спосіб у налаштуваннях не можна. Порівняння всіх 4 способів — у нашому огляді протоколів VPN.

Застосунок не приймає ключі VLESS ні від інших сервісів, ні з власного сервера. Вони йому й не потрібні, тому вводити UUID чи ключ ніколи не доведеться. На телефоні, планшеті чи комп’ютері встановіть застосунок і натисніть кнопку Підключити. Потім оплатіть підписку у вікні Придбати Ben's VPN. Якщо підписка вже є, увійдіть в акаунт у тому самому вікні. Завантаження для всіх платформ — на нашій сторінці застосунків.

За поганого з’єднання застосунок може показати банер Поганий звʼязок із кнопкою Виправити. Кнопка пропонує 2 варіанти: змінити локацію або знайти робочий сервер. Той самий пошук запускає кнопка Знайти робочий сервер у розділі Акаунт → Налаштування. Пошук повторно перевіряє сервер і призначає йому нові IP-адреси. Якщо нічого іншого не допомагає, він умикає мультихоп. Увесь пошук триває до 2 хвилин.

Питання й відповіді

Чи потрібен мені власний домен, щоб запустити VLESS?

Якщо використовувати REALITY, домен не потрібен. Сервер видає себе за сторонній цільовий сайт, тому обходиться без власного сертифіката. Домен і сертифікат потрібні, якщо VLESS працює всередині звичайного TLS або за CDN.

Навіщо запускати сервер VLESS на порту 443?

Порт 443 — стандартний для HTTPS. З’єднання TLS чи REALITY на цьому порту схоже на звичайний перегляд сайтів. На нетиповому порту те саме з’єднання відрізнялося б від більшості іншого трафіку. Сам протокол VLESS працює на будь-якому порту.

Чим VLESS відрізняється від Hysteria2?

VLESS зазвичай працює поверх TCP усередині TLS або REALITY. Hysteria2 побудований на QUIC, тому працює поверх UDP. Ззовні трафік Hysteria2 схожий на HTTP/3. Через це на ці 2 протоколи впливають різні мережеві обмеження. Мережа, що блокує або уповільнює UDP, заважає Hysteria2, але не VLESS поверх TCP. У Ben's VPN є обидва протоколи, і застосунок сам вибирає між ними.

Чи приховує REALITY IP-адресу сервера?

Ні, REALITY маскує рукостискання, але не адресу сервера. Спостерігач у мережі бачить, до якого сервера підключається пристрій. Якщо цю адресу заблокують, знадобиться сервер із новою адресою.

Чи можна додати власний ключ VLESS у застосунок Ben's VPN?

Ні, ключі VLESS з інших сервісів чи з власного сервера в застосунку не працюють. Він підключається до серверів Ben's VPN і сам вибирає протокол.

Автор статті

Антон Белов

Пише про комп’ютерні мережі й протоколи VPN.

Спробуйте 3 дні, вирішите потім

Пробний період коштує $0.50 і відкриває всі 187 країн та всі застосунки. Після нього тариф продовжується за $5 на місяць. Автопродовження можна вимкнути в особистому кабінеті будь-коли.

Mac App Store App Store Google Play