← [ BACK_TO_NOTES ]

REALITY

REALITY 是 Xray 的传输安全机制,通过借用目标站点的 TLS 外观与握手特征完成伪装;未通过 REALITY 鉴权的连接会被转发到 target,这一 fallback 行为在共享 CDN target 上可能形成开放端口转发风险。

#concept #growing #network #security #proxy

[!info] related notes

REALITY

一句话定义

REALITY 是 Xray 的传输安全机制。它修改并利用 TLS 握手行为,借用一个真实目标站点的 TLS 外观与握手特征作为伪装,使外部观察到的连接更接近普通 TLS/Web 流量。

REALITY 不是 VLESS 本身;它属于传输安全层,常与 VLESS 组合。

在协议栈中的位置

可以把一条常见代理连接拆成:

代理协议:VLESS
    ↓
传输方式:RAW / XHTTP / gRPC
    ↓
传输安全:REALITY
    ↓
TCP / 网络

因此:

  • VLESS 负责代理请求、身份字段和真正的目标地址;
  • REALITY 负责外层握手、传输安全与伪装;
  • SNI 是 REALITY/TLS 外层握手中的主机名信息之一。

Project X 当前文档说明 REALITY 可与 RAW、XHTTP、gRPC 等传输方式组合。

一条 REALITY 连接中的三个“目标”

在 VLESS + REALITY 场景中,经常同时存在三个容易混淆的地址:

1. server
   = 客户端真正连接的 VPS_IP:port

2. serverName / SNI
   = REALITY 外层握手使用的伪装主机名

3. VLESS destination
   = 代理隧道建立后真正想访问的网站

例如:

server          = 203.0.x.x:443
serverName/SNI  = example.com

VLESS destination
                = youtube.com:443

因此,SNI 指向 example.com 并不意味着最终代理流量只会访问 example.com。

服务端的 target 是什么

REALITY 服务端有一个关键字段:

target = example.com:443

旧版本文档和配置中也常看到 dest,当前 Xray 文档将两者视为别名。

target 的角色不是“用户最终代理访问的网站”,而是 REALITY 借用 TLS 外观、证书/握手特征以及处理非合法连接时使用的真实目标。

通常还会配置:

  • serverNames:客户端允许使用的 serverName/SNI;
  • 服务端私钥;
  • shortIds;
  • 客户端对应的 serverName、凭据/公钥信息与 shortId。

合法 REALITY 客户端

简化流程:

合法客户端
  │
  │ 连接 VPS
  │ REALITY 参数匹配
  ▼
REALITY 验证通过
  │
  ▼
进入真正的代理协议
  │
  ▼
VLESS destination
  │
  ▼
YouTube / GitHub / 其他目标

这里 target 主要承担伪装参考角色,而不是把合法代理流量永久转发给 target。

关键机制:鉴权失败会 fallback 到 target

REALITY 为了让“不合法的 REALITY 连接”看起来仍像正常 TLS 服务,而不是立即暴露一个明显异常的代理端口,Xray 会把鉴权失败、不是合法 REALITY 请求的流量直接转发到 target。

简化为:

陌生客户端
  │
  ▼
VPS:443
  │
  ├─ REALITY 验证通过 → 正常代理
  │
  └─ REALITY 验证失败 → 原样转发到 target

这个 fallback 行为是 REALITY 伪装模型的重要组成部分,也是共享 CDN target 风险的根源。

为什么 target 不能随便选共享 CDN

如果 target 是普通单站点服务器:

VPS
 ↓
ordinary.example:443

陌生连接即使触发 fallback,通常也只获得到该目标站点的有限转发价值。

如果 target 位于 Cloudflare 这类共享 CDN 上:

VPS
 ↓
Cloudflare Edge IP
 ├─ tenant-a.example
 ├─ tenant-b.example
 ├─ tenant-c.example
 └─ ...

Cloudflare 的公开代理 IP 段被大量 proxied hostnames 共享,并通过 Anycast 在全球多个数据中心发布。此时 VPS 可能等价于一个通往 Cloudflare 边缘的 TCP 端口转发器。

Project X 官方 REALITY 文档专门警告:如果 target 使用 Cloudflare CDN 等“特殊”共享地址,服务器可能在被扫描后被第三方滥用、偷跑流量。

详细机制见 REALITY、Cloudflare 与 fallback 流量滥用。

“偷域名/偷证书”在 REALITY 语境中的含义

中文社区常把 REALITY 选择第三方真实站点作为 target/serverName 的做法口语化称为:

  • 偷域名;
  • 偷 SNI;
  • 偷证书。

更准确的理解是:

借用第三方目标站点的 TLS 证书/握手外观作为 camouflage target。

这不是取得该域名的控制权,也不等于入侵该网站。

Project X 中文文档自身也使用“偷同 ASN 的证书”“偷了 Cloudflare 这种免费 CDN 的证书”一类表述,因此这一社区术语在 REALITY 讨论中较常见。

与 Domain Fronting 的区别

REALITY 不应简单等同于传统 Domain Fronting。

传统 Domain Fronting 通常利用:

TLS SNI = front.example
HTTP Host = hidden.example

由共享 CDN 在不同层看到不同 hostname 完成前置。

REALITY 的核心则是:

  • 客户端直接连接 REALITY 服务端;
  • 借用 target 的 TLS 外观与握手特征;
  • 通过自定义验证识别合法 REALITY 客户端;
  • 非合法连接 fallback 到 target。

两者都可能涉及共享基础设施和不同层的主机名,但机制不同。

防止 fallback 被滥用

Project X 当前文档给出的主要方向包括:

  1. 避免把共享免费 CDN 作为 target,优先选择更合适、与服务端网络特征接近的普通目标;
  2. 在前面增加 Nginx 等入口,过滤不符合预期的 SNI;
  3. 使用 limitFallbackUpload / limitFallbackDownload 对未通过验证的 fallback 连接限速;
  4. 对公网流量、连接数、带宽和异常 SNI 做监控。

需要注意:官方文档也提醒 fallback 限速本身可能形成特征,因此它不是没有代价的万能方案。

常见误解

REALITY target 就是最终代理目标

不是。合法代理会进入 VLESS 等代理协议,再访问 VLESS 请求里的 destination。

非法客户端一定会被直接丢弃

不是。REALITY 的关键设计之一就是把未通过验证的连接 fallback 到 target。

流量被跑光一定说明 UUID 或面板被攻破

不是。若第三方只利用 REALITY fallback 把 VPS 当开放中转,VLESS UUID、面板密码和 SSH 都可能完全没有泄漏。

学习检查

  1. REALITY 与 VLESS 分别位于哪一层?
  2. server、serverName/SNI、target 和 VLESS destination 分别是什么意思?
  3. 为什么 REALITY 不直接丢弃全部非法连接?
  4. 为什么共享 CDN target 会把 fallback 风险放大?
  5. “偷域名/偷证书”在 REALITY 语境下到底偷了什么?
  6. REALITY 为什么不能简单等同于 Domain Fronting?

参考

创建于 2026/10/2 更新于 2026/10/2
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本