最后更新于:2026年06月

Reality 协议
Reality 协议深度解析

Reality 协议是 2023 年以来科学上网领域最重要的技术突破。它彻底解决了传统代理协议依赖域名和证书的缺陷,让流量真正做到"看不见、摸不着"。在 2026 年的网络环境下,Reality 已经成为对抗深度包检测(DPI)的首选方案。

本文将深入剖析 Reality 的工作原理,服务端和客户端的完整配置,以及在 sing-box 和 Xray 中的具体实现。


🔬 Reality 协议原理

传统 TLS 代理的问题

在了解 Reality 之前,我们需要理解传统 TLS 代理(如 VLESS + WebSocket + TLS)为什么越来越容易被识别。

PLAINTEXT
传统 TLS 代理流量特征:

客户端 ─── TLS 握手 ───► 你的 VPS (v2ray/Xray)
                            │
                    证书是你的域名
                    ❌ SNI = 你的域名
                    ❌ 证书 = 你的域名
                            │
                    ◄─── TLS 响应 ────
                    
问题:防火墙知道你在连接谁的服务器

关键弱点:SNI(Server Name Indication)

在 TLS 握手的第一个包(ClientHello)中,客户端会明文声明要访问的域名。这个域名就是 SNI。

PLAINTEXT
ClientHello 包的明文内容:
  - SNI: your-vps-domain.com  ← 防火墙看到这里就知道你在翻墙
  - 证书: 你的域名发行的证书

Reality 的核心思想

Reality 的解决方案简单而巧妙:借用他人网站的证书和 SNI,让你的流量看起来像是在访问 Apple、Microsoft 等知名网站

PLAINTEXT
Reality 流量特征:

客户端 ─── TLS 握手 ───► 你的 VPS (Reality)
                            │
                    证书 = apple.com 的真实证书
                    SNI = www.apple.com  ← 防火墙看到的是苹果官网
                    public_key = 你的 VPS 持有私钥
                            │
                    ◄─── TLS 响应(苹果网站内容)───

结果:防火墙以为你在访问 Apple 官网

核心机制:

  1. 你选择一个目标网站(如 www.apple.com)作为流量伪装
  2. 你配置 VPS 生成一对密钥(public_key / private_key)
  3. 客户端使用 public_key 发起连接
  4. VPS 通过 private_key 验证身份,然后解密并处理流量
  5. 对外显示的 TLS 特征完全等同于目标网站

Reality vs 其他方案对比

特性 Reality VLESS+WebSocket+TLS Trojan+TLS Shadowsocks
SNI 隐藏 ✅ 完全隐藏 ❌ 暴露域名 ❌ 暴露域名 ❌ 暴露域名
证书自签 ❌ 无需证书 ✅ 需要 ✅ 需要 ❌ 不需要
抗 DPI ⭐⭐⭐⭐⭐ 极强 ⭐⭐⭐ 中等 ⭐⭐⭐ 中等 ⭐⭐⭐ 弱
配置复杂度 中等
性能 ⭐⭐⭐⭐⭐ XTLS ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
生态成熟度 ⭐⭐⭐⭐ 成熟 ⭐⭐⭐⭐⭐ 成熟 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐

⚙️ 服务端配置(Xray-core)

方式一:X-UI 面板配置(推荐新手)

X-UI 是最流行的 Xray 管理面板,支持一键启用 Reality。

1. 安装 X-UI

BASH
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

2. 面板配置

  1. 访问 http://你的VPS:2053 进入面板
  2. 点击 入站列表 → 添加入站
  3. 选择协议:VLESS
  4. 传输配置:
    • 网络:tcp
    • 传输伪装:xtls-rprx-vision
    • 启用 Reality:
  5. 目标服务器:www.apple.com
  6. 点击 保存

X-UI 会自动生成公钥(public_key)和短 ID(short_id),供客户端使用。

方式二:手动配置(Xray JSON)

1. 生成密钥对

BASH
# 在 VPS 上安装 xray
bash -c 'bash <(curl -L https://github.com/XTLS/Xray-core/releases/latest/download/install.sh)'

# 生成密钥对
xray x25519

# 输出示例:
# Private key: YRPrxqOjwJBDsJjqWMHMAVUUWTTqHN-sLNTCQgW80nA
# Public key:  CWvygn0MVDXyJJM5q7pTHMJ7p_PCMIIx_sLNTCQgW80nA

2. 配置 Xray JSON

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.apple.com:443",
          "xver": 0,
          "serverNames": [
            "www.apple.com",
            "www.microsoft.com",
            "www.google.com"
          ],
          "privateKey": "你的私钥",
          "shortIds": [""]
        }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    }
  ]
}

参数详解:

参数 说明 示例
dest 目标网站(用于伪装) www.apple.com:443
serverNames 允许客户端使用的 SNI 列表 ["www.apple.com"]
privateKey 生成的私钥 YRPrxqOjwJBDs...
shortIds 短 ID,用于多用户区分 [""]["abc123"]

方式三:sing-box 服务端配置

如果使用 sing-box 作为服务端:

JSON
{
  "inbounds": [
    {
      "type": "vless",
      "listen": "0.0.0.0",
      "listen_port": 443,
      "tls": {
        "enabled": true,
        "server_name": "www.apple.com",
        "reality": {
          "enabled": true,
          "public_key": "客户端持有的公钥",
          "short_id": ""
        }
      }
    }
  ]
}

📱 客户端配置

v2rayN 配置

  1. 下载安装:从 GitHub 下载最新版
  2. 添加服务器
    • 协议:VLESS
    • 地址:你的 VPS IP
    • 端口:443
    • 用户 ID(UUID):与服务端一致
    • 流控(Flow):xtls-rprx-vision
    • 传输:tcp
    • 安全:reality
    • SNI:www.apple.com
    • 指纹:chromerandomized
    • 公共密钥:服务端生成的公钥
    • 短 ID:留空或与服务端一致

Clash Meta 配置

YAML
proxies:
  - name: "Reality-Apple"
    type: vless
    server: your-vps-ip
    port: 443
    uuid: your-uuid
    network: tcp
    tls: true
    servername: www.apple.com
    reality-opts:
      public-key: your-public-key
      short-id: ""
    client-fingerprint: chrome
    udp: true

sing-box 客户端配置

JSON
{
  "outbounds": [
    {
      "type": "vless",
      "tag": "reality-proxy",
      "server": "your-vps-ip",
      "server_port": 443,
      "uuid": "your-uuid",
      "flow": "xtls-rprx-vision",
      "tls": {
        "enabled": true,
        "server_name": "www.apple.com",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        },
        "reality": {
          "enabled": true,
          "public_key": "your-public-key",
          "short_id": ""
        }
      }
    }
  ]
}

🎯 目标网站选择指南

优质目标网站特征

选择伪装目标时,应该考虑:

特征 要求 原因
证书有效 证书未过期 TLS 握手必须成功
域名稳定 长期不换域名 减少维护成本
流量大 访问量大 不易被单独标记
支持 TLS 1.3 启用 TLS 1.3 更好的性能和安全性
IP 稳定 服务器 IP 固定 避免 IP 变化导致握手失败

推荐目标网站

首选(推荐程度由高到低):

目标网站 SNI 推荐原因
www.apple.com www.apple.com 证书稳定,流量极大,IP 固定
www.microsoft.com www.microsoft.com 同上
www.google.com www.google.com 流量大,但证书管理较复杂
www.amazon.com www.amazon.com 流量大,IP 稳定
www.cloudflare.com www.cloudflare.com CDN 类网站,IP 多但稳定

备选目标:

目标网站 说明
www.bing.com 微软系,和 Apple 类似
www.linkedin.com 微软收购,企业级证书
www.office.com 同上

多目标配置

Reality 支持配置多个目标网站,增加混淆程度:

JSON
"realitySettings": {
  "serverNames": [
    "www.apple.com",
    "www.microsoft.com",
    "www.google.com"
  ],
  "dest": "www.apple.com:443"
}

客户端可以从 serverNames 列表中选择一个作为 SNI,但 dest 必须与实际伪装目标一致。


🔍 常见问题排查

问题 1:TLS 握手失败

PLAINTEXT
表现:客户端连接后立即断开,日志显示 TLS 握手失败

排查步骤:

BASH
# 1. 检查 VPS 端口是否开放
telnet your-vps-ip 443

# 2. 检查目标网站是否可达(从 VPS 上)
curl -I https://www.apple.com

# 3. 检查 xray 是否正常运行
systemctl status xray
journalctl -u xray -f

# 4. 检查密钥是否匹配
# 公钥和私钥必须是一对生成的

问题 2:SNI 不匹配

PLAINTEXT
表现:日志显示 "invalid SNI" 或 "server name mismatch"

原因:客户端 SNI 与服务端 serverNames 列表不匹配

解决

问题 3:VLESS Flow 不支持

PLAINTEXT
表现:客户端报错 "flow not supported" 或 "xtls-rprx-vision not supported"

原因

解决

问题 4:连接成功但无法上网

PLAINTEXT
表现:握手成功,但浏览器无法访问

排查步骤:

BASH
# 1. 检查 VPS 防火墙
sudo ufw status
sudo iptables -L -n

# 2. 检查 DNS 是否污染
dig www.google.com

# 3. 检查路由规则
# 确保 outbound 是 freedom(直连)或正确的代理

问题 5:X-UI 面板 Reality 选项灰色不可点击

原因:X-UI 版本过低

解决

BASH
# 更新 X-UI 到最新版本
x-ui update
# 或重新安装
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

⚡ 进阶优化

1. 多用户配置

Reality 支持通过 short_id 区分不同用户:

JSON
"realitySettings": {
  "privateKey": "你的私钥",
  "shortIds": ["user1", "user2", ""],
  "serverNames": ["www.apple.com"],
  "dest": "www.apple.com:443"
}

2. 动态端口

使用回落(fallback)将不同端口的流量分发到不同服务:

JSON
{
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [{"id": "uuid", "flow": "xtls-rprx-vision"}]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "dest": "www.apple.com:443",
          "serverNames": ["www.apple.com"],
          "privateKey": "私钥",
          "shortIds": [""]
        }
      }
    },
    {
      "listen": "0.0.0.0",
      "port": 80,
      "protocol": "vless",
      "settings": {"clients": [{"id": "uuid"}]},
      "streamSettings": {
        "network": "tcp",
        "tcpSettings": {
          "fallbacks": [
            {"dest": "127.0.0.1:8080"}
          ]
        }
      }
    }
  ]
}

3. 伪装网站与 CDN 联动

将目标网站配置为 Cloudflare 加速的域名,可以进一步提升速度和稳定性:

JSON
"realitySettings": {
  "dest": "www.apple.com:443",
  "serverNames": [
    "www.apple.com",
    "apple.com",
    "www.icloud.com"
  ]
}

📚 完整配置模板

Xray 服务端完整配置

JSON
{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "your-uuid-here",
            "flow": "xtls-rprx-vision",
            "email": "mainuser@example.com"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "www.apple.com:443",
          "xver": 0,
          "serverNames": [
            "www.apple.com",
            "www.microsoft.com"
          ],
          "privateKey": "your-private-key-here",
          "shortIds": [
            "",
            "user1",
            "user2"
          ]
        }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"],
        "routeOnly": false
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ]
}

v2rayN 客户端配置参数

PLAINTEXT
协议:VLESS
地址:your-vps-ip
端口:443
UUID:your-uuid-here
流控(Flow):xtls-rprx-vision
传输:tcp
安全:reality
SNI:www.apple.com
指纹:chrome
Public Key:your-public-key-here
Short ID:(留空)

🎓 下一步学习


结语

Reality 协议是科学上网领域的一项里程碑式技术。它用最简单的思路解决了最复杂的问题:与其费尽心思伪装流量,不如直接借用真实网站的流量特征

总结要点:

掌握 Reality,你就拥有了穿透最严格网络限制的能力。配合优质的目标网站伪装,你的流量将如同水消失在水中。

愿你在网络世界中自由穿行!🚀

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/reality-deep-dive/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。