REALITY 节点为什么会“偷跑流量”?
REALITY 的 target 指向 Cloudflare CDN 时,服务器可能被第三方当作 Cloudflare 的前置转发入口,并产生异常流量。社区通常称其为“REALITY 偷跑流量”或“反代 Cloudflare”。
这一现象发生在 REALITY 层,与 VLESS、VMess 等代理协议以及 RAW 等传输方式无关。第三方无需获得代理协议的认证信息、REALITY 私钥或 shortId,利用的是 REALITY 对鉴权失败连接的处理方式。
REALITY 如何处理连接
常见服务端配置如下:
{
"security": "reality",
"realitySettings": {
"target": "example.com:443",
"serverNames": [
"example.com"
]
}
}
旧版配置可能使用 dest。当前版本中,dest 与 target 互为别名。1
REALITY 的伪装机制用于应对 GFW 等网络审查系统的主动探测。审查系统可以主动连接公开端口,观察服务端如何响应。如果服务端对无效请求立即断开连接或返回固定错误,这种行为可能成为识别代理服务的特征。
合法客户端携带正确的 REALITY 认证信息,通过验证后进入上层代理协议。扫描器、浏览器、错误客户端以及主动探测请求无法通过验证,Xray 会把连接转发到 target,让探测方看到真实网站的 TLS 响应:
客户端 → VPS:443
├─ REALITY 验证成功 → 上层代理协议 → Internet
└─ REALITY 验证失败 → target
未通过验证的连接也会产生真实的服务器出站流量。该行为原本用于降低主动探测的识别能力,也为 Cloudflare 转发滥用提供了入口。
文中沿用社区常见的“REALITY fallback”称呼,具体指未通过鉴权连接的 target 转发行为。它与代理协议中名为 "fallbacks": [...] 的配置项无关。官方文档只说明 target 的格式与该配置项的 dest 相同。1
更换代理协议或传输方式不会消除这条转发路径。风险由 REALITY 的未鉴权转发行为和目标服务器的网络结构共同决定。
Cloudflare target 为什么容易被利用
普通独立 HTTPS 服务器通常只处理自己的域名。此类目标收到陌生连接时,VPS 只会向该站点转发流量,可利用范围有限。
Cloudflare 的代理域名共享其 Anycast IP 地址。Cloudflare 边缘节点根据 TLS SNI 和 HTTP Host 等信息处理不同站点的请求。2 当 REALITY 的 target 位于 Cloudflare CDN,鉴权失败的连接会进入 Cloudflare 边缘网络:
第三方 → VPS:443 → REALITY target → Cloudflare Edge → Cloudflare 托管站点
第三方可以连接 VPS 的 443 端口,并在 TLS 请求中携带另一个 Cloudflare 托管域名的 SNI。VPS 随后充当 Cloudflare 的 TCP 前置转发器。Xray 官方文档已明确提示,Cloudflare 一类特殊 target 可能让服务器在被扫描后产生流量盗用。1
所有 REALITY 服务都会为未通过鉴权的连接产生一定 target 流量。普通独立站点的风险通常较低;Cloudflare 等共享 CDN 提供了更大的转发范围。其他采用共享入口 IP 和 SNI 路由的大型 CDN 也需要单独评估。
这类问题属于资源滥用。REALITY 验证和上层代理协议的认证仍然有效,第三方没有取得代理权限,也没有登录 VPS。可能出现的后果包括流量额度耗尽、限速、停机和额外费用。
检查 REALITY target
先检查服务端的以下字段:
realitySettings.target
realitySettings.dest
如果值为 www.cloudflare.com:443,或域名启用了 Cloudflare 代理,应更换或增加限制。普通域名也需要检查实际解析结果。
查询 IPv4 和 IPv6:
dig +short A example.com
dig +short AAAA example.com
查询解析地址的 ASN:
whois 104.xxx.xxx.xxx
减少 whois 输出:
whois 104.xxx.xxx.xxx \
| grep -Ei 'origin|originas|aut-num|netname|org-name|orgname'
结果中出现 AS13335、CLOUDFLARENET 或 Cloudflare,通常表示该地址属于 Cloudflare。Cloudflare 支持 BYOIP 等部署方式,因此 ASN 检查不能覆盖全部情况。
Cloudflare 官方维护 IPv4 和 IPv6 网段列表:
curl -s https://www.cloudflare.com/ips-v4
curl -s https://www.cloudflare.com/ips-v6
自动化检测应读取当前列表,避免长期使用硬编码的旧网段。
Xray 还可以检查目标的 TLS 行为:
xray tls ping example.com
xray tls ping example.com:443
xray tls ping 用于判断 TLS 行为是否适合作为 REALITY target,不负责识别 Cloudflare。选取目标时可以结合 DNS、ASN 和 TLS 检查结果。
处理方案
更换共享 CDN target
个人节点可优先选择网络特征合理的独立目标,避免直接使用:
"target": "www.cloudflare.com:443"
REALITY 官方文档建议优先选择与 VPS 位于同一 ASN 的合适目标。1 选择时需要检查 TLS 支持、网络可达性、地理位置、ASN、网络路径和证书行为。
限制未鉴权连接的带宽
Xray 提供 limitFallbackUpload 和 limitFallbackDownload,只限制未通过 REALITY 验证的连接:
"realitySettings": {
"target": "example.com:443",
"serverNames": [
"example.com"
],
"limitFallbackUpload": {
"afterBytes": 10485760,
"bytesPerSec": 1048576,
"burstBytesPerSec": 5242880
},
"limitFallbackDownload": {
"afterBytes": 10485760,
"bytesPerSec": 1048576,
"burstBytesPerSec": 5242880
}
}
afterBytes:传输达到指定字节数后开始限速。bytesPerSec:持续速率。burstBytesPerSec:令牌桶的突发容量。
以上参数会在累计传输约 15 MB 后,将持续速度限制在约 1 MB/s。连接暂停 5 秒后,可再次突发传输约 5 MB。1
固定限速会形成可识别的网络特征。官方文档不建议默认启用该功能,并要求面板或一键脚本随机化参数。限速适合无法更换 CDN target 时控制资源消耗。
按 SNI 过滤连接
Nginx、HAProxy 或 Xray 自身的路由可以只允许预期 SNI:
客户端 → SNI 检查
├─ 正确 SNI → Xray REALITY 或 target
└─ 其他 SNI → DROP
严格过滤会改变 REALITY 对陌生连接的伪装行为,需要结合资源滥用风险和主动探测场景评估。
XTLS 官方示例仓库提供了 VLESS-TCP-REALITY (without being stolen) 目录。该示例使用 dokodemo-door + TLS sniffing + routing + blackhole 过滤 SNI:3
REALITY 未认证连接
↓
本机 dokodemo-door
↓
读取 TLS SNI
├─ 预期 serverName → direct → target
└─ 其他 serverName → blackhole
示例中的核心入站结构如下:
{
"listen": "127.0.0.1",
"tag": "dokodemo-in",
"port": 4431,
"protocol": "dokodemo-door",
"settings": {
"address": "speed.cloudflare.com",
"port": 443,
"network": "tcp"
},
"sniffing": {
"enabled": true,
"destOverride": [
"tls"
],
"routeOnly": true
}
}
REALITY 指向本机入站:
"realitySettings": {
"dest": "127.0.0.1:4431",
"serverNames": [
"speed.cloudflare.com"
]
}
路由允许预期域名直连:
{
"inboundTag": [
"dokodemo-in"
],
"domain": [
"speed.cloudflare.com"
],
"outboundTag": "direct"
}
其余连接进入 block:
{
"inboundTag": [
"dokodemo-in"
],
"outboundTag": "block"
}
部署时应使用官方示例仓库的当前完整配置。上述片段只展示转发和过滤结构,不包含 UUID、密钥等必要字段。
排查异常流量
Debian 或 Ubuntu 可以使用 vnstat 记录流量:
apt install vnstat
systemctl enable --now vnstat
查看每日、每月和实时流量:
vnstat -d
vnstat -m
vnstat -l
检查当前 443 连接:
ss -tnp | grep ':443'
ss -tn state established '( sport = :443 )'
统计连接来源:
ss -tn state established '( sport = :443 )' \
| awk 'NR>1 {print $5}' \
| sort \
| uniq -c \
| sort -nr \
| head
公网 443 端口经常收到扫描连接,连接数量本身不能证明流量被盗用。大量持续连接、异常带宽和缺少对应的正常使用记录同时出现时,应继续检查连接日志、进程、监听端口和网络连接。
参考资料
-
Cloudflare:Proxy status,访问于 2026-08-15。 ↩︎
-
XTLS/Xray-examples:VLESS-TCP-REALITY (without being stolen),访问于 2026-08-15。 ↩︎