Reality 是 Xray-core 2.0 引入的革命性协议,它解决了传统 TLS 代理的指纹识别问题——让代理流量和真实访问大站的流量完全一致,从根本上杜绝主动探测。
为什么需要 Reality
传统 TLS 代理的问题:
| 方案 | 致命弱点 |
|---|---|
| VMess + TLS | TLS 指纹可被识别 |
| VLESS + TLS + Web | 需要伪装网站,自签证书有特征 |
| Trojan | 密码在 TLS 握手中明文传输 |
| Shadowsocks | 流量特征明显 |
核心矛盾:你的代理服务器返回的 TLS 证书是自签的,主动探测一查就知道不是真实网站。
Reality 的解法:不伪装,直接「借用」真实网站的证书。
工作原理
客户端 Reality 服务器 目标站点 (www.microsoft.com)
| | |
|--- TLS ClientHello ------->| |
| |--- TLS ClientHello --------->|
| |<-- TLS ServerHello + 真实证书 -|
|<-- 转发真实证书 ------------| |
| | |
| (验证: 证书是真的,域名也对) |
|--- VLESS 请求(加密) ------>| |
| | (非法流量直接反向代理到目标) |
|<-- 正常代理响应 ------------| |
关键点:
- 真实证书 — 服务器向目标站点发起真实 TLS 握手,拿到的是真实 CA 签发的证书
- 主动探测免疫 — 探测者看到的是真实网站的证书和响应,完全合法
- 无域名要求 — 不需要购买域名,不需要配置 DNS
- 无端口复用 — 不需要 Nginx/SNI 分流
部署实战
服务端配置
安装 Xray-core:
bash <(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh) install
配置文件 /usr/local/etc/xray/config.json:
{
"log": { "loglevel": "warning" },
"inbounds": [
{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "你的UUID",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"show": false,
"dest": "www.microsoft.com:443",
"xver": 0,
"serverNames": [
"www.microsoft.com"
],
"privateKey": "你的私钥",
"shortIds": [
"abcd1234",
"",
"0123456789abcdef"
]
}
}
}
],
"outbounds": [
{ "protocol": "freedom" },
{ "protocol": "blackhole" }
]
}
生成密钥对
xray x25519
# 输出:
# Private key: XXXXX(填入服务端 privateKey)
# Public key: YYYYY(填入客户端 publicKey)
生成 UUID
xray uuid
# 输出:一个随机 UUID
客户端配置
以 v2rayN / Clash Meta / Shadowrocket 为例,核心参数:
| 参数 | 值 | 说明 |
|---|---|---|
| 协议 | VLESS | — |
| 传输 | TCP | — |
| 安全 | Reality | 核心选项 |
| SNI | www.microsoft.com | 和服务端 serverNames 一致 |
| Public Key | 服务端公钥 | 从 x25519 生成 |
| Short ID | abcd1234 | 和服务端 shortIds 匹配 |
| Flow | xtls-rprx-vision | 必须开启 |
| Fingerprint | chrome | 模拟浏览器指纹 |
Clash Meta 配置示例:
proxies:
- name: "reality"
type: vless
server: your-server-ip
port: 443
uuid: 你的UUID
network: tcp
tls: true
udp: true
flow: xtls-rprx-vision
client-fingerprint: chrome
servername: www.microsoft.com
reality-opts:
public-key: 你的公钥
short-id: abcd1234
目标站点选择
目标站点(dest)的选择很关键:
好的目标站点
- 大厂官网:
www.microsoft.com、www.apple.com、www.amazon.com - CDN 服务商:
dl.google.com - 特征:支持 TLS 1.3 + H2,全球可达
不好的目标站点
- 小众网站 — 可能下线
- 已知代理服务站点 — 本身就是可疑目标
- 不支持 TLS 1.3 的站点
- 国内不可达的站点
验证目标站点
# 检查是否支持 TLS 1.3
openssl s_client -connect www.microsoft.com:443 -tls1_3 < /dev/null
# 检查证书链
echo | openssl s_client -connect www.microsoft.com:443 -servername www.microsoft.com 2>/dev/null | openssl x509 -noout -subject -issuer
性能优化
1. 开启 BBR
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
# 验证
sysctl net.ipv4.tcp_congestion_control
lsmod | grep bbr
2. 内核参数调优
# /etc/sysctl.conf
net.ipv4.tcp_fastopen=3
net.ipv4.tcp_slow_start_after_idle=0
net.ipv4.tcp_mtu_probing=1
3. Xray 服务端优化
{
"policy": {
"levels": {
"0": {
"handshake": 2,
"connIdle": 30,
"uplinkOnly": 2,
"downlinkOnly": 5,
"bufferSize": 10240
}
}
}
}
常见问题
Q: 连接失败,日志提示 reality handshake error
- 检查 SNI 是否和服务端
serverNames完全一致 - 检查 shortId 是否在服务端
shortIds列表中 - 检查公钥是否正确
Q: 能连上但无法上网
- 检查
outbounds是否配置了freedom - 检查服务器防火墙是否放行 443 端口
- 检查服务器的出站网络是否正常
Q: 速度慢
- 确认 BBR 已开启
- 尝试更换目标站点
- 检查服务器带宽和路由
Q: 被识别了
- 确保
client-fingerprint设为chrome - 确保目标站点在国内可达
- 不要和其他代理服务共用 443 端口
安全建议
- 不要分享配置 — 每人一套 UUID + shortId
- 定期更换 shortId — 增加追踪难度
- 服务端最小化暴露 — 只开 443,关闭其他端口
- 日志脱敏 — 生产环境
loglevel设为warning - 系统加固 — SSH 密钥登录、fail2ban、自动更新
与其他协议对比
| 特性 | Reality | VLESS+WS+TLS | Trojan | Hysteria2 |
|---|---|---|---|---|
| 抗检测 | 极强 | 中 | 弱 | 中 |
| 需要域名 | 否 | 是 | 是 | 是 |
| 需要证书 | 否 | 是 | 是 | 否 |
| 协议开销 | 极低 | 低 | 低 | 低 |
| UDP 支持 | 需额外配置 | 需额外配置 | 需额外配置 | 原生 |
| 部署难度 | 低 | 中 | 低 | 低 |
总结
Reality 是目前抗检测能力最强的代理协议方案,它的核心创新是借用真实网站的证书来消除 TLS 指纹。部署简单、无需域名、无需证书,对个人用户来说几乎是零成本。配合 XTLS Vision 的流控,性能和安全性都达到了新高度。