
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 的特徵:
網站真實存在,且 443 埠一直開著
- 檢測方可能主動訪問這個域名,如果域名不存在或 443 不通,馬上暴露
TLS 握手響應快
- REALITY 的握手需要實時轉發到目標網站,目標越近越好
- 推薦:使用和你 VPS 同區域的大網站
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:客戶端連線超時
- 檢查防火牆:
ss -tlnp | grep 443 - 檢查 SNI 目標是否可達:
curl -I https://www.apple.com(從 VPS 上測) - 檢查 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 品牌風格