查看 2026-05-29 20 分钟 进阶 4 步

VLESS Reality 节点搭建完整教程(VPS 2026):3X-UI + Xray-core 从零部署

VLESS Reality 不需要域名和 TLS 证书,通过借用目标网站的 TLS 指纹来伪装流量。但很多人卡在 dest(伪装目标)、serverNames、privateKey/publicKey 和 shortId 四个参数对不上,导致客户端持续报 reality verification failed。这篇把每个字段的生成方式、含义和查错顺序按命令行和 3X-UI 面板分别写清楚。

·

VLESS Reality 部署可以拆成四步:VPS 放行 443 端口 → 安装 Xray-core(推荐用 3X-UI 面板管理)→ 生成 x25519 密钥对和 shortId,选一个 CDN 大站做 dest → 客户端填 pbk/sid/sni/fp 四项与服务器完全一致。验证用浏览器开 ip.sb 看出口 IP 是否切到 VPS。
操作步骤速查
  1. VPS 初始化:放行端口并更新系统

    SSH 登录 VPS 后先更新包列表和已安装包:apt update && apt upgrade -y。然后检查防火墙状态:ufw status。如果 ufw 未启用,先允许 SSH 端口(默认 22)再启用:ufw allow 22/tcp && ufw enable。放行 443 端口:ufw allow 443/tcp。如果你的 VPS 使用云服务商的安全组(AWS Security Group / 阿里云安全组 / Vultr Firewall),同时去控制台放行 443 入站规则。

    预期结果:运行 ufw status 能看到 22/tcp 和 443/tcp 均为 ALLOW。从本地终端运行 nc -zv <VPS_IP> 443 返回 succeeded 表示端口已可达。

    云服务商的网页控制台安全组比 VPS 内部 ufw 优先级更高。如果 ufw 已放行但外部仍不通,先查安全组规则。Vultr 默认关闭所有端口,需要手动添加。

  2. 安装 3X-UI 面板

    在 SSH 终端执行官方安装脚本:bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/main/install.sh)。安装完成后终端会打印面板访问地址(http://<VPS_IP>:2053)、用户名和密码。记下这三个信息,然后立即设置面板端口到 443(先别改,安装完再改会冲突):在 SSH 运行 x-ui setting -port 8443 把面板管理端口从默认 2053 改到 8443,避免和 Reality 的 443 冲突。然后 systemctl restart x-ui。

    预期结果:浏览器访问 http://<VPS_IP>:8443 能打开 3X-UI 登录页,用安装脚本给出的用户名密码能成功登录。

    如果忘记面板密码,SSH 运行 x-ui setting -username admin -password 新密码 可以重置。不要直接把面板端口放 443,面板是 HTTP 服务,443 端口留给 Reality 做 TLS 伪装。

  3. 在 3X-UI 中创建 VLESS Reality 入站

    登录面板后点左侧「入站列表」→「添加入站」。协议选 vless,端口填 443,传输选 tcp,安全选 reality。展开 Reality 设置后:1) 点「生成」按钮创建 x25519 密钥对,系统会自动填入 privateKey 和 publicKey,点「复制公钥」保存到本地记事本;2) Dest 填 learn.microsoft.com:443;3) Server Name 填 learn.microsoft.com(与 dest 域名一致);4) Short ID 点「随机生成」得到一个 8 位十六进制字符串;5) Fingerprint 选 chrome。Flow 保持 xtls-rprx-vision。UUID 保持系统生成的。保存入站。

    预期结果:入站列表出现一条新记录,协议 vless,端口 443,状态为运行中(绿色指示灯)。

    如果 443 端口提示被占用,运行 lsof -i :443 查看是什么进程。常见情况是 Nginx/Apache/Caddy 已经占了 443,需要先停止或卸载。

  4. 客户端配置:四项 Reality 参数必须完全一致

    在 3X-UI 入站详情页点「分享」或「二维码」生成客户端连接信息。对于 v2rayN(Windows):打开软件 → 服务器 → 添加 VLESS 服务器 → 地址填 VPS IP → 端口 443 → UUID 填面板生成的 → Flow 选 xtls-rprx-vision → 传输选 tcp → 安全选 reality → 公钥粘贴刚才复制的 publicKey → Short ID 粘贴 shortId → SNI 填 learn.microsoft.com → Fingerprint 选 chrome。v2rayNG(Android)和 Shadowrocket(iOS)也可以用二维码直接扫码导入。Sing-box 用户需要手动写 JSON,注意 type 填 vless,security 填 reality 且 flow 在 VLESS 配置的顶层。

    预期结果:客户端连接后状态显示绿色或 Connected,日志无 reality verification failed 报错。

    如果扫码导入后 pbk/sid/sni/fp 四项有一项变成了空字符串或错误值,不要手动编辑客户端 UI,去面板重新导出分享链接。部分客户端对分享链接的解析有 bug。

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可选可选443XTLS 流控直接处理 TLS 内流量
VLESS + Reality否否443借用目标站点 TLS 1.3 指纹,无证书
Hysteria 2是或自签自签即可443/8443QUIC 伪装,无额外反代

从上表可以看出 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 Learnlearn.microsoft.com:443支持Azure CDNXray 社区默认推荐,非商业域名
Microsoft 官网www.microsoft.com:443支持Azure CDN几乎零宕机,延迟低
Apple 官网www.apple.com:443支持Akamai CDN全球加速覆盖好
Cloudflarewww.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 公网 IP45.xx.xx.xx不适用
端口 (port)inbounds.port443不适用
UUID (id)clients[].id3a8f...-...-...-...-...是
Flowclients[].flowxtls-rprx-vision否
安全 (security)streamSettings.securityreality否
公钥 (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 支持
v2rayNWindows6.0+完整支持,支持二维码扫码
v2rayNGAndroid1.8.0+完整支持,支持二维码和剪贴板
ShadowrocketiOS2.2.0+支持,pbk 字段需注意 URL 编码
Sing-box全平台1.8.0+支持,需手动写 JSON,flow 在顶层
NekoBoxAndroid1.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 / ApacheVPS 自带或之前装了 Web 服务systemctl stop nginx && systemctl disable nginx
Caddy自动 HTTPS 接管 443systemctl stop caddy && systemctl disable caddy
另一个 Xray 实例旧配置残留systemctl stop xray && pkill xray 然后重装
云服务商安全组控制台未放行登录云控制台 → 防火墙/安全组 → 添加入站规则 TCP 443

如果因为某些原因 443 确实不能用(比如公司网络封了 443 非 HTTP 流量,或者运营商干扰),可以换到 8443 或 2096。但这两个端口的流量特征不如 443 自然,被识别概率会稍高。

常见错误排查路径

按从高概率到低概率排列:

  1. reality verification failed:检查 pbk、sid、sni、fp 四项,尤其是 pbk 的每一位是否和服务器公钥完全一致。用 xray x25519 重新生成一次确保密钥对格式正确。
  2. connection refused / timeout:防火墙没放行 443,或者 VPS IP 已被阻断。先 ufw status 和云控制台安全组做双重确认。
  3. 客户端显示已连接但无法访问网页:系统代理未接管。v2rayN 右键 → 系统代理 → 全局模式。或者直接开 TUN 模式。
  4. 刚搭好能连,几小时后就断了:dest 站点在你 VPS 所在区域解析不通。换一个 dest,比如从 learn.microsoft.com 换成 www.cloudflare.com。
  5. 3X-UI 面板能打开但入站一直显示停止:Xray 主进程没跑起来。SSH 运行 systemctl status xray 看错误日志,大概率是 config.json 有语法错误或者 443 被占。

如果你在部署过程中需要搭配兼容 Reality 协议的订阅线路,可以用多格式测试订阅源作为备用,省去自建节点时逐个客户端手动配置的重复工作。但自建 VLESS Reality 的隐私隔离优势依然是共享订阅无法替代的——你拥有完整的服务器控制权,不需要信任中间层。

相关阅读

常见问题

为什么客户端一直报 reality verification failed?
四项参数里至少有一项对不上。优先级从高到低:pbk(公钥)每个字符必须和服务器一致 → sid(shortId)大小写敏感 → sni 是否能被 DNS 解析 → fp 只接受 chrome/firefox/random。先用 xray x25519 重新生成密钥对,把私钥放服务器、公钥给客户端。
dest 选什么站点不容易被封?
选全球 CDN 且支持 TLS 1.3 的大站。推荐 learn.microsoft.com、www.microsoft.com、www.apple.com、www.cloudflare.com 这四个,不要选小众地区站或中文网站,也不要选有明显地域限制的站点(如某些流媒体域名在 VPS 所在区域解析不通)。
端口可以不用 443 吗?
技术上任何端口都可以监听,但 Reality 和 TLS 1.3 伪装绑定后,非 443 端口的流量特征与正常 HTTPS 不符。如果 VPS 的 443 端口没被占用,直接用 443。如果必须换端口(如防火墙封了 443),选 8443 或 2096 这类常见替代端口会比随机高端口好。
安装后 service 在跑但客户端始终连不上?
先做两步自检:curl -I https://<你的dest域名> 确认 VPS 能访问伪装目标 → ufw status 或 iptables -L INPUT 确认 443 端口已放行。如果两者都正常,再看客户端日志里是否有 network unreachable 或 context deadline exceeded,这通常指向防火墙或者 VPS IP 已被阻断。
更新了密钥对之后旧客户端全断了怎么办?
shortIds 支持数组配置,可以同时保留旧值和新增值。过渡期做法:先加一个新 shortId 到数组 → 分发新配置给客户端 → 确认所有客户端迁移完成后,再删除旧 shortId。密钥对更换没有这种窗口期,私钥一改所有客户端必须立刻更新 pbk。

来源与时间

本文最后查看时间:2026-05-29。操作路径会随客户端版本变化,遇到按钮名称不一致时,优先按同义菜单和官方文档查看。

看更多教程:教程库 · 看客户端:客户端目录 · 看下载入口:下载中心