本页目录
代理协议对比
代理协议的演进反映了审查与反审查的军备竞赛——Shadowsocks 的 AEAD 加密被深度包检测识别后,Trojan 伪装成 HTTPS,VLESS+REALITY 伪装成真实网站,Hysteria2 在 QUIC 上消除 TLS 指纹。每一代都在让代理流量更难与正常流量区分。
概述
代理协议的演进反映了审查与反审查的军备竞赛。Shadowsocks(2012)用 AEAD 加密绕过封锁,后被深度包检测识别。Trojan(2019)伪装成标准 HTTPS,难以区分。VLESS+REALITY(2023)伪装成真实存在的网站(microsoft.com),主动探测无效。Hysteria2(2024)在 QUIC 上消除 TLS 指纹,目前最难检测。
协议栈总览
| 传输 | 加密 | 伪装 | 多路复用 | 抗封锁 | |
|---|---|---|---|---|---|
| HTTP CONNECT | TCP | 无 | 无 | 否 | 极低 |
| SOCKS5 | TCP/UDP | 无 | 无 | 否 | 极低 |
| Shadowsocks | TCP/UDP | AEAD (AES/ChaCha) | 可选 obfs | mux (smux) | 低 (AEAD 可被识别) |
| VMess | TCP | AEAD | 可选 obfs | mux | 中 |
| Trojan | TCP+TLS | TLS | 伪装成 HTTPS (CDN fallback) | mux | 中高 (TLS 握手可探测) |
| VLESS+REALITY | TCP+TLS | TLS+XTLS Vision | 伪装成真实网站 (microsoft.com) | mux (XUDP) | 高 (主动探测无效) |
| Hysteria2 | UDP (QUIC) | QUIC+TLS 1.3 | salamander obfs (anti-fingerprint) | QUIC native | 极高 (无 TLS 指纹) |
各协议设计要点
Shadowsocks → AEAD 指纹问题
Shadowsocks 的 AEAD cipher (AES-128-GCM) 在握手阶段产生的密文有固定模式 (salt + encrypted payload)。GFW 可以通过主动探测 (发一个 Shadowsocks 握手 → 期望收到特定 size 的响应) 识别。2020 年后大量 Shadowsocks 服务器被封锁。
VMess → 自定义协议
使用自定义的加密协议而非标准 TLS。GFW 通过深度包检测 (DPI) 识别 VMess 的流量特征 (非 TLS 的加密数据流)。配合 WebSocket + CDN 中转可以混淆。
Trojan → TLS 伪装
Trojan 模仿 HTTPS: 握手阶段是标准 TLS (SNI 指向一个正常网站),GFW 看到的是"普通 HTTPS 连接"。但主动探测 (GFW 发 ClientHello → Trojan 服务器返回异常 Certificate) 可能被识别。
VLESS+REALITY → 完全伪装
VLESS 移除了 UUID 验证,由 TLS+XTLS Vision 提供加密和流控。REALITY 将 TLS 握手伪装成访问一个真实存在的网站 (如 www.microsoft.com):
Hysteria2 → 无指纹 QUIC
QUIC 本身是无 TLS 指纹可识别的 (不像 TCP+TLS 的固定 byte pattern)。Hysteria2 加 salamander obfs 把 QUIC 包的 header 做混淆 → 不匹配 QUIC 标准 → 无法用 QUIC detector 识别。
参考
- REALITY: github.com/XTLS/REALITY
- Hysteria2: v2.hysteria.network/docs
- mihomo: wiki.metacubex.one/config/proxies
Keywords: Shadowsocks, VMess, Trojan, VLESS, REALITY, Hysteria2, AEAD, obfs, salamander, QUIC fingerprint