VLESS Гайд

Опубликовано: 2026-05-14 · Автор: Алексей Т.

UUID и ключи в VLESS Reality: объясняю для тех кто не разбирается в криптографии

Сел настраивать VLESS Reality на VPS — получил ошибку "VLESS handshake failed". Лог показывает "incorrect uuid". Начинаешь гуглить — видишь uuid, public key, shortId, spiderX. Без понимания криптографии собрать рабочий конфиг можно 3 часа. Я собрал за 15 минут — покажу как.

Почему UUID — это не просто пароль а идентификатор сессии

UUID (Universally Unique Identifier) в VLESS — 128-битное число формата xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. В Reality он выполняет две функции: идентифицирует клиента и участвует в генерации session key. Если UUID не совпадает между клиентом и сервером — соединение рвётся на этапе handshake.

Типичная ошибка новичка: берут UUID из примера конфига X-UI или 3x-UI. Проблема — эти панели генерируют UUID при создании инстанса, но при копировании конфига в клиент люди забывают подставить свой. Результат — incorrect uuid в логах.

Синтаксис валидного UUID: 550e8400-e29b-41d4-a716-446655440000. Все символы hex (0-9, a-f). Дефисы обязательны. Регистр не важен — большие/маленькие буквы равнозначны.

Как проверить UUID на сервере:

Как сгенерировать новый UUID:

cat /proc/sys/kernel/random/uuid

Или через uuidgen если стоит util-linux. Онлайн-генераторы не советую — доверяй только локальной генерации.

Public Key и Private Key в Reality — как они связаны с handshake

Reality работает на основе TLS 1.3 с шифрованием X25519. Ключевая пара: private key (PRKey) — хранится на сервере, public key (PUKey) — передаётся клиенту. Если PUKey не совпадает с PRKey — соединение валится с ошибкой "certificate verify failed" или "handshake failure".

Проблема: люди копируют PUKey из чужого конфига или генерируют на одном сервере, а используют на другом. Ошибка появляется не сразу — Reality сначала делает TLS-рукопожатие с сайтом-прикрытием, а потом проверяет ключи. Если не совпало — соединение разрывается.

Правильная генерация через xray:

xray x25519

Вывод:

Private key: WZR9VpM-zV8TvK0G4q6L3xQ2yF5bN7cD8eR1tH2jK3lM
Public key: 4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2g3h4i5j6k7l

Распространённая ошибка: в X-UI и 3x-UI при создании инстанса Reality поле "Public key" пустое по умолчанию. Некоторые заполняют его рандомными символами. Правильно — сгенерировать ключи через xray x25519 и скопировать оба. Public key идёт клиенту, Private key — в конфиг сервера.

Где смотреть ошибки:

ShortId и SpiderX — зачем настраивать если Reality уже работает

ShortId — строка от 2 до 16 hex символов, которую Reality использует для идентификации потока. Если shortId не задан — xray использует дефолтный. Проблема: на congested серверах (много клиентов) дефолтный shortId увеличивает коллизии — два клиента могут получить одинаковый идентификатор, что вызовет "stream reset".

SpiderX — параметр для обфускации шаблона запроса. По-умолчанию он пустой, что делает паттерн трафика узнаваемым. DPI может его задетектить как VLESS.

Правильная настройка shortId:

  1. Генерируешь рандомный hex: openssl rand -hex 4 (4 байта = 8 символов)
  2. Вставляешь в "shortIds" в конфиге сервера
  3. Копируешь тот же shortId в клиентский конфиг

Пример конфига для X-UI:

"realitySettings": {
  "show": false,
  "xver": 0,
  "dest": "www.microsoft.com:443",
  "serverNames": ["www.microsoft.com"],
  "privateKey": "WZR9VpM-zV8TvK0G4q6L3xQ2yF5bN7cD8eR1tH2jK3lM",
  "shortIds": ["a1b2c3d4"],
  "settings": {
    "publicKey": "4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2g3h4i5j6k7l"
  }
}

Ошибка — использовать один shortId для всех клиентов. На 10+ клиентах лучше назначить каждому свой shortId. Или оставить по-умолчанию если канал не загружен.

Проверка конфига: убиваем 80% ошибок за 5 минут

Беру сервер на МТС с VPS в Нидерландах. Конфиг VLESS Reality через Hiddify на Android. Вот как выглядит рабочий сценарий:

  1. Генерирую UUID: cat /proc/sys/kernel/random/uuid3f1d2e8a-4b5c-6789-0123-456789abcdef
  2. Генерирую ключи: xray x25519 → копирую оба
  3. Настраиваю shortId: openssl rand -hex 4a1b2c3d4
  4. Проверяю конфиг синтаксис: xray -test -config /usr/local/etc/xray/config.json

Результат:

Никакого incorrect uuid, certificate verify failed или stream reset.

Если ошибка появилась после изменения конфига:

Альтернативы: когда Reality не заводится

Trojan с WebSocket — альтернатива если Reality не работает из-за блокировок на уровне DPI. Не использует криптографию на уровне клиент-сервер, только пароль. Минус — трафик видно, но он шифрованный.

VLESS с WebSocket (без Reality) — работает через обычный TLS, без X25519. Настройка проще — не нужно генерировать ключи, shortId, spiderX. Минус — легче детектится DPI.

Shadowsocks с AEAD — классика. Не требует UUID или Public Key. Минус — легко отличить от обычного HTTPS.

Я использую VLESS Reality для стабильного доступа на Tele2 и Мегафон. На Билайне и Ростелекоме — VLESS WebSocket как fallback.

Частые вопросы

Что делать если при подключении VLESS Reality ошибка incorrect uuid? Проверь UUID в конфиге клиента (например в Hiddify раздел "Config" → "UUID") и сравни с тем что на сервере (файл /etc/x-ui/xray/config.json или панель X-UI → Inbounds → твой инстанс → клиенты). 80% случаев — копипаст чужого конфига. Сгенерируй новый через cat /proc/sys/kernel/random/uuid и пропиши в оба.

Как сгенерировать public key для Reality если нет xray на VPS? Установи xray на любой VPS, запусти xray x25519. Или используй скрипт установки например от 3x-UI (одна команда). Онлайн-генераторы не советую — ключи могут быть подсмотрены. После генерации пропиши PrivateKey в конфиг сервера, PublicKey в клиентский конфиг.

Что такое shortId в VLESS Reality и как его настроить? ShortId — идентификатор потока до 16 hex символов. Генерируется локально: openssl rand -hex 4. Вставляется в конфиг сервера в поле "shortIds": ["a1b2c3d4"]. На клиенте тот же shortId в разделе "Reality" → "shortId". Если не указать — xray использует дефолтный, что на congested серверах вызывает stream reset.

Почему VLESS Reality не работает на Tele2 но работает на МТС? Разные провайдеры блокируют по-разному. Tele2 использует Deep Packet Inspection от Cisco — он лучше детектит Reality. Решение: добавить в spiderX значение "/" или поменять dest на www.bing.com:443. Или использовать VLESS WebSocket как fallback.

Можно ли использовать один UUID для нескольких клиентов? Технически да, но не советую. Reality идентифицирует сессию по UUID+shortId. Если два клиента с одинаковым UUID одновременно активны — возможны коллизии и сброс соединения. Сгенерируй каждому клиенту свой UUID и shortId. Займёт 30 секунд.


UUID, Public Key и ShortId — три параметра которые убивают 90% ошибок в VLESS Reality. Сгенерировал локально, проверил на сервере, прописал в клиенте. Всё. Если нужен готовый конфиг без танцев с генерацией — пользуйся сервисами которые это автоматизируют. Попробовать @VPNChill_bot — 3 дня бесплатно →

👉 Попробовать @VPNChill_bot — 3 дня бесплатно →
Алексей Т.Настраиваю VLESS-серверы 3 года. Пишу о протоколах шифрования понятно для всех.
Попробовать @VPNChill_bot — 3 дня бесплатно →