Close-up of wooden blocks spelling ’encryption’, symbolizing

REALITY 是 Xray 在 2023 年引入的傳輸協議,解決了 TLS 代理的一個根本性弱點:你的證書是假的。傳統 VLESS+TLS 方案需要一個域名和 Let’s Encrypt 證書,但這個證書本身就是特徵——沒有真實網站對應的 TLS 引數,流量特徵明顯。

REALITY 的思路完全不同:直接借用真實網站的 TLS 握手,服務端呈現給檢測方的,就是那個真實網站的 TLS 證書和握手細節,無法與正常流量區分。

REALITY 的核心原理

正常的 TLS 連線過程:

客戶端 → ClientHello(包含 SNI,比如 www.apple.com)→ 服務端
服務端 → Certificate(www.apple.com 的真實證書)→ 客戶端

REALITY 的魔法:Xray 服務端在收到 ClientHello 時,把這個握手請求轉發給真實的 www.apple.com,拿到真實證書,再原封不動地回給客戶端。

對於中間的檢測裝置來說,看到的完全是 www.apple.com 的合法 TLS 握手,無法區分。

客戶端和服務端之間的實際加密通訊,隱藏在這個握手之後,使用 Xray 自己的金鑰對(透過 shortId 驗證身份)。

優勢總結:

  • 不需要域名,不需要證書
  • TLS 指紋完全借用真實網站
  • 即使有人主動探測你的伺服器埠,得到的也是目標網站的正常響應

準備工作

  • 一臺 VPS(推薦 DMIT,CN2 GIA 延遲低)→ 註冊 DMIT
  • Xray 最新版(當前 v25.x)
  • 不需要域名和證書

服務端部署

安裝 Xray

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

生成金鑰對

xray x25519

輸出:

Private key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Public key:  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

儲存這兩個值,配置裡要用。

生成 Short ID

Short ID 用於區分不同客戶端,可以是 0-16 位的十六進位制字串:

openssl rand -hex 4    # 生成 8 位,如 55470656
openssl rand -hex 8    # 生成 16 位

服務端配置

/usr/local/etc/xray/config.json:

{
  "inbounds": [{
    "port": 443,
    "protocol": "vless",
    "settings": {
      "clients": [{
        "id": "your-uuid-here",
        "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"],
        "privateKey": "你的私鑰",
        "shortIds": ["55470656", "7a3bc239"]
      }
    }
  }],
  "outbounds": [{
    "protocol": "freedom",
    "tag": "direct"
  }]
}

生成 UUID:

xray uuid

啟動服務

systemctl enable xray
systemctl start xray
systemctl status xray

SNI(偽裝域名)選擇

SNI 是 REALITY 最關鍵的配置,直接決定你的流量能否透過檢測。

好的 SNI 的特徵:

  1. 網站真實存在,且 443 埠一直開著

    • 檢測方可能主動訪問這個域名,如果域名不存在或 443 不通,馬上暴露
  2. TLS 握手響應快

    • REALITY 的握手需要實時轉發到目標網站,目標越近越好
    • 推薦:使用和你 VPS 同區域的大網站
  3. HTTPS 流量大的網站

    • 你的流量混在大量正常流量裡,被單獨關注的機率低

推薦的 SNI:

SNI適合區域說明
www.apple.com全球Apple CDN 全球節點,響應快
www.cloudflare.com全球CF 節點遍佈全球
www.microsoft.com全球Azure CDN,穩定
itunes.apple.com全球Apple 服務,TLS 1.3
addons.mozilla.org歐美Mozilla CDN

不推薦:

  • 國內網站(www.baidu.com 等)——伺服器在國外,握手延遲高
  • 小眾網站——443 埠可能不穩定
  • 已知被大量代理使用者使用的 SNI(特徵明顯)

Short ID 的作用

Short ID 是服務端驗證客戶端身份的機制。

原理:Xray 客戶端在 ClientHello 裡的 session_id 欄位裡嵌入一個隨機值,服務端透過私鑰解密驗證,看 padding 裡是否包含合法的 Short ID。

  • 合法客戶端:服務端返回代理響應
  • 普通掃描器:服務端正常轉發到目標網站(看起來就是普通網站)

配置多個 Short ID(推薦):不同裝置用不同的 Short ID,這樣某臺裝置洩露時只需刪除對應 ID,不影響其他裝置。

"shortIds": ["55470656", "7a3bc239", "a1b2c3d4"]

Flow 選擇

REALITY 推薦用 xtls-rprx-vision:

"flow": "xtls-rprx-vision"

Vision 模式可以區分 TLS-in-TLS 流量,避免主動探測時暴露代理特徵。如果不加 flow,也能用,但抗檢測能力稍弱。

防火牆配置

# Ubuntu UFW
ufw allow 443/tcp
ufw enable

# 或者 iptables
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

建議用 443 埠,混在 HTTPS 流量裡最自然。

驗證部署

在客戶端配置好之後,測試連通性:

# 直接 curl 測試(需要客戶端配置好代理)
curl -x vless://uuid@your-vps:443?security=reality&... https://api.ipify.org

更簡單的方式:用 mihomo 或 Surge 配置好節點,訪問 whatismyip.com 確認 IP 是你的 VPS。

常見問題

Q:服務端啟動報錯 failed to read config 檢查 JSON 格式,用 jq . config.json 驗證語法。

Q:客戶端連線超時

  1. 檢查防火牆:ss -tlnp | grep 443
  2. 檢查 SNI 目標是否可達:curl -I https://www.apple.com(從 VPS 上測)
  3. 檢查 privateKey 和 publicKey 是否對應

Q:連線成功但速度慢 SNI 目標離 VPS 太遠,握手延遲高。換一個同區域的大網站作為 SNI。

Q:想用非 443 埠 可以,但容易被識別。如果用非標準埠,SNI 對應的目標也要用同樣埠:

"dest": "www.apple.com:8443",
"serverNames": ["www.apple.com"]

→ 檢視客戶端配置:mihomo / Surge 接入 REALITY → 檢視 DMIT VPS 購買指南


📷 封面圖 · Flux Schnell AI 生成 · panshi.io 品牌風格