本页目录

代理协议对比

代理协议的演进反映了审查与反审查的军备竞赛——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 CONNECTTCP极低
SOCKS5TCP/UDP极低
ShadowsocksTCP/UDPAEAD (AES/ChaCha)可选 obfsmux (smux)低 (AEAD 可被识别)
VMessTCPAEAD可选 obfsmux
TrojanTCP+TLSTLS伪装成 HTTPS (CDN fallback)mux中高 (TLS 握手可探测)
VLESS+REALITYTCP+TLSTLS+XTLS Vision伪装成真实网站 (microsoft.com)mux (XUDP)高 (主动探测无效)
Hysteria2UDP (QUIC)QUIC+TLS 1.3salamander 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):

REALITY 伪装握手:借用 microsoft.com 的真实证书 REALITY 服务器:不用自己的 SNI 和证书 Client 发往 REALITY 服务器的 TLS ClientHello SNI = "www.microsoft.com" 偷取 microsoft.com 的证书 和 ServerHello?(实时转发?) 不!REALITY 服务器持有 microsoft.com 真正证书(主动备案获取) GFW 主动探测:连 REALITY 的 IP 看到 microsoft.com 的标准 TLS 响应 与直接连 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