VLESS Reality 节点搭建完整教程(VPS 2026):3X-UI + Xray-core 从零部署
VLESS Reality 不需要域名和 TLS 证书,通过借用目标网站的 TLS 指纹来伪装流量。但很多人卡在 dest(伪装目标)、serverNames、privateKey/publicKey 和 shortId 四个参数对不上,导致客户端持续报 reality verification failed。这篇把每个字段的生成方式、含义和查错顺序按命令行和 3X-UI 面板分别写清楚。
2026 年如果要自建一个节点,VLESS Reality 是目前部署负担最轻的选择:不需要买域名、不需要申请 TLS 证书、不需要做 DNS 解析,一台干净的境外 VPS 加一个 443 端口就能跑起来。
但把四个 Reality 参数(dest / serverNames / privateKey-publicKey / shortId)理解清楚是上线不翻车的底线。这篇按 3X-UI 面板和命令行 Xray-core 两条路径把每一步写清楚,重点放在各参数的含义和报错排查上。
为什么 Reality 不需要域名和证书?
传统 VMess + WebSocket + TLS 方案需要先买域名、做 A 记录指向 VPS IP、用 acme.sh 或 certbot 申请证书,整个流程至少多出 15 分钟和一年几十块的域名费用。Reality 的方案是「借用」一个真实存在的 HTTPS 站点的 TLS 指纹:当非授权请求(DPI 探测、端口扫描)打到你的 443 端口时,Xray 直接把这个请求转发到你指定的 dest 站点(比如 learn.microsoft.com),探测方看到的响应和直接访问微软官网一模一样。
只有持有正确 x25519 公钥(pbk)、shortId(sid)和 SNI 的客户端才能完成 Reality 握手,进入真正的 VLESS 隧道。
| 方案 | 需要域名 | 需要 TLS 证书 | 默认端口 | 伪装方式 |
|---|---|---|---|---|
| VMess + WS + TLS | 是 | 是(acme.sh/certbot) | 443 | 自签证书或 CA 证书,Nginx/Caddy 反代 |
| VLESS + XTLS Vision | 可选 | 可选 | 443 | XTLS 流控直接处理 TLS 内流量 |
| VLESS + Reality | 否 | 否 | 443 | 借用目标站点 TLS 1.3 指纹,无证书 |
| Hysteria 2 | 是或自签 | 自签即可 | 443/8443 | QUIC 伪装,无额外反代 |
从上表可以看出 Reality 在部署复杂度上明显低于其他方案,且因为不需要自签证书,没有证书链被扫到后关联多个节点的风险。
dest 和 serverNames 怎么选?不是随便填一个网址就行
dest 是做什么的
dest 是 Reality 的「伪装转发目标」。当有人直接访问 https://你的VPS_IP:443 但没有正确的 Reality 证书时,Xray 会把这次连接转向 dest。如果 dest 是 www.microsoft.com:443,那么探测者看到的就是微软官网的页面和证书。
serverNames 和 dest 的关系
serverNames 是一个数组,定义了服务器接受的 SNI 值。它至少要包含 dest 中的域名。如果你填 serverNames: ["www.microsoft.com", "learn.microsoft.com"],客户端 sni 填这两个中的任何一个都能通过,但 dest 仍然只会转发到其中一个。
四个推荐的 dest 站点
| 站点 | dest 填写值 | TLS 1.3 | 全球 CDN | 备注 |
|---|---|---|---|---|
| Microsoft Learn | learn.microsoft.com:443 | 支持 | Azure CDN | Xray 社区默认推荐,非商业域名 |
| Microsoft 官网 | www.microsoft.com:443 | 支持 | Azure CDN | 几乎零宕机,延迟低 |
| Apple 官网 | www.apple.com:443 | 支持 | Akamai CDN | 全球加速覆盖好 |
| Cloudflare | www.cloudflare.com:443 | 支持 | Cloudflare CDN | 本身就是 CDN 厂商 |
不要选的站点类型:中文网站、有明显地域限制的域名(在 VPS 地区解析异常)、个人博客、大陆 CDN 站点。选定 dest 前,在 VPS 上跑一条 curl 确认可通:
curl -I https://learn.microsoft.com 2>&1 | head -5
返回 HTTP 200 或 301/302 且响应头出现 TLS 1.3 相关信息说明可用。返回 connection refused 或 timeout 就换一个 dest。
x25519 密钥对和 shortId:为什么客户端连不上通常是这两个对不上
Reality 的密钥对使用 x25519(Curve25519),不是 RSA 也不是 ECDSA。生成方式有两种:
方法一:Xray 内置命令(推荐)
xray x25519
输出:
Private key: gKX...(44 个 base64url 字符)
Public key: yJm...(44 个 base64url 字符)
方法二:在 3X-UI 面板中生成
入站编辑页 → 安全选 reality → 点「生成」按钮。系统同时生成 privateKey 和 publicKey。
关键规则:私钥永远只放在服务器的 config.json 里,不给任何人。公钥放在客户端的 pbk 字段中。 很多人都在这步翻车——把 publicKey 填到了服务端,或者把 privateKey 泄露给了客户端。客户端和服务端密钥配不上,结果就是 reality verification failed。
shortId 是做什么的
shortId 是 Reality 握手阶段的一个附加验证值,长度 8 个十六进制字符(如 a1b2c3d4)。它加在 x25519 密钥之上作为二层验证。服务端的 shortIds 是数组格式,可以同时填多个值:
"shortIds": [
"a1b2c3d4",
"e5f6a7b8",
""
]
空字符串 "" 表示兼容模式——接受不带 shortId 的连接。这在过渡迁移时有用:先用两个 shortId + 空字符串跑一段时间,确认所有客户端都切到新 shortId 后再删除旧值。
客户端四项参数对照表
不管你用什么客户端,VLESS Reality 的连接参数必须和服务端完全一致。任何一个字段对不上就是连不上。
| 客户端字段 | 对应服务端配置 | 示例值 | 是否大小写敏感 |
|---|---|---|---|
| 地址 (address) | VPS 公网 IP | 45.xx.xx.xx | 不适用 |
| 端口 (port) | inbounds.port | 443 | 不适用 |
| UUID (id) | clients[].id | 3a8f...-...-...-...-... | 是 |
| Flow | clients[].flow | xtls-rprx-vision | 否 |
| 安全 (security) | streamSettings.security | reality | 否 |
| 公钥 (pbk) | realitySettings.privateKey 推导 | yJm...(44 位 base64url) | 是,每个字符都必须一致 |
| Short ID (sid) | realitySettings.shortIds[] | a1b2c3d4(8 位十六进制) | 是 |
| SNI (sni/serverName) | realitySettings.serverNames[] | learn.microsoft.com | 否 |
| Fingerprint (fp) | 无需服务端对应字段 | chrome | 否 |
Shadowrocket 用户扫码后注意检查 pbk 字段是否正确导入——这个客户端在某些版本中会把 URL 参数里的 %3D(= 号的 URL 编码)还原失败,导致公钥末尾缺少 =。
支持的客户端(2026 年已验证兼容)
| 客户端 | 平台 | 最低版本 | Reality 支持 |
|---|---|---|---|
| v2rayN | Windows | 6.0+ | 完整支持,支持二维码扫码 |
| v2rayNG | Android | 1.8.0+ | 完整支持,支持二维码和剪贴板 |
| Shadowrocket | iOS | 2.2.0+ | 支持,pbk 字段需注意 URL 编码 |
| Sing-box | 全平台 | 1.8.0+ | 支持,需手动写 JSON,flow 在顶层 |
| NekoBox | Android | 1.2.0+ | 支持,sing-box 内核 |
Clash Meta / Mihomo 对 VLESS Reality 的支持仍在 experimental 阶段,部分版本会报 unsupported network: tcp 或 early eof,不推荐作为 Reality 的生产客户端。
端口冲突和防火墙:443 被占用了怎么办
部署过程中最常卡住的不是协议本身,而是端口。如果安装脚本跑完 xray 或 x-ui 起不来,第一件事就是查端口:
lsof -i :443
常见占用 443 的进程:
| 进程 | 原因 | 解决方法 |
|---|---|---|
| Nginx / Apache | VPS 自带或之前装了 Web 服务 | systemctl stop nginx && systemctl disable nginx |
| Caddy | 自动 HTTPS 接管 443 | systemctl stop caddy && systemctl disable caddy |
| 另一个 Xray 实例 | 旧配置残留 | systemctl stop xray && pkill xray 然后重装 |
| 云服务商安全组 | 控制台未放行 | 登录云控制台 → 防火墙/安全组 → 添加入站规则 TCP 443 |
如果因为某些原因 443 确实不能用(比如公司网络封了 443 非 HTTP 流量,或者运营商干扰),可以换到 8443 或 2096。但这两个端口的流量特征不如 443 自然,被识别概率会稍高。
常见错误排查路径
按从高概率到低概率排列:
- reality verification failed:检查 pbk、sid、sni、fp 四项,尤其是 pbk 的每一位是否和服务器公钥完全一致。用 xray x25519 重新生成一次确保密钥对格式正确。
- connection refused / timeout:防火墙没放行 443,或者 VPS IP 已被阻断。先 ufw status 和云控制台安全组做双重确认。
- 客户端显示已连接但无法访问网页:系统代理未接管。v2rayN 右键 → 系统代理 → 全局模式。或者直接开 TUN 模式。
- 刚搭好能连,几小时后就断了:dest 站点在你 VPS 所在区域解析不通。换一个 dest,比如从 learn.microsoft.com 换成 www.cloudflare.com。
- 3X-UI 面板能打开但入站一直显示停止:Xray 主进程没跑起来。SSH 运行 systemctl status xray 看错误日志,大概率是 config.json 有语法错误或者 443 被占。
如果你在部署过程中需要搭配兼容 Reality 协议的订阅线路,可以用兼容 Clash / Singbox / V2Ray 的订阅作为备用,省去自建节点时逐个客户端手动配置的重复工作。但自建 VLESS Reality 的隐私隔离优势依然是共享订阅无法替代的——你拥有完整的服务器控制权,不需要信任中间层。
相关阅读
来源与时间
本文最后查看时间:2026-05-29。操作路径会随客户端版本变化,遇到按钮名称不一致时,优先按同义菜单和官方文档查看。