实操:VLESS + Reality 搭建全流程
上一章讲解了 Reality 的工作原理和技术细节。本章是纯实操——从零开始搭建一个 VLESS + Reality 节点,到客户端成功连接。
方案特点
- 无需域名:直接用 VPS 的 IP 地址
- 无需证书:不需要 Let's Encrypt 或 Cloudflare Origin Cert
- 无需 Nginx:Xray 直接监听 443 端口
- 抗主动探测:审查者探测时看到的是真实大站的内容
- 部署极简:一个 JSON 配置文件搞定服务端
前置条件
| 需要 | 说明 |
|---|---|
| VPS | 一台有公网 IP 的服务器(无需域名) |
| 端口 443 | 未被其他服务占用 |
| SSH 访问 | 能 root 登录服务器 |
如果你的 VPS 上已经有 Nginx 占用了 443 端口(比如同时运行着第三章的 WS + CDN 方案),需要让 Reality 使用其他端口(如 8443),或者使用另一台 VPS。同一台机器上两套方案共存的配置将在本章末尾说明。
第一步:安装 Xray
验证安装:
应该看到版本号输出(如 Xray 25.x.x)。如果提示找不到命令,检查 PATH 或重新运行安装脚本。
第二步:生成认证参数
Reality 需要三组参数:UUID、X25519 密钥对、Short ID。
生成 UUID
输出示例:a1b2c3d4-e5f6-7890-abcd-ef1234567890
生成 X25519 密钥对
输出示例:
Private Key 放服务端,Public Key 给客户端。 不要搞反!这是最常见的配置错误之一。
生成 Short ID
输出示例:a1b2c3d4e5f6a7b8
Short ID 是 1~16 位的十六进制字符串,作为额外认证层。即使密钥泄露,没有 Short ID 也无法连接。
汇总记录
把生成的参数记下来,后面要用:
第三步:选择伪装目标(dest)
Reality 需要一个"回落目标"——当有人直接探测你的服务器时,Xray 会把请求转发到这个目标站,返回它的真实内容。
选择标准
| 标准 | 说明 |
|---|---|
| 必须支持 TLS 1.3 | Reality 需要 TLS 1.3 特性 |
| 建议支持 H2 | 更好的性能和隐蔽性 |
| 全球流量大 | 你的流量混在其中不显眼 |
| 不在中国封锁名单中 | 别选 google.com |
| 有全球 CDN 部署 | 地理延迟合理 |
推荐目标
验证目标可用性
在你的 VPS 上执行:
应该看到 HTTP/2 200。如果报错或返回 HTTP/1.1,换一个目标。
不要选择的目标
| 目标 | 原因 |
|---|---|
google.com / youtube.com | 在中国被封,回落到它们反而暴露你 |
addons.mozilla.org | 早期被太多人用,已被标记 |
| 小众网站 | 流量太少,你的连接会很显眼 |
| 会 301 跳转的域名 | 跳转行为会泄露异常 |
第四步:配置 Xray 服务端
写入以下配置(替换 5 个标记值):
配置参数说明
| 参数 | 值 | 说明 |
|---|---|---|
listen | 0.0.0.0 | 监听所有网络接口(对外提供服务) |
port | 443 | 标准 HTTPS 端口,流量最自然 |
flow | xtls-rprx-vision | XTLS Vision 流控,消除 TLS-in-TLS 特征 |
decryption | none | VLESS 协议不做额外加密层 |
network | tcp | Reality 必须用 TCP(不能用 WS/gRPC) |
security | reality | 启用 Reality 协议 |
dest | www.microsoft.com:443 | 回落目标,非法请求转发到这里 |
serverNames | ["www.microsoft.com"] | 允许客户端使用的 SNI |
privateKey | 你的私钥 | 服务端私钥(第二步生成) |
shortIds | ["xxx", ""] | 认证短 ID,"" 表示也允许空 |
sniffing | 开启 | 嗅探流量类型,用于正确路由 |
shortIds 数组中的空字符串 "" 意味着即使客户端不填 Short ID 也能连接。如果你想强制要求 Short ID(更安全),删掉空字符串即可。
验证配置语法
应该输出 Configuration OK.。如果报 JSON 语法错误,检查逗号和引号。
第五步:启动 Xray
确认输出中有 Active: active (running)。
确认端口监听
应该看到类似:
如果看不到,检查:
- 是否有其他服务占用了 443(如 Nginx)
- Xray 是否启动失败(
journalctl -u xray -n 20)
第六步:防火墙配置
确保 443 端口对外开放:
别忘了云服务商的安全组! 阿里云、腾讯云、AWS 等都有独立的安全组/防火墙规则。即使系统防火墙放行了,安全组没放行也连不上。登录云控制台 → 安全组 → 入方向 → 放行 TCP 443。
第七步:验证 Reality 回落
从你的本地电脑(不是 VPS)执行:
如果返回了微软官网的 HTML 内容,说明 Reality 回落正常 ✅
这意味着:任何探测者连接你的 443 端口时,看到的都是微软的真实网站。
这应该返回错误或超时——因为没有正确的 SNI,Reality 会拒绝连接。这也是正常行为 ✅
第八步:客户端配置
Clash Meta / mihomo
client-fingerprint 必须设置! Reality 要求客户端伪装 TLS 指纹。推荐用 chrome(最常见),也可用 firefox、safari、edge。不设置会导致连接失败。
别忘了将节点名加到 proxy-groups 的对应分组中。
v2rayN(Windows)
方法一:分享链接导入(推荐)
复制链接 → v2rayN → 服务器 → 从剪贴板导入批量 URL。
方法二:手动配置
| 参数 | 值 |
|---|---|
| 地址 | 你的VPS_IP |
| 端口 | 443 |
| 用户ID | 你的 UUID |
| 流控 | xtls-rprx-vision |
| 加密 | none |
| 传输协议 | tcp |
| 传输层安全 | reality |
| SNI | www.microsoft.com |
| Fingerprint | chrome |
| PublicKey | 你的 Public Key |
| ShortId | 你的 Short ID |
v2rayNG(Android)
和 v2rayN 一样,直接导入分享链接即可。手动添加时参数完全相同。
sing-box(跨平台)
Shadowrocket(iOS)
| 参数 | 值 |
|---|---|
| 协议 | VLESS |
| 地址 | 你的VPS_IP |
| 端口 | 443 |
| UUID | 你的 UUID |
| Flow | xtls-rprx-vision |
| TLS | 开启 |
| Reality | 开启 |
| Public Key | 你的 Public Key |
| Short ID | 你的 Short ID |
| Server Name | www.microsoft.com |
| Fingerprint | chrome |
第九步:测试连接
客户端连上节点后:
如果显示了 VPS 的 IP 地址,恭喜,部署成功 ✅
踩坑排查
连接超时(Connection timed out)
| 检查项 | 命令 | 期望结果 |
|---|---|---|
| Xray 是否运行 | systemctl status xray | active (running) |
| 端口是否监听 | ss -tlnp | grep 443 | 看到 xray 进程 |
| 系统防火墙 | ufw status | 443 为 ALLOW |
| 云安全组 | 登录云控制台检查 | 入方向 TCP 443 放行 |
TLS handshake 失败
原因:客户端 servername(SNI)不在服务端的 serverNames 列表中。
解决:确保客户端填的 SNI 和服务端 serverNames 数组里的值完全一致。
连上后报 rejected / 无法上网
| 原因 | 解决 |
|---|---|
| UUID 不匹配 | 核对服务端 clients.id 和客户端 UUID |
| Short ID 不匹配 | 核对服务端 shortIds 和客户端 short-id |
| 公私钥搞反 | 服务端填 Private Key,客户端填 Public Key |
flow 未设置 | 客户端必须设置 flow: xtls-rprx-vision |
sniffing 未开启 | 服务端配置中加上 sniffing 段 |
flow 报错(stream is not TCP)
原因:Reality + Vision 只支持 TCP 传输,不能用 WebSocket、gRPC 等。
解决:确保 network 设为 tcp,且没有开启 mux(多路复用)。
Xray 启动报错
常见报错:
| 日志关键词 | 原因 | 解决 |
|---|---|---|
invalid private key | 私钥格式错误 | 重新 xray x25519 生成 |
address already in use | 443 端口被占用 | 停掉占用进程或换端口 |
invalid JSON | 配置文件 JSON 格式错误 | 检查逗号、引号、括号 |
速度慢
Reality 本身性能很好(TCP 直连,无额外开销),如果速度慢通常是线路问题:
- 测试裸连速度:
curl -o /dev/null -w "%{speed_download}" https://speed.cloudflare.com/__down?bytes=10000000 - 换路由:可以套 WARP 优化出口路由
- 换时段:晚高峰(20:00-23:00)国际线路普遍拥堵
进阶:多用户配置
为不同的人生成不同的 UUID:
配置文件中添加多个 client:
email 字段不是真正的邮箱,只用于日志区分流量来源。所有用户共享同一组密钥对和 Short ID。
进阶:非 443 端口部署
如果 443 已被 Nginx 占用(比如你同时运行着第三、四章的 CDN 方案),可以用其他端口:
客户端相应改为连接 8443 端口。
使用非 443 端口时,Xray 日志会警告 REALITY: listening on a non-443 port。实际风险取决于环境——大多数海外 VPS 使用非标端口不会有问题,但 443 是最安全、最隐蔽的选择。
进阶:同一台 VPS 运行两套方案
如果你想在同一台 VPS 上同时部署 Reality(备用)和 XHTTP + CDN(主力),架构如下:
Xray 配置使用多个 inbound:
两个 inbound 可以用同一个 UUID,也可以用不同的 UUID 分别管理。
常用运维命令
小结
本章完成了 VLESS + Reality 的完整部署:
| 步骤 | 内容 |
|---|---|
| 安装 Xray | 官方脚本一键安装 |
| 生成参数 | UUID + X25519 密钥对 + Short ID |
| 选择 dest | 大流量、支持 TLS 1.3 的目标站 |
| 配置服务端 | 一个 JSON 文件 |
| 防火墙 | 系统防火墙 + 云安全组放行 443 |
| 客户端 | Clash Meta / v2rayN / sing-box / Shadowrocket |
Reality 方案的优势:
- ✅ 零域名依赖——裸 IP 直接部署
- ✅ 零证书维护——不需要续期
- ✅ 最强抗探测——回落到真实大站
- ✅ 性能优秀——TCP 直连无额外开销
- ✅ 部署极简——一个配置文件搞定
配合前几章的 XHTTP + CDN 方案,你现在有了一主一备两条线路:CDN 方案保护 IP 安全作为日常主力,Reality 方案性能更好作为备用。两套共存,随时切换。