mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-26 21:17:14 +00:00
a2774bf212
* fix(ui): explain the REALITY client version gate and drop the impossible placeholder An empty Min Client Ver looks unrestricted, but Xray-core silently falls back to a built-in minimum (currently 26.3.27) that rejects third-party cores such as Mihomo and sing-box with a bare REALITY verification failure, and nothing in the panel points at the field. Add tooltips to both version fields explaining the fallback and its TLS-fingerprint-freshness rationale. The Max Client Ver placeholder (25.9.11) sat below the built-in minimum, so filling in both placeholders produced a range that rejects every client. Remove it; empty genuinely means no upper limit for that field. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(reality): warn that an empty min client version rejects old cores Common pitfalls covered bad targets, SNI mismatches, leaked keys and wrong flow, but not the client version gate that currently bites Mihomo and sing-box users. Add it to all four doc languages. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(ui): word the version hints against the effective minimum Address the automated review: the Max Client Ver hint said only 'not lower than Min Client Ver', which re-establishes the empty-means-unset mental model when the effective floor is the core's built-in minimum. Both hints now name the effective minimum and tie the quoted 26.3.27 to the core build the panel runs, since operators can install any Xray-core version. Also from review: full-width quotes and a missing verb in the zh doc bullet, the idiomatic Arabic opening, and a format-only x.y.z placeholder on Max Client Ver so the field still conveys its shape. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
143 lines
4.9 KiB
Plaintext
143 lines
4.9 KiB
Plaintext
---
|
|
title: REALITY
|
|
description: Set up a VLESS + REALITY inbound with XTLS-Vision in 3x-ui — keys, short IDs, SNI, fingerprints, and common pitfalls.
|
|
icon: ShieldCheck
|
|
---
|
|
|
|
**REALITY** is an Xray transport security that disguises your proxy as ordinary
|
|
traffic to a real, popular website. Unlike classic TLS, your server needs **no
|
|
certificate of its own** — it borrows the TLS handshake of the target site
|
|
(`dest`). Combined with the **XTLS-Vision** flow, it is fast and resistant to
|
|
deep-packet inspection.
|
|
|
|
REALITY is used with **VLESS** (and Trojan). The recommended flow is
|
|
`xtls-rprx-vision`.
|
|
|
|
## Key settings
|
|
|
|
When you choose **REALITY** as the security mode on a VLESS inbound, 3x-ui
|
|
exposes these fields:
|
|
|
|
| Field | What it is |
|
|
| ------------------------ | ------------------------------------------------------------------ |
|
|
| **Dest (target)** | A real TLS site to impersonate, e.g. `www.microsoft.com:443`. |
|
|
| **SNI / Server Names** | The hostname(s) clients send; must match the target's certificate. |
|
|
| **Public / Private key** | An **x25519** keypair. The private key stays on the server. |
|
|
| **Short IDs** | Hex strings used to authenticate clients (you can have several). |
|
|
| **Flow** | Set to `xtls-rprx-vision`. |
|
|
| **Fingerprint (uTLS)** | The client TLS fingerprint to mimic, e.g. `chrome`. |
|
|
|
|
The private key is generated with Xray's `x25519` utility (the panel can
|
|
generate the pair for you):
|
|
|
|
```bash title="generate an x25519 keypair"
|
|
xray x25519
|
|
```
|
|
|
|
## Set it up in the panel
|
|
|
|
<Steps>
|
|
|
|
<Step>
|
|
### Create a VLESS inbound
|
|
|
|
Add a new inbound, choose protocol **VLESS**, and set **Security** to
|
|
**reality**.
|
|
</Step>
|
|
|
|
<Step>
|
|
### Choose a target (dest) and SNI
|
|
|
|
Pick a reputable site that supports TLS 1.3 and HTTP/2 and is reachable from your
|
|
server and your clients (for example `www.microsoft.com:443`). Set the server
|
|
names / SNI to match that site's certificate.
|
|
</Step>
|
|
|
|
<Step>
|
|
### Generate keys and short IDs
|
|
|
|
Generate the x25519 keypair and one or more short IDs. Keep the **private key**
|
|
secret; clients only ever receive the **public key**.
|
|
</Step>
|
|
|
|
<Step>
|
|
### Set the flow and fingerprint
|
|
|
|
Use the `xtls-rprx-vision` flow and a common uTLS fingerprint such as `chrome`.
|
|
</Step>
|
|
|
|
<Step>
|
|
### Add a client and share the link
|
|
|
|
Create a client, then use its share link or QR code in a compatible app
|
|
(v2rayNG, Hiddify, Mihomo, and others).
|
|
</Step>
|
|
|
|
</Steps>
|
|
|
|
## What the configuration looks like
|
|
|
|
On the server, a REALITY inbound's `streamSettings` looks roughly like this:
|
|
|
|
```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"
|
|
}
|
|
}
|
|
```
|
|
|
|
The matching client share link carries the **public** parameters:
|
|
|
|
```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 **public** key
|
|
- `sid` — short ID (matches one on the server)
|
|
- `sni` — server name (matches the target's certificate)
|
|
- `fp` — client fingerprint
|
|
- `spx` — spiderX path
|
|
- `flow` — `xtls-rprx-vision`
|
|
|
|
## Common pitfalls
|
|
|
|
<Callout type="warn">
|
|
|
|
- **Bad target.** The `dest` must be a real site that supports **TLS 1.3** and
|
|
**HTTP/2**, is reachable, and isn't blocked in your region. Pick a site you do
|
|
not own and that sees lots of traffic.
|
|
- **SNI mismatch.** The SNI / server names must match the target's real
|
|
certificate, or the handshake gives the disguise away.
|
|
- **Leaked private key.** Only ever distribute the **public** key to clients.
|
|
- **Wrong flow.** REALITY + XTLS-Vision needs `flow = xtls-rprx-vision` on both
|
|
the inbound client entry and the share link.
|
|
- **Old client cores rejected by default.** An empty **Min Client Ver** is not
|
|
"no limit": Xray-core falls back to the built-in minimum of the core build you
|
|
run (26.3.27 in current releases) that keeps client TLS fingerprints fresh, so
|
|
third-party cores such as Mihomo and sing-box fail REALITY verification even
|
|
with a correct config — clients see timeouts while only Xray-core based apps
|
|
connect. Set it to `1.0.0` only if you must support them; that also re-admits
|
|
outdated fingerprints.
|
|
|
|
</Callout>
|
|
|
|
## Generate a config
|
|
|
|
Use the generator below to create a fresh X25519 keypair, UUID, and short ID,
|
|
then copy the server inbound JSON and the client share link. Everything is
|
|
computed **in your browser** — no keys or links are sent anywhere.
|
|
|
|
<RealityConfigGenerator />
|
|
|
|
<Callout type="info">
|
|
The **private key** belongs only on your server. Share the generated
|
|
`vless://` link (which contains the **public** key) with clients.
|
|
</Callout>
|