系列导航
前言
在本章中,我们将使用 Xray 搭建一个 VLESS+Vision+Reality 节点。Reality 是 XTLS 团队开发的革命性协议,它的核心思想是 "偷取"其他网站的 TLS 证书 来伪装自己的流量。
Reality 的工作原理
传统的 TLS 伪装需要你拥有一个域名和 SSL 证书。而 Reality 协议可以:
- 无需域名和证书:直接使用 Microsoft、Apple、Cloudflare 等网站的证书
- 完美伪装:外部探测者看到的是完全合法的 TLS 握手
- 主动防御:非法探测会被转发到真实的目标网站
"偷别人证书" vs "偷自己证书"
本章我们先实现 "偷别人证书" 方案,即使用 www.microsoft.com 等网站作为伪装目标。这个方案的优点是无需域名,可以快速部署测试。
在系列最后一章,我们会升级为 "偷自己证书" 方案,使用自己的域名和证书,配合 Nginx SNI 分流实现最佳伪装效果。
第一步:安装 Xray
使用 Xray 官方提供的一键安装脚本:
# 下载并执行官方安装脚本
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install安装完成后,验证安装:
# 查看 Xray 版本
xray version你应该能看到类似以下输出:
Xray 25.12.8 (Xray, Penetrates Everything.) 81f8f39 (go1.25.5 linux/amd64)
A unified platform for anti-censorship.第二步:生成必要的密钥
Xray Reality 需要几个关键的密钥和 ID,我们需要先生成它们。
生成 UUID(用户标识)
# 生成 UUID
xray uuid输出示例:f47ac10b-58cc-4372-a567-0e02b2c3d479
生成 Reality 密钥对
# 生成 X25519 公私钥对
xray x25519输出示例:
PrivateKey: oGSPyKx0tzTE1xdwbyer7r_1MLcn-1gZDkI89fZXYXg
Password: FH-eaEFSpFcjG-K3CNFXloHCkzttQRD1k_o0p-FwI2Y
Hash32: 9h-4fKDrYbnVDqbdLl2D0bcr20rQMDKCUSQM2WU1Iks重要:请保存好这两个密钥!
- Private key(私钥):配置在服务器端
- Password(原 Public Key -> 公钥):配置在客户端
生成 Short ID
# 生成 16 位十六进制 short_id
openssl rand -hex 8输出示例:a1b2c3d4e5f67890
第三步:选择目标网站
Reality 需要一个目标网站(dest/target)来进行伪装。这个网站需要满足以下条件:
- ✅ 支持 TLS 1.3
- ✅ 支持 X25519 密钥交换
- ✅ 支持 HTTP/2(h2)
- ⭐️ 加分项:网站服务器物理距离和你的VPS近 (IP 相近)
- ⭐️ 加分项:网站支持 OCSP Stapling
选取方法参考:https://github.com/XTLS/Xray-core/issues/2005#issuecomment-1538294415
如果你懒得折腾,直接用下面的目标网站:
| 域名 | 说明 |
|---|---|
www.microsoft.com | 微软官网,稳定可靠 |
www.apple.com | 苹果官网 |
www.cloudflare.com | Cloudflare 官网 |
www.amazon.com | 亚马逊官网 |
gateway.icloud.com | iCloud 网关 |
验证目标网站兼容性
你可以使用以下命令验证目标网站是否支持 TLS 1.3 和 X25519:
# 检查 TLS 版本和密钥交换算法
echo | openssl s_client -connect www.microsoft.com:443 -tls1_3 2>/dev/null | grep -E "(Protocol|Server Temp Key)"如果输出包含 TLSv1.3 和 X25519,说明该网站兼容 Reality。
第四步:配置 Xray
现在我们来编写 Xray 的配置文件。
# 编辑 Xray 配置文件
vim /usr/local/etc/xray/config.json将以下配置粘贴进去,并替换标记的占位符:
{
"log": {
"loglevel": "info"
},
"inbounds": [
{
"tag": "VLESS-Vision-REALITY",
"listen": "::",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "替换为你的UUID",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"show": false,
"dest": "www.microsoft.com:443",
"serverNames": ["www.microsoft.com"],
"privateKey": "替换为你的私钥",
"shortIds": ["替换为你的shortId"]
}
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom"
},
{
"tag": "block",
"protocol": "blackhole"
}
]
}配置项详解
| 配置项 | 说明 |
|---|---|
port: 443 | 监听 443 端口(标准 HTTPS 端口) |
protocol: vless | 使用 VLESS 协议 |
id | 你生成的 UUID,用于客户端认证 |
flow: xtls-rprx-vision | 启用 Vision 流控,提供更好的性能和伪装 |
network: raw | 使用 TCP 传输 |
security: reality | 使用 Reality 安全层 |
dest | 目标网站地址,用于 TLS 伪装 |
serverNames | 允许的 SNI 列表,客户端需要使用这些域名连接 |
privateKey | 你生成的 X25519 私钥 |
shortIds | 短 ID 列表,用于额外的认证 |
第五步:启动 Xray 服务
# 检查配置文件语法是否正确
xray run -test -config /usr/local/etc/xray/config.json如果配置正确,你会看到类似输出:
Xray 25.12.8 (Xray, Penetrates Everything.) 81f8f39 (go1.25.5 linux/amd64)
A unified platform for anti-censorship.
2026/01/05 01:04:18.383694 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray/config.json Format:json}现在启动服务:
# 重启 Xray 服务
systemctl restart xray
# 设置开机自启
systemctl enable xray
# 查看服务状态
systemctl status xray如果状态显示 active (running),说明 Xray 已成功启动。
查看运行日志
# 实时查看 Xray 日志
journalctl -u xray -o cat -f按 Ctrl+C 退出日志查看。
第六步:配置客户端
现在服务器已经准备就绪,我们需要配置客户端来连接。
连接信息汇总
根据你的配置,整理以下信息:
| 参数 | 值 |
|---|---|
| 地址 (Address) | 你的 VPS IP 地址 |
| 端口 (Port) | 443 |
| 协议 (Protocol) | vless |
| UUID | 你生成的 UUID |
| 流控 (Flow) | xtls-rprx-vision |
| 传输层 (Network) | tcp |
| 安全 (Security) | reality |
| SNI | www.microsoft.com |
| 指纹 (Fingerprint) | chrome |
| 公钥 (Public Key) | 你生成的公钥 |
| Short ID | 你生成的 shortId |
v2rayN 配置(Windows)
- 打开 v2rayN
- 服务器 → 添加 [VLESS] 服务器
- 填入上述信息
- 传输层安全选择
reality - 填入公钥和 shortId
Clash Meta / Mihomo 配置
proxies:
- name: 'My-Reality'
type: vless
server: 你的VPS_IP
port: 443
udp: true
uuid: 你的UUID
flow: xtls-rprx-vision
packet-encoding: xudp
tls: true
servername: www.microsoft.com
alpn:
- h2
- http/1.1
client-fingerprint: chrome
skip-cert-verify: false
reality-opts:
public-key: 你的公钥
short-id: 你的shortId
network: tcp
smux:
enabled: false分享链接格式
vless://UUID@VPS_IP:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.microsoft.com&fp=chrome&pbk=公钥&sid=shortId&type=tcp#节点名称第七步:连接测试
配置好客户端后,尝试连接并访问网站测试是否正常工作。
- 在客户端开启代理
- 访问 https://www.google.com 测试连通性
- 访问 https://ip.sb 确认出口 IP 是否为 VPS IP
常见问题排查
问题 1:连接超时
# 检查 443 端口是否开放
ss -tlnp | grep 443
# 检查防火墙
ufw status问题 2:Reality 握手失败
- 确认客户端的公钥与服务器的私钥是配对的
- 确认 shortId 完全一致
- 确认 serverName/SNI 在服务器配置的 serverNames 列表中
问题 3:连接后无法访问网站
# 查看 Xray 日志
journalctl -u xray -o cat -f
# 检查 DNS 解析
nslookup google.com总结
在本章中,我们完成了:
- ✅ 安装 Xray 核心
- ✅ 生成 UUID、Reality 密钥对和 Short ID
- ✅ 配置 VLESS+Vision+Reality("偷别人证书"方案)
- ✅ 配置客户端并成功连接
现在你已经拥有了一个基础的 Reality 节点。在后续章节中,我们会:
- 配置 SmartDNS 优化 DNS 解析
- 申请自己的域名和证书
- 使用 Nginx SNI 分流实现 "偷自己证书" 的最佳伪装方案