作者:pluto 更新时间:2026-04-17
摘要
REALITY 是由 XTLS 项目(Project X)开发的新一代代理协议,旨在通过替代 TLS 来实现"无指纹"的代理通信。与 VMess 等应用层协议不同,REALITY 工作在传输层(TLS 层),通过伪装成真实 TLS 连接来对抗深度包检测(DPI)。本文从协议设计目标、密码学基础、认证机制、握手流程、安全性分析及与 VMess、Trojan 等协议的对比等维度,对 REALITY 协议进行系统性研究。
1. 背景与设计目标
1.1 历史背景
REALITY 协议诞生于 Project X/XTLS 社区对代理协议演化的深层思考。传统代理协议的演变路线如下:
- 第一代(2015-2019):VMess、Shadowsocks 等应用层加密协议,通过自定义数据格式对抗特征识别
- 第二代(2019-2021):Trojan、VLESS 等协议,通过 TLS 1.3 套壳方案提升隐蔽性
- 第三代(2023+):REALITY 协议,直接替代 TLS,消除服务端指纹
REALITY 首次发布于 2023 年初,由 XTLS 项目的核心开发者 RPRX 主导设计,致力于解决 TLS in TLS 特征被针对的问题。
1.2 核心设计目标
REALITY 协议的核心设计目标为:
消除服务端 TLS 指纹:不再向观察者展示代理服务端的 TLS 指纹特征,而是呈现指定目标网站的真实 TLS 指纹
实现"借壳"代理:无需购买域名、配置 TLS 服务器,直接指向任意目标网站(如 google.com、cdn.jsdelivr.net 等),将其作为"代理外壳"
保证前向保密性:基于 TLS 1.3 的前向保密设计,每次握手产生独立的会话密钥
对抗主动探测:通过临时证书认证、客户端版本/时间检验等机制,有效区分合法客户端与网络探测
支持后量子密码学:集成 ML-DSA-65 和 X25519-MLKEM768 等后量子算法,提前应对量子计算威胁
零开销替代 TLS:直接替代 TLS 层,无额外加密开销,性能与原生 TLS 无差异
1.3 与 VMess 的主要差异
| 特征 | VMess | REALITY |
|---|---|---|
| 工作层级 | 应用层 | 传输层(TLS 层) |
| 加密方式 | AEAD(AES-GCM、ChaCha20-Poly1305) | TLS 1.3 加密套件 |
| 握手方式 | 无状态(Client Hello 直接包含认证信息) | 标准 TLS 1.3 握手 |
| 服务端特征 | 代理服务端特征明显 | 等同于目标网站特征 |
| 证书管理 | 使用自签名证书(已被针对) | 临时生成的可信证书 |
| 前向保密性 | 依赖 VMess 协议设计 | TLS 1.3 原生保障 |
| 后量子支持 | 无 | ML-DSA-65、X25519-MLKEM768 |
2. 密码学基础
2.1 密钥派生与认证
REALITY 在认证阶段使用基于 HKDF 的密钥派生机制:
AuthKey 派生流程:
// X25519 密钥交换
SharedKey = X25519(ClientPrivateKey, ServerPublicKey)
// 使用 HKDF 派生认证密钥
AuthKey = HKDF(
hash=SHA256,
ikm=SharedKey,
salt=ClientRandom[:20],
info="REALITY"
)
其中:
ClientPrivateKey:客户端临时生成的 X25519 私钥ServerPublicKey:服务端的 X25519 公钥(在配置中存储)ClientRandom:TLS Client Hello 中的 Random 字段(32 字节)
2.2 客户端认证信息编码
客户端在 TLS Client Hello 的 Session ID 字段中嵌入认证信息。该字段在 Client Hello 中占 32 字节,编码结构如下:
+------------------+------------------+------------------+
| ClientVersion | ClientTime | ClientShortId |
| (3 bytes) | (4 bytes) | (8 bytes) |
| + Reserved (17B) | + Reserved | + Reserved |
+------------------+------------------+------------------+
加密方式:
- 明文(前 15 字节)使用 AES-128-GCM 加密
- 加密参数:
- Key:
AuthKey[:16] - Nonce:
ClientRandom[20:32](TLS Random 的后 12 字节) - Associated Data:Client Hello 报文
- Key:
字段说明:
| 字段 | 大小 | 说明 |
|---|---|---|
| ClientVersion | 3 字节 | 客户端支持的 TLS 版本(如 0x03 0x03 0x03 表示 TLS 1.3) |
| ClientTime | 4 字节 | Unix 时间戳(秒级精度) |
| ClientShortId | 8 字节 | 短身份标识,服务端使用 config.ShortIds 集合验证 |
2.3 时间与版本验证
服务端在认证时进行如下检查:
// 版本检查
if config.MinClientVer != nil && Value(ClientVer) < Value(config.MinClientVer) {
reject()
}
if config.MaxClientVer != nil && Value(ClientVer) > Value(config.MaxClientVer) {
reject()
}
// 时间偏差检查
timeDiff := now - ClientTime
if config.MaxTimeDiff > 0 && abs(timeDiff) > config.MaxTimeDiff {
reject()
}
// ShortId 检查
if !config.ShortIds[ClientShortId] {
reject()
}
此机制的目的是:
- 时间检验:防止重放攻击和暴力破解(通常设置 ±1 小时)
- 版本检验:支持服务端渐进式升级,仅接受特定版本范围的客户端
- ShortId 检验:支持多用户场景,每个用户对应一组 ShortId 集合
2.4 证书生成与签名
REALITY 服务端动态生成临时证书,使用以下方案:
方案 1:Ed25519 签名(标准方案)
1. 从 AuthKey 派生签名私钥:
SignatureKey = HMAC-SHA512(AuthKey, Ed25519PrivateKey[32:])
2. 证书内容使用 Ed25519 签名
3. 证书特性:
- 自签名(Subject = Issuer)
- 有效期:从当前时刻起 1 小时
- 密钥用途:serverAuth, clientAuth
方案 2:ML-DSA-65 签名(后量子方案)
1. 使用 ML-DSA-65(后量子数字签名)对证书签名
2. 证书结构(ML-DSA-65 签名固定 4595 字节):
- 标准 X.509 证书部分
- 最后 64 字节:HMAC 验证标签
- 倒数第 65-4659 字节:ML-DSA-65 签名
3. 验证流程:
- 客户端验证 ML-DSA-65 签名的有效性
- 验证 HMAC 标签确保证书完整性
3. TLS 1.3 握手流程
REALITY 基于 TLS 1.3 握手机制,但在多个环节进行定制化设计。
3.1 握手消息流
Client Server
| |
|-------------- Client Hello ----------------->|
| |
|<------------ Server Hello ------------------|
|<-------- Change Cipher Spec ----------------| (compatibility)
|<------- Encrypted Extensions --------|
|<----------- Certificate ------------|
|<--------- Certificate Verify --------|
|<------------ Finished -------------------|
| |
|------------ Change Cipher Spec ------------->|
|------------- Certificate (empty) ----------->|
|--------- Certificate Verify (empty) ------->|
|------------ Finished ---------------------->|
| |
|<== Encrypted Application Data ===============| |=== Encrypted Application Data ==============>|
3.2 Client Hello 处理
Client Hello 在 REALITY 中包含以下关键元素:
必需扩展:
key_share:X25519 密钥共享(标准)或 X25519-MLKEM768(后量子混合)supported_version:声明 TLS 1.3 支持signature_algorithms:支持的签名算法
特殊处理的字段:
random:前 20 字节来自系统时间戳,后 12 字节用作 Noncesession_id:32 字节,包含加密的客户端认证信息server_name:必须匹配config.ServerNames中的值
3.3 Server Hello 处理
服务端在 Server Hello 中使用以下关键参数:
ServerHello {
Version: TLS 1.2(wire format)
SupportedVersion: TLS 1.3(extension)
CipherSuite: TLS_AES_128_GCM_SHA256(或其他 TLS 1.3 套件)
KeyShare: X25519 或 X25519-MLKEM768 公钥
Random: 32 字节随机数
}
3.4 握手记录收集
REALITY 实现特殊的握手记录长度检测机制,用于识别目标网站的真实 TLS 握手行为。
记录类型:
| 索引 | 消息类型 | 说明 |
|---|---|---|
| 0 | Server Hello | 服务端第一个握手消息 |
| 1 | Change Cipher Spec | 为了兼容旧中间件的虚拟消息 |
| 2 | Encrypted Extensions | 加密的扩展信息 |
| 3 | Certificate | 服务端证书 |
| 4 | Certificate Verify | 证书验证消息 |
| 5 | Finished | 握手完成消息 |
| 6 | New Session Ticket | 会话票证(可选) |
服务端通过 GlobalPostHandshakeRecordsLens 机制存储目标网站的握手消息长度,客户端可预先加载以复现真实网站的握手行为。
4. 认证机制
4.1 双向认证流程
REALITY 实现了基于 AuthKey 的非对称认证机制:
客户端 → 服务端认证:
1. 客户端在 Session ID 中嵌入:ClientVersion, ClientTime, ClientShortId
2. 使用 AuthKey 对 Session ID 进行 AES-128-GCM 加密
3. 服务端通过 AuthKey 解密并验证字段有效性
4. 验证通过则建立 TLS 连接;验证失败则转发至目标网站(fallback)
服务端 → 客户端认证:
1. 服务端生成临时证书
2. 使用从 AuthKey 派生的私钥对证书签名
3. 客户端验证证书签名并检查签名私钥与预期 AuthKey 的对应关系
4. 证书验证通过表示连接到真实代理;否则视为目标网站或中间人
4.2 证书链攻击防护
REALITY 通过以下机制防护证书链攻击:
客户端收到证书后的判断流程:
1. 收到临时可信证书(HMAC 验证通过)
→ 连接可用,正常通信
2. 收到真证书(CA 签名有效但 HMAC 失败)
→ 进入爬虫模式(Spider Mode)
→ 发送真实 HTTP 请求至目标网站
→ 隐蔽性最高,难以识别代理行为
3. 收到无效证书(签名验证失败)
→ 发送 TLS Alert
→ 断开连接
→ 标记为中间人攻击或主动探测
4.3 回落机制
当客户端认证失败时,REALITY 实现了多层级的回落策略:
第一层回落:直接转发至目标网站
Client Hello 验证失败 → hs.c.conn = nil
→ 所有 Client Hello 数据转发至 config.Dest
→ 呈现目标网站的真实 TLS 指纹
第二层回落:Server Hello 验证
如果目标网站 Server Hello 异常
→ 立即转发所有已接收数据至客户端
→ 继续双向转发(TCP Splice)
5. 密钥交换与共享密钥
5.1 X25519 密钥交换
标准方案使用 Elliptic Curve Diffie-Hellman over Curve25519:
Client Side:
clientPrivateKey = RandomBytes(32)
clientPublicKey = X25519(clientPrivateKey, basepoint)
// Client Hello 中的 key_share 扩展
key_share = {
group: X25519,
key_exchange: clientPublicKey
}
Server Side:
serverPrivateKey = config.PrivateKey // 预配置
sharedSecret = X25519(serverPrivateKey, clientPublicKey)
安全性特性:
- 前向保密性:私钥泄露不影响历史会话
- 椭圆曲线强度:≈ 128 位对称密钥强度
- 量子安全性:无(需使用 MLKEM 混合方案)
5.2 X25519-MLKEM768 混合密钥交换
后量子混合方案集成 ML-KEM(Kyber 标准化版本):
Client Side:
// ECDH 部分
ecdh_privkey = RandomBytes(32)
ecdh_pubkey = X25519(ecdh_privkey, basepoint)
// ML-KEM 部分
(mlkem_pubkey, mlkem_seed) = ML_KEM.Keygen()
// 组合 key_share
key_share = {
group: X25519MLKEM768,
key_exchange: ecdh_pubkey || mlkem_pubkey // 64 字节
}
Server Side:
// ECDH 计算
ecdh_shared = X25519(serverPrivateKey, ecdh_pubkey)
// ML-KEM 包裹
(mlkem_ciphertext, mlkem_shared) = ML_KEM.Encaps(mlkem_pubkey)
// 组合密钥
key_exchange = mlkem_ciphertext || ecdh_pubkey // 64 字节
// 最终共享密钥
sharedSecret = ecdh_shared || mlkem_shared
安全性特性:
- 降级安全性:即使 X25519 被破坏,ML-KEM 部分仍安全
- 后量子强度:MLKEM768 ≈ 192 位对称密钥强度
- 组合大小:64 字节(32B ECDH + 32B MLKEM)
5.3 AuthKey 派生
// HKDF-SHA256 派生
PRF = HKDF(
hash: SHA256,
ikm: sharedSecret,
salt: clientRandom[:20], // 前 20 字节
info: []byte("REALITY"),
length: 32 // AuthKey 长度
)
AuthKey = PRF[:32]
6. 应用数据加密
6.1 TLS 1.3 记录加密
REALITY 使用标准 TLS 1.3 记录层加密:
加密参数:
Cipher Suite: TLS_AES_128_GCM_SHA256 (推荐)
TLS_CHACHA20_POLY1305_SHA256 (替代)
TLS_AES_256_GCM_SHA384 (高强度)
Client Write Key: HKDF-Expand(clientTrafficSecret, "key", 16)
Client Write IV: HKDF-Expand(clientTrafficSecret, "iv", 12)
Server Write Key: HKDF-Expand(serverTrafficSecret, "key", 16)
Server Write IV: HKDF-Expand(serverTrafficSecret, "iv", 12)
记录格式:
+----------+------------------+----------+
| Header | Ciphertext | Tag |
| 5 bytes | variable | 16 bytes |
+----------+------------------+----------+
Header = {
ContentType: 0x17 (Application Data)
Version: 0x0303 (TLS 1.2 wire format)
Length: len(Ciphertext) + 16
}
Ciphertext = AES-128-GCM(
key: Client/Server Write Key,
nonce: IV ⊕ SeqNum,
plaintext: ApplicationData,
aad: Header
)
6.2 加密序列号管理
// 序列号字段
out.seq // 8 字节,大端序,从 0 开始递增
// Nonce 计算
nonce = out.iv ⊕ out.seq // 12 字节异或
// 每条消息后递增
out.seq++
7. 安全性分析
7.1 前向保密性
REALITY 的前向保密性分析:
✅ 强前向保密
- 每个连接独立的 X25519 临时私钥
- 服务端私钥泄露不影响历史会话
- 符合 TLS 1.3 RFC 8446 要求
⚠️ AuthKey 泄露风险
- AuthKey 用于客户端认证但不是会话密钥
- 若 AuthKey 泄露,攻击者可伪造客户端但无法解密应用数据
- 应用数据加密密钥独立于 AuthKey 派生
7.2 对主动探测的防护
防护机制:
时间检验:
- ClientTime 必须在 ±MaxTimeDiff 范围内(通常 1-3 小时)
- 防止探测者使用过期的 Client Hello 重放
版本检验:
- ClientVersion 必须在 [MinClientVer, MaxClientVer] 范围内
- 支持服务端渐进式升级客户端版本要求
ShortId 检验:
- ClientShortId 必须在 config.ShortIds 集合中
- 支持多用户隔离,每个用户对应特定 ShortId 集合
限制攻击者的尝试空间:
- ShortId 空间:2^64(实际使用 4-8 个)
- 时间窗口:±MaxTimeDiff(通常 3600 秒)
- 版本范围:通常 3-5 个版本
即使暴力破解:
- 尝试次数 ≈ 8 × 7200 = 57,600 次
- 实际网络环境中探测成本极高
7.3 对证书链攻击的防护
攻击场景 1:中间人替换证书
正常流程:
Client ← [临时证书] ← Server
- HMAC 验证通过 → 正常通信
中间人攻击:
Client ← [真证书] ← Attacker ← [真证书] ← Target
- HMAC 验证失败 → 进入爬虫模式
- 发送真实 HTTP 请求至真实目标
- 获得真实 HTTP 响应
- 完全隐蔽,无法识别代理行为
防护效果:
- 无法通过证书链被迫升级攻击
- 中间人只能两种选择:1) 转发真实连接 2) 中断连接
- 两种选择都无法识别代理
7.4 密码学强度评估
| 组件 | 算法 | 强度 | 威胁 |
|---|---|---|---|
| 密钥交换 | X25519 | 128 bits | 古典计算机:安全;量子计算机:可破解(20 年后) |
| 应用加密 | AES-128-GCM | 128 bits | 已知最优攻击 $2^{96}$ |
| 哈希(HKDF) | SHA-256 | 256 bits | 安全 |
| 签名(Ed25519) | Curve25519 + SHA-512 | 128 bits | 安全 |
| 后量子密钥交换 | X25519-MLKEM768 | 192 bits | 抗量子计算机 |
| 后量子签名 | ML-DSA-65 | 192 bits | 抗量子计算机 |
长期安全性(> 10 年):
- 推荐启用 ML-DSA-65 签名选项
- 定期更新 MLKEM768 参数(若有新突破)
- 监控密码学研究进展
7.5 已知限制
1. 临时证书泄露风险
若攻击者获得 AuthKey:
- 可以生成有效的临时证书
- 但无法解密应用数据
- 无法伪造会话
防护:
- AuthKey 仅存储在内存,不持久化
- 连接断开后立即销毁
- 不同连接使用不同 AuthKey
2. 时间同步依赖
ClientTime 检验依赖客户端与服务端时间同步:
- 允许偏差范围(通常 ±1 小时)
- 若客户端时钟严重错误,连接失败
- 无法用于离线场景
3. 目标网站依赖
REALITY 的隐蔽性完全依赖目标网站选择:
- 若选择冷门网站 → 流量异常明显
- 若选择热门网站 → 与常规用户流量难以区分
- 目标网站关闭会导致代理不可用
8. 配置参数详解
8.1 服务端配置
{
"streamSettings": {
"security": "reality",
"realitySettings": {
"show": false, // 调试输出开关
"dest": "google.com:443", // 目标网站
"serverNames": [
"www.google.com",
"mail.google.com"
], // 允许的 SNI 列表
"privateKey": "...", // X25519 私钥(base64)
"maxTimeDiff": 3600000000000, // 时间偏差上限(纳秒)
"minClientVer": [0, 0, 0], // 最小客户端版本
"maxClientVer": [0, 0, 29], // 最大客户端版本
"shortIds": [
"0123456789abcdef", // 8 字节 ShortId(16 进制)
"fedcba9876543210"
],
"mldsa65Key": "...", // ML-DSA-65 私钥(可选)
"limitFallback": {
"bytesPerSec": 0,
"burstBytesPerSec": 0
} // 回落限流
}
}
}
参数说明:
dest:REALITY 转发的目标网站,格式host:portserverNames:服务端接受的 SNI 值,支持多个privateKey:X25519 服务端私钥(生成:xray uuid+ 转换)maxTimeDiff:客户端时间偏差容限(推荐 1-2 小时,单位纳秒)shortIds:客户端 ShortId 白名单,支持 1-8 条mldsa65Key:可选的 ML-DSA-65 私钥,启用后使用后量子签名
8.2 客户端配置
{
"streamSettings": {
"security": "reality",
"realitySettings": {
"show": false, // 调试输出开关
"fingerprint": "chrome", // uTLS 指纹(chrome, firefox 等)
"serverName": "www.google.com", // 目标 SNI
"password": "...", // 服务端公钥(base64)
"shortId": "0123456789abcdef", // 8 字节 ShortId
"spiderX": "/", // 爬虫初始路径
"mldsa65Verify": "..." // 服务端 ML-DSA-65 公钥(可选)
}
}
}
参数说明:
fingerprint:客户端 TLS 指纹伪装(chrome 最普遍)serverName:连接的 SNI,须在服务端serverNames中password:服务端 X25519 公钥,用于派生 AuthKeyshortId:须在服务端shortIds中spiderX:进入爬虫模式时的初始 HTTP 路径mldsa65Verify:验证服务端 ML-DSA-65 签名(启用后量子认证)
9. 与其他协议的对比
9.1 REALITY vs VMess
| 特征 | REALITY | VMess |
|---|---|---|
| 基础 | TLS 1.3 | 自定义应用层协议 |
| 工作层 | 传输层 | 应用层 |
| 服务端特征 | 不可检测(伪装目标网站) | 独特特征(已被针对) |
| 证书管理 | 动态生成 + 临时认证 | 自签名证书(已废弃) |
| 前向保密 | TLS 1.3 原生 ✓✓✓ | 协议级别 ✓✓ |
| 性能开销 | 无(替代 TLS) | 应用层加密开销 ✓✓ |
| 握手延迟 | 1-RTT | 0-RTT(无握手) |
| 后量子支持 | ✓ (MLKEM768 + ML-DSA-65) | ✗ |
| 部署难度 | 简单(指向任意网站) | 中等(需要自己的 TLS 服务) |
| 兼容性 | 需要专门客户端支持 | 广泛支持(V2Ray, Xray 等) |
选择建议:
- 隐蔽性优先 → REALITY
- 轻量级/快速 → VMess(但已不安全)
- 通用性优先 → VMess 或 VLESS
9.2 REALITY vs Trojan
| 特征 | REALITY | Trojan |
|---|---|---|
| 基础 | 改进的 TLS 1.3 | 标准 TLS 1.2/1.3 |
| 认证方式 | 客户端嵌入 Client Hello | 类似 HTTP Basic Auth |
| 服务端指纹 | 完全伪装目标网站 | 代理指纹明显 |
| 主动探测防护 | 时间/版本/ShortId 检验 | 较弱 |
| 回落机制 | 三层回落 | 简单回落至 HTTP 404 |
| 后量子密码学 | ✓ 支持 | ✗ 不支持 |
| 配置复杂度 | 中等(需要理解参数) | 简单 |
| 易用性 | 好(Xray 原生支持) | 很好(多客户端支持) |
对比结论:
- Trojan 是传统代理的代表,配置简单但防护有限
- REALITY 是新一代设计,防护全面但需要理解其机制
9.3 REALITY vs VLESS-XTLS-Vision
| 特征 | REALITY | VLESS-XTLS-Vision |
|---|---|---|
| 基础 | 替代 TLS | XTLS 拦截 TLS 记录 |
| 加密层级 | 单层(TLS) | 双层(VLESS + TLS) |
| CPU 占用 | 低 | 极低(零拷贝加速) |
| 服务端指纹 | 对标准 TLS 无可检测特征 | 仍有应用层特征 |
| VPS 要求 | 标准 VPS(无特殊要求) | 需要支持 uTLS 的系统 |
| 性能对比 | 高 | 更高(Vision 优化) |
| 生态成熟度 | 新兴(持续发展) | 稳定成熟 |
实际应用:
- 若需要最高隐蔽性 → REALITY
- 若需要最高性能 → VLESS-XTLS-Vision
- 若综合考量 → VLESS-XTLS-Vision(成熟稳定)
10. 已知问题与限制
10.1 技术限制
问题 1:时间同步依赖
现象:连接提示"ClientTime 超出范围"
原因:客户端系统时间与服务端相差 > MaxTimeDiff
解决:同步系统时间(NTP)
问题 2:目标网站不可用
现象:代理连接中断,无法回落
原因:目标网站宕机或网络异常
解决:更换目标网站(推荐使用 CDN 服务)
问题 3:重复 ShortId 检验失败
现象:某些特定 ShortId 客户端连接失败
原因:ShortId 与其他用户冲突或被污染
解决:更换 ShortId 或增加 MaxTimeDiff 限制
10.2 实现限制
限制 1:握手记录预检测
REALITY 需要预先检测目标网站的握手消息长度
- 首次部署需要运行专用工具采集目标网站特征
- 目标网站握手行为变化需要重新采集
- 部分云环境可能不支持长连接探测
限制 2:与代理协议的组合
REALITY 仅支持与特定协议组合:
- ✓ VLESS + XTLS-Vision (推荐)
- ✓ VLESS-gRPC (可用)
- ✗ VMess (特征明显)
- ✗ Shadowsocks (不兼容)
11. 最佳实践
11.1 服务端部署
步骤 1:生成密钥对
# 生成 X25519 私钥
xray uuid | sha256sum # 或使用专门工具
# 输出格式:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 计算公钥(通常由 xray 自动计算)
步骤 2:选择目标网站
推荐目标网站特性:
- 位于 GFW 域外且支持 TLS 1.3、HTTP/2
- 流量大且用户多(便于混淆)
- IP 地址稳定(避免 CDN 频繁变化)
推荐目标:
- google.com(全球用户最多)
- cdn.jsdelivr.net(建站者常用)
- www.microsoft.com(企业信任度高)
步骤 3:配置参数
// 严格模式(高安全)
{
"maxTimeDiff": 1800000000000, // ±30 分钟
"minClientVer": [0, 0, 20], // 禁用旧版本
"maxClientVer": [0, 0, 29], // 限制最新版本
"shortIds": ["0123456789abcdef"] // 单用户
}
// 宽松模式(易用性优先)
{
"maxTimeDiff": 3600000000000, // ±1 小时
"minClientVer": [0, 0, 0],
"maxClientVer": [255, 255, 255],
"shortIds": ["0123456789abcdef", "fedcba9876543210", "..."]
}
11.2 客户端连接
调试技巧:
启用调试输出:
realitySettings: {
"show": true, // 输出详细日志
}
查看日志:
- "REALITY remoteAddr: ..." 握手地址
- "ClientVer: ..." 客户端版本
- "ClientTime: ..." 时间检验
- "hs.c.conn == conn" 认证结果(true 成功)
常见错误排查:
错误:authentication failed or validation criteria not met
原因:
1. ClientTime 超出范围 → 同步系统时间
2. ShortId 不在白名单 → 检查配置
3. 客户端版本不匹配 → 检查 minClientVer/maxClientVer
解决:逐项检查上述条件
错误:server name mismatch
原因:serverName 不在服务端 serverNames 中
解决:确保客户端 serverName 在服务端配置中
12. 总结
12.1 优势总结
✅ 服务端无指纹:完全伪装为任意目标网站
✅ 防护全面:时间、版本、ShortId 多层防护
✅ 后量子就绪:集成 MLKEM768 和 ML-DSA-65
✅ 部署灵活:无需自有域名和证书
✅ 性能优异:无加密开销,替代原生 TLS
✅ 安全创新:证书链攻击无效,爬虫模式隐蔽
12.2 劣势与限制
❌ 时间依赖:客户端需要精确的系统时间
❌ 目标依赖:代理可用性依赖目标网站
❌ 生态有限:相比 VMess/Trojan 生态尚未成熟
❌ 学习曲线:需要理解多个密码学概念
❌ 握手预检:部分环境部署复杂
12.3 未来展望
即将推出的功能:
预先构建模式(Pre-built Mode)
- 提前采集目标网站握手特征
- 无需实时探测,提升速度
0-RTT 支持
- 结合 TLS 1.3 Early Data
- 消除握手延迟
QUIC 支持
- 扩展至 QUIC 层
- 支持 0-RTT 和连接迁移
多目标策略
- 支持同时指向多个目标网站
- 动态选择策略优化
12.4 推荐使用场景
| 场景 | 推荐度 | 原因 |
|---|---|---|
| 规避 DPI/主动探测 | ★★★★★ | 无可检测特征,防护完全 |
| 高隐蔽性部署 | ★★★★★ | 伪装真实网站流量 |
| 长期稳定运营 | ★★★★☆ | 需要定期维护目标网站 |
| 资源受限环境 | ★★★★☆ | 无加密开销,性能优 |
| 轻量级应用 | ★★★☆☆ | 握手延迟较长 |
| 多协议混合 | ★★☆☆☆ | 仅建议与 VLESS 组合 |
12.5 安全建议
定期更新
- 关注 XTLS/Xray 项目更新
- 及时采用新的后量子算法参数
多用户隔离
- 为每个用户配置独立 ShortId
- 定期轮换 ShortId 集合
时间保持同步
- 服务端和客户端启用 NTP
- 建议使用公共 NTP 服务器
目标网站选择
- 避免使用冷门/小型网站
- 定期检查目标网站可用性
日志监控
- 启用调试输出分析连接行为
- 识别异常流量模式
参考资源
本文档基于 REALITY 协议源代码和 RFC 标准编写,内容准确性以官方文档为准。