xray x25519: как извлечь publicKey из privateKey
Узнайте, как получить publicKey из команды xray x25519, если выводит только privateKey, Password и Hash32. Пошаговая инструкция для VLESS+REALITY: используйте флаг -i, примеры конфигураций сервера и клиента, частые ошибки с ключами xray.
Как извлечь publicKey из вывода команды xray x25519?
Я пытаюсь использовать команду xray x25519 для генерации пары ключей (privateKey и publicKey), но команда возвращает три значения: PrivatKey, Password и Hash32. Как правильно использовать эти данные для получения публичного ключа?
Команда xray x25519 генерирует пару ключей для REALITY; publicKey либо уже выводится в результате, либо его нужно вычислить из privateKey. Если вы видите в выводе только PrivateKey (и дополнительные поля Password и Hash32), выполните xray x25519 -i "privateKey" — команда вернёт publicKey. Password и Hash32 обычно не используются для VLESS+REALITY: privateKey храните на сервере, publicKey вставляйте в клиентскую конфигурацию.
Содержание
- Что выводит команда xray x25519 и как читать результат
- Как извлечь xray x25519 public key из privateKey
- Примеры команд и конфигурация VLESS+REALITY
- Частые ошибки и советы по ключам xray
- Источники
- Заключение
Что выводит команда xray x25519 и как читать результат
Вывод xray x25519 может выглядеть по‑разному в зависимости от версии и параметров. Встречаются две распространённые ситуации:
- Вариант A — команда печатает сразу и Private key, и Public key (плюс иногда Password и Hash32). Пример:
$ ./xray x25519 Private key: MBpO2ao_iQZLQ6NWs9DythpoKkkt0pUPVLXJyUPKF1w Public key: m1tN3i54O50Cf4Y2jDRF9bF52NKaSm5FmN5MCH_H-lI Password: ... Hash32: ...
- Вариант B — вывод содержит только Private key и дополнительные поля Password/Hash32, а publicKey не печатается. Тогда publicKey надо получить отдельно.
Флаг -i уместен именно для второй ситуации: он принимает existing privateKey и вычисляет соответствующий publicKey. Описание параметров команды и флага -i — в документации по командам Xray: https://xtls.github.io/en/document/command.html. Практические примеры и обсуждения поведения команды можно найти в обсуждении разработчиков: https://github.com/XTLS/Xray-core/discussions/1702.
Зачем тогда Password и Hash32? Они служат для вспомогательных целей (хранение/шифрование), но для базовой настройки VLESS+REALITY обычно не нужны — игнорируйте их при установке соединения.
Как извлечь xray x25519 public key из privateKey
Шаги — коротко и по делу.
- Скопируйте privateKey точно так, как он выведен (без пробелов, без лишних переносов строк). Часто это base64 в RawURLEncoding.
- Выполните команду с флагом
-i, передав privateKey как аргумент. Пример:
# вставьте privateKey вместо <PRIVATE_KEY>
./xray x25519 -i "MBpO2ao_iQZLQ6NWs9DythpoKkkt0pUPVLXJyUPKF1w"
В ответ вы получите строку publicKey (обычно в формате base64), которую можно копировать в клиент.
- Если нужна другая кодировка, посмотрите опцию
--std-encodingв той же документации; но в большинстве случаев стандартного вывода достаточно (см. Command Parameters).
Короткий чек-лист:
- privateKey — в конфигурацию сервера (realitySettings.privateKey).
- publicKey — в конфигурацию клиента (realitySettings.publicKey).
- Password и Hash32 — не требуются для базовой работы REALITY (игнорируйте при настройке).
Подробности по полям и месту вставки ключей в streamSettings — в разделе конфигурации транспорта: https://xtls.github.io/en/config/transport.html.
Примеры команд и конфигурация VLESS+REALITY
Пример: вы запустили ./xray x25519 и получили только Private key + Password + Hash32. Получаем publicKey и вставляем в конфигурацию клиента.
Получение publicKey:
# пример вычисления publicKey из существующего privateKey
./xray x25519 -i "MBpO2ao_iQZLQ6NWs9DythpoKkkt0pUPVLXJyUPKF1w"
# вывод: Public key: m1tN3i54O50Cf4Y2jDRF9bF52NKaSm5FmN5MCH_H-lI
Минимальные примеры конфигурации (фрагменты). Сервер (вставьте privateKey):
"streamSettings": {
"security": "reality",
"realitySettings": {
"privateKey": "MBpO2ao_iQZLQ6NWs9DythpoKkkt0pUPVLXJyUPKF1w"
}
}
Клиент (вставьте publicKey и укажите serverName/dest согласно серверной настройке):
"streamSettings": {
"security": "reality",
"realitySettings": {
"publicKey": "m1tN3i54O50Cf4Y2jDRF9bF52NKaSm5FmN5MCH_H-lI",
"serverName": "example.com"
}
}
Если нужен более подробный практический разбор — в гайдах и статьях есть готовые примеры конфигураций и объяснения (например, практический разбор соседних сценариев: https://henrywithu.com/the-ultimate-guide-coexisting-web-apps-with-xrays-vision-and-reality-on-a-single-port/ и туториалы: https://github.com/wpdevelopment11/xray-tutorial).
Частые ошибки и советы по ключам xray
- Копирование с лишними символами. Частая ошибка — включить пробелы, кавычки или переносы строки. Решение: вставляйте ключи как одну непрерывную строку.
- Перепутать privateKey и publicKey. PrivateKey никогда не должен попадать в клиентскую конфигурацию или публичные места.
- Неправильная кодировка. Если вы изменяли способ кодирования вывода, используйте
--std-encodingили приведите ключ к нужной кодировке перед вставкой. - Несовпадение serverName/dest. Убедитесь, что значения, указанные в клиенте, соответствуют серверной настройке.
- Забыт перезапуск/перезагрузка сервиса. После изменения конфигурации перезапустите xray, чтобы применились новые ключи.
- Логи. При проблемах включите уровень логирования и смотрите ошибки — они помогут понять, использован ли правильный ключ.
Если ключ скомпрометирован — проще сгенерировать новую пару и заменить privateKey на сервере и publicKey на клиентах. Для примеров реальных выводов и обсуждений смотрите: https://github.com/XTLS/Xray-core/discussions/1702.
Источники
- Command Parameters — XTLS (xray) documentation
- Transport — XTLS (xray) configuration
- How I tested Xray REALITY — GitHub discussion
- The Ultimate Guide: Coexisting Web Apps with Xray’s Vision and Reality on a Single Port
- xray-tutorial — GitHub
Заключение
Если xray x25519 не показывает publicKey, просто используйте xray x25519 -i "privateKey" — это самый быстрый способ получить xray x25519 public key. Password и Hash32 обычно можно проигнорировать при настройке VLESS+REALITY: privateKey остаётся на сервере, publicKey — в клиенте.