mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-20 21:05:02 +03:00
ce221c33d0
* fix(sub): carry REALITY ML-KEM hint in VLESS links Keep raw share links in parity with Clash subscriptions for Xray 26.9.8+. Preserve the URI hint through Go and frontend imports, expose it in the outbound editor, and update the documentation tooling. * fix(link): accept REALITY ML-KEM boolean aliases * test(frontend): isolate Happ preset notifications * fix(link): keep the ML-KEM hint out of Xray REALITY settings support-x25519mlkem768 is a Mihomo reality-opts option; xray-core's REALITYConfig (infra/conf/transport_security.go) has no such field and its JSON loader drops unknown keys silently. The PR also stored it as realitySettings.supportX25519Mlkem768 in Xray outbounds (form switch, Go and TS link import, docs outbound builders) and as an inbound settings default that is stripped before Xray and read by no link generator. The outbound switch therefore did nothing, and imported links carried a dead key into the JSON subscription. The share-link hint itself stays: Go, frontend and docs still emit support-x25519mlkem768=true on VLESS REALITY links and drop it on a TLS host override. --------- Co-authored-by: libmur-dev <333915961+libmur-dev@users.noreply.github.com> Co-authored-by: MHSanaei <ho3ein.sanaei@gmail.com>
159 lines
9.1 KiB
Plaintext
159 lines
9.1 KiB
Plaintext
---
|
||
title: REALITY
|
||
description: Настройка входящего подключения VLESS + REALITY с XTLS-Vision в 3x-ui — ключи, short ID, SNI, отпечатки и типичные ошибки.
|
||
icon: ShieldCheck
|
||
---
|
||
|
||
**REALITY** — это механизм безопасности транспорта Xray, маскирующий ваш прокси
|
||
под обычный трафик к реальному популярному сайту. В отличие от классического TLS,
|
||
вашему серверу **не нужен собственный сертификат** — он заимствует TLS-рукопожатие
|
||
целевого сайта (`dest`). В сочетании с потоком **XTLS-Vision** это работает быстро
|
||
и устойчиво к глубокому анализу пакетов.
|
||
|
||
REALITY используется с **VLESS** (а также Trojan). Рекомендуемый поток —
|
||
`xtls-rprx-vision`.
|
||
|
||
## Ключевые настройки
|
||
|
||
Когда вы выбираете **REALITY** в качестве режима безопасности для входящего
|
||
подключения VLESS, 3x-ui отображает следующие поля:
|
||
|
||
| Поле | Что это такое |
|
||
| ------------------------ | ------------------------------------------------------------------ |
|
||
| **Dest (цель)** | Реальный TLS-сайт для имитации, например `www.microsoft.com:443`. |
|
||
| **SNI / Server Names** | Имя(имена) хоста, которые отправляют клиенты; должны совпадать с сертификатом цели. |
|
||
| **Public / Private key** | Пара ключей **x25519**. Приватный ключ остаётся на сервере. |
|
||
| **Short IDs** | Шестнадцатеричные строки для аутентификации клиентов (их может быть несколько). |
|
||
| **Flow** | Установите в `xtls-rprx-vision`. |
|
||
| **Fingerprint (uTLS)** | TLS-отпечаток клиента для имитации, например `chrome`. |
|
||
|
||
Приватный ключ генерируется утилитой `x25519` из состава Xray (панель может
|
||
сгенерировать пару за вас):
|
||
|
||
```bash title="generate an x25519 keypair"
|
||
xray x25519
|
||
```
|
||
|
||
## Настройка в панели
|
||
|
||
<Steps>
|
||
|
||
<Step>
|
||
### Создайте входящее подключение VLESS
|
||
|
||
Добавьте новое входящее подключение, выберите протокол **VLESS** и установите
|
||
**Security** в **reality**.
|
||
</Step>
|
||
|
||
<Step>
|
||
### Выберите цель (dest) и SNI
|
||
|
||
Выберите авторитетный сайт, поддерживающий TLS 1.3 и HTTP/2 и доступный как с
|
||
вашего сервера, так и с устройств клиентов (например `www.microsoft.com:443`).
|
||
Задайте server names / SNI так, чтобы они совпадали с сертификатом этого сайта.
|
||
</Step>
|
||
|
||
<Step>
|
||
### Сгенерируйте ключи и short ID
|
||
|
||
Сгенерируйте пару ключей x25519 и один или несколько short ID. Держите
|
||
**приватный ключ** в секрете; клиенты получают только **публичный ключ**.
|
||
</Step>
|
||
|
||
<Step>
|
||
### Задайте поток и отпечаток
|
||
|
||
Используйте поток `xtls-rprx-vision` и распространённый отпечаток uTLS, например
|
||
`chrome`.
|
||
</Step>
|
||
|
||
<Step>
|
||
### Добавьте клиента и поделитесь ссылкой
|
||
|
||
Создайте клиента, затем используйте его ссылку для подключения или QR-код в
|
||
совместимом приложении (v2rayNG, Hiddify, Mihomo и других).
|
||
</Step>
|
||
|
||
</Steps>
|
||
|
||
## Как выглядит конфигурация
|
||
|
||
На сервере секция `streamSettings` входящего подключения REALITY выглядит
|
||
примерно так:
|
||
|
||
```json title="server inbound (excerpt)"
|
||
{
|
||
"network": "tcp",
|
||
"security": "reality",
|
||
"realitySettings": {
|
||
"dest": "www.microsoft.com:443",
|
||
"serverNames": ["www.microsoft.com"],
|
||
"privateKey": "<x25519 private key>",
|
||
"shortIds": ["<hex short id>"],
|
||
"fingerprint": "chrome"
|
||
}
|
||
}
|
||
```
|
||
|
||
Соответствующая клиентская ссылка для подключения содержит **публичные**
|
||
параметры:
|
||
|
||
```text title="vless:// (excerpt)"
|
||
vless://<uuid>@<server>:443?security=reality&pbk=<public-key>&sid=<short-id>&sni=www.microsoft.com&fp=chrome&spx=%2F&flow=xtls-rprx-vision#my-reality
|
||
```
|
||
|
||
- `pbk` — **публичный** ключ REALITY
|
||
- `sid` — short ID (совпадает с одним из заданных на сервере)
|
||
- `sni` — server name (совпадает с сертификатом цели)
|
||
- `fp` — отпечаток клиента
|
||
- `spx` — путь spiderX
|
||
- `flow` — `xtls-rprx-vision`
|
||
|
||
## Типичные ошибки
|
||
|
||
<Callout type="warn">
|
||
|
||
- **Неподходящая цель.** Значение `dest` должно указывать на реальный сайт,
|
||
который поддерживает **TLS 1.3** и **HTTP/2**, доступен и не заблокирован в
|
||
вашем регионе. Выбирайте сайт, который вам не принадлежит и на который идёт
|
||
большой трафик.
|
||
- **Несовпадение SNI.** Значения SNI / server names должны совпадать с реальным
|
||
сертификатом цели, иначе рукопожатие выдаст маскировку.
|
||
- **Утечка приватного ключа.** Клиентам всегда передавайте только **публичный**
|
||
ключ.
|
||
- **Неправильный поток.** Для REALITY + XTLS-Vision нужен `flow = xtls-rprx-vision`
|
||
как в записи клиента входящего подключения, так и в ссылке для подключения.
|
||
- **Ограничения версии клиента.** В Xray-core v26.9.8+ пустое поле
|
||
**Мин. версия клиента** не задаёт нижнюю границу. Явно сохранённое ограничение
|
||
продолжает действовать. Более ранние сборки могут использовать встроенный
|
||
минимум (например, `26.3.27`) и отклонять сторонние клиенты с правильными ключами.
|
||
Проверьте версию работающего ядра: снижение ограничения допускает старые отпечатки.
|
||
- **Mihomo и ML-KEM.** Xray-core v26.9.8+ отдельно требует ключ
|
||
`X25519MLKEM768` перед необязательным `X25519`. YAML-подписка Clash/Mihomo
|
||
включает `reality-opts.support-x25519mlkem768` для REALITY, в том числе внешних
|
||
ссылок, и выбирает `chrome`, если отпечаток не задан. Явный выбор сохраняется:
|
||
нужен отпечаток с ML-KEM (`chrome` при uTLS v1.8.7 в Mihomo). Сам флаг не
|
||
обновляет старые отпечатки. Исходные ссылки `vless://` передают эквивалентную
|
||
подсказку `support-x25519mlkem768=true`; клиенты, поддерживающие это расширение
|
||
URI, включая актуальные сборки Mihomo, применяют её при импорте. Для очень старых
|
||
серверов REALITY, отвергающих ML-KEM, задайте `false` для соответствующего узла
|
||
в клиенте или обновите сервер. Снятие ограничения версии не исправляет это
|
||
рукопожатие.
|
||
|
||
</Callout>
|
||
|
||
## Сгенерируйте конфигурацию
|
||
|
||
Используйте генератор ниже, чтобы создать новую пару ключей X25519, UUID и short
|
||
ID, а затем скопируйте JSON входящего подключения сервера и клиентскую ссылку для
|
||
подключения. Все вычисления выполняются **в вашем браузере** — никакие ключи и
|
||
ссылки никуда не отправляются.
|
||
|
||
<RealityConfigGenerator />
|
||
|
||
<Callout type="info">
|
||
**Приватный ключ** должен оставаться только на вашем сервере. Делитесь с
|
||
клиентами сгенерированной ссылкой `vless://` (которая содержит **публичный**
|
||
ключ).
|
||
</Callout>
|