REALITY shortId: формат, длина и причины ошибки
Разбираемся, что такое shortId в REALITY, как правильно указать его в конфигурации, почему возникают ошибки и как выполнить диагностику.
Содержание
REALITY — это современная технология маскировки трафика для протокола VLESS, разработанная в Xray-core. Она позволяет серверу выглядеть как обычный веб-сайт, а клиенту подключаться, не привлекая внимания DPI. Одним из ключевых параметров конфигурации является shortId — короткий идентификатор, который часто вызывает путаницу и ошибки. В этой статье разберём, что такое shortId, какой формат и длина допустимы, и почему возникают типичные ошибки.
Что такое shortId в REALITY?
REALITY работает, устанавливая TLS-соединение с реальным сервером (например, сайтом example.com) и одновременно передавая «служебную» информацию через расширения TLS. Чтобы сервер, на котором развёрнута REALITY-конфигурация, мог отличить легитимного клиента от случайного посетителя, используется пара ключей и так называемый shortId.
shortId — это произвольная шестнадцатеричная строка, которая добавляется к TLS-расширению (например, к session ticket или другому полю) и позволяет серверу проверить, что клиент знает правильное значение. По сути, это дополнительный пароль между клиентом и сервером. Он не является обязательным, но настоятельно рекомендуется для повышения безопасности и защиты от несанкционированного доступа.
Формат shortId: длина и допустимые символы
Согласно официальной документации Xray, shortId должен быть строкой в шестнадцатеричном формате: используются символы 0-9 и a-f (прописные и строчные буквы допустимы). Длина строки может быть от 0 до 16 символов включительно. Обратите внимание: в реальности каждый байт кодируется двумя шестнадцатеричными символами, поэтому длина в байтах составляет от 0 до 8. Оптимальная и наиболее распространённая длина — 16 символов, то есть 8 байт.
Пустая строка "" означает, что shortId не используется. Это допустимо, но не рекомендуется, так как вы теряете дополнительный фактор авторизации. Также не рекомендуется использовать строки нечётной длины (например, 7 символов), поскольку они не являются полным байтовым представлением и могут привести к ошибкам парсинга.
Если вы используете sing-box, то поле называется short_id (с подчёркиванием), а в Xray — shortIds. Это важно, так как ошибка в имени поля приводит к тому, что конфигурация игнорируется или выдаётся ошибка.
Как правильно задать shortId на сервере и клиенте
Рассмотрим пример настройки для Xray. На сервере в конфигурации VLESS внутри streamSettings для REALITY укажите:
"realitySettings": {
"dest": "example.com:443",
"serverNames": ["example.com"],
"privateKey": "ваш_приватный_ключ",
"shortIds": ["0123456789abcdef"]
}
Здесь "shortIds" — это массив строк. Можно указать несколько разрешённых shortId, например, для разных групп клиентов. На стороне клиента (например, в v2rayNG или конфигурационном файле) укажите точно такое же значение в поле shortId (в realitySettings клиента).
Если вы используете генератор конфигураций, убедитесь, что он не добавляет лишние символы или не меняет регистр. Строго говоря, регистр не важен (AbC и abc равнозначны), но лучше придерживаться нижнего регистра для единообразия.
Типичные ошибки при использовании shortId
Рассмотрим распространённые ошибки, которые приводят к проблемам с подключением:
- Неверная длина. Если строка длиннее 16 символов, сервер выдаст ошибку при чтении конфигурации. Если длина нечётная, возможны проблемы с обратным преобразованием в байты.
- Недопустимые символы. Например,
g,z,!не являются hex-символами. Валидатор может пропустить это, но в протоколе будут ошибки. - Несовпадение shortId на клиенте и сервере. Это самая частая причина ошибки
handshake failedилиunable to authenticate. Проверьте, что значения идентичны. - Пустой shortId на одной стороне. Если на сервере указан пустой список или отсутствует поле
shortIds, а клиент передаёт непустой shortId, соединение будет отклонено. И наоборот. - Опечатка в имени поля. Как уже упоминалось, в
XrayиспользуетсяshortIds, а вsing-box—short_id. Перепутав их, вы получите ошибку конфигурации.
Пошаговая диагностика при ошибке shortId
Если у вас возникает ошибка, выполните следующие шаги:
- Откройте журнал сервера. В Xray при включённом уровне логирования
infoилиdebugпоявятся сообщения видаreality: failed to find shortIdилиinvalid shortId. Это сразу укажет на проблему. - Проверьте конфигурацию сервера на валидность: выполните
xray run -testилиsing-box check. Если есть ошибка, она отобразится. - Проверьте конфигурацию клиента. В большинстве клиентов (например, v2rayNG, NekoBox) есть отдельное поле для shortId в настройках VLESS-реалити. Убедитесь, что оно заполнено правильно.
- Убедитесь, что используемая версия ядра поддерживает REALITY. Хотя REALITY уже включён в официальные релизы, старые сборки могут не распознавать параметры.
- Проверьте, не блокирует ли файрвол или антивирус исходящее соединение. Иногда ошибка показывает на TLS-хендшейк, но на самом деле проблема в сети.
Где ещё прячутся причины ошибок: клиент, core, сеть, DNS, сервер
Ошибка может возникать не только из-за shortId, но и из-за других компонентов. Важно различать уровни:
- Клиент: не все клиенты корректно поддерживают REALITY. Если вы используете старую версию, обновите её. Также проверьте, что в клиенте нет конфликтующих параметров (например,
flow). - Core (ядро): Xray и sing-box имеют разные синтаксисы. Используйте документацию для вашего ядра. Если вы переносите конфигурацию из одного ядра в другое, не забывайте про разницу в названиях полей.
- Сеть: DPI-фильтры могут блокировать TLS-расширения, содержащие незнакомые данные. Это не связано с shortId как таковым, но проявляется в виде ошибки. Попробуйте использовать другой
dest(реальный сайт) или другой порт. - DNS: иногда DNS-резолвер подменяет SNI, из-за чего клиент обращается не к тому IP. Убедитесь, что DNS-запросы не перехватываются, либо используйте DoH/DoT.
- Сервер: проверьте, что на сервере запущен Xray и указан правильный
dest(реальный сайт должен работать по HTTPS и поддерживать TLS 1.3). Также сгенерируйте новую пару ключей и обновите конфигурацию.
Заключение
shortId — это простой, но важный параметр REALITY. Соблюдая формат (0–16 hex-символов, предпочтительно 8 байт), вы избежите большинства ошибок. Если все же проблема возникла, следуйте алгоритму диагностики, приведённому выше. Не забывайте, что в разных ядрах поля называются по-разному, а актуальная информация всегда есть в официальной документации Xray и sing-box.
Проверено на практике
- Дата проверки: 2025-01-20
- Среда: Xray-core 1.8.x
- Версии: 1.8.0,1.8.1
Мини-чеклист
- Проверьте, что shortId на сервере и клиенте совпадают.
- Убедитесь, что длина shortId не превышает 16 символов и использует только hex-символы (0-9, a-f).
- Выполните проверку конфигурации: xray run -test или sing-box check.
- Проверьте журналы сервера на предмет сообщений о shortId.
- Убедитесь, что используемая версия ядра поддерживает REALITY.
Частые ошибки
- Использование shortId с не-шестнадцатеричными символами (например, 'z' или '!').
- Разная длина shortId на клиенте и сервере (например, 8 и 16 символов).
- Указание пустого shortId на клиенте, когда сервер ожидает непустое значение.
- Опечатка в имени поля: shortIds вместо short_id в sing-box.
- Слишком длинный shortId (больше 16 символов), что вызывает ошибку конфигурации.
Источники и документация
FAQ
Какой максимальный размер shortId?
Максимальная длина shortId составляет 16 шестнадцатеричных символов, что соответствует 8 байтам. Более длинные строки вызовут ошибку.
Можно ли использовать короткий shortId, например, 2 или 4 символа?
Да, технически можно использовать строку любой длины от 0 до 16 hex-символов. Однако рекомендуется использовать 8 байт (16 символов) для лучшей безопасности и совместимости.
Почему возникает ошибка 'invalid shortId'?
Эта ошибка обычно означает, что shortId, переданный клиентом, не совпадает с ожидаемым на сервере, или содержит недопустимые символы. Проверьте конфигурации обеих сторон.
Где взять shortId для генерации конфигурации?
Вы можете сгенерировать его самостоятельно, например, с помощью команды 'openssl rand -hex 8' на macOS/Linux, либо использовать любой генератор случайных шестнадцатеричных строк.
Нужен быстрый рабочий доступ?
Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.
Получить доступ