本文从技术角度讲解开源代理协议的设计思路,仅供学习与合法的网络研究使用,请遵守所在地的法律法规。
一个被忽略的前提:对抗的不是「加密」,而是「识别」
很多人以为代理的关键是「把流量加密」。可 HTTPS 早就把内容加密了,真正的难点在于:审查系统(DPI,深度包检测)根本不需要解密你的内容,只要能识别出「这是一条代理连接」,就能直接封锁。
所以代理协议这些年的演进,主线只有一条:让自己的流量看起来和正常 HTTPS 没有区别,甚至让主动探测也分辨不出来。抓住这条主线,VLESS、REALITY、CDN 就都串起来了。
VLESS:做减法的传输协议
VLESS 是 Xray(Project X)项目的核心传输协议,可以理解为前代 VMess 的「轻量化继任者」。
它最反直觉的一点是:VLESS 本身不加密。
- VMess 自带一套加密和基于时间的认证(alterID),不仅有性能开销,加密后的流量还带有可被统计识别的「指纹」。
- VLESS 把加密这件事彻底交给传输层的 TLS,自己只用一个 UUID 做身份校验。于是更轻、更快、特征更少。
代价是:VLESS 几乎总要和 TLS 搭配(VLESS + TLS);再配合 XTLS Vision 流控,还能避免「TLS 套 TLS」的双重加密开销。
一句话:VLESS 负责「传」,TLS 负责「伪装成 HTTPS」。
REALITY:借用一张「别人家的门面」
VLESS + TLS 听起来很完美,但 TLS 这一层有个老大难——证书和域名:
- 你需要一个自己的域名加证书;
- TLS 握手时的 SNI、证书信息都会暴露「这台服务器在自建服务」;
- 审查方可以主动探测:主动连上你的端口,发现证书可疑、或者背后没有真实网站,就判定为代理并封锁。
REALITY 的思路非常巧妙:不再用你自己的证书,而是「借用」一个真实大网站的握手。
工作方式大致是:
- 客户端发起握手时,SNI 填一个真实存在的大站(比如
www.microsoft.com); - 持有正确密钥的客户端,服务器认出来,走代理;
- 对没有密钥的主动探测者,服务器把它透明转发到那个真实网站——探测方拿到的是微软真实的证书和真实页面,看不出任何破绽。
这样一来:不需要自己的域名和证书;TLS 指纹就是真实大站的指纹;主动探测也打不穿,因为打过去看到的是真网站。
服务端配置的关键部分长这样(Xray):
{
"protocol": "vless",
"settings": {
"clients": [{ "id": "你的-UUID", "flow": "xtls-rprx-vision" }],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "www.microsoft.com:443",
"serverNames": ["www.microsoft.com"],
"privateKey": "服务端私钥",
"shortIds": [""]
}
}
}
dest / serverNames 就是「借用」的目标网站,privateKey 与客户端的公钥配对完成认证。
CDN:把源站 IP 藏起来
REALITY 解决了「流量特征」和「主动探测」,但还留着一个软肋:你的服务器 IP 是直连暴露的。这个 IP 一旦被盯上,可以直接按 IP 封。
CDN(如 Cloudflare)提供了另一条路:
- 客户端连接的是 CDN 的 IP,CDN 再把流量回源到你的服务器;
- 审查方看到的只是 CDN 那一大片共享 IP,没法整片封(否则会误伤大量正常网站);
- 你的真实源站 IP 被藏在 CDN 背后。
CDN 方案通常长这样:VLESS + WebSocket + TLS,因为 CDN 主要代理 HTTP / WebSocket 流量。
这里有个关键认知:REALITY 和 CDN 基本是互斥的。CDN 会在它那一端终结(解密)TLS,而 REALITY 要求真实的 TLS 握手原样到达你自己的服务器。所以它们是「两条不同的路线」,不是叠加关系。
怎么选:REALITY vs CDN
| 维度 | VLESS + REALITY | VLESS + WS + CDN |
|---|---|---|
| 域名 / 证书 | 不需要 | 需要域名(证书可由 CDN 提供) |
| 抗主动探测 | 强(探测看到的是真网站) | 一般 |
| 源站 IP | 直连暴露,可能被封 IP | 藏在 CDN 后,较难封 |
| 延迟 / 速度 | 直连,低延迟 | 多一跳,延迟更高 |
| 隐私 | 流量不经过第三方 | CDN 能看到(它终结了 TLS) |
简单记:
- 想要低延迟、强抗探测,且不怕换 IP → 选 REALITY;
- 源站 IP 容易被封、希望藏住服务器 → 选 CDN(WS + TLS);
- 进阶玩家也会两套并存,按网络环境随时切换。
小结
- 代理的核心矛盾是「不被识别」,而不是「加密」;
- VLESS 做减法,把加密交给 TLS,自己只管轻量传输;
- REALITY 用「冒用真实网站握手」解决了证书 / 域名和主动探测的难题;
- CDN 换个思路,用共享 IP 藏住源站,代价是延迟和隐私。
三者不是谁取代谁,而是针对「识别」与「封锁」的不同侧面,各自补上一块拼图。