Trojan 协议是什么:伪装成 HTTPS 的代理方案
一句话回答:Trojan 是一种把代理流量伪装成标准 HTTPS 流量的协议——它不发明自己的加密,而是直接使用真实的 TLS,让代理连接与普通网页浏览在外观上完全一致。
设计哲学:最好的伪装是「不伪装」
Shadowsocks 一类协议的思路是把流量变成随机噪声,但「一段谁也认不出的噪声」本身就很显眼。Trojan 的作者提出了相反的思路:与其把流量藏起来,不如让它变成最常见的流量。
互联网上占比最高的加密流量就是 HTTPS(底层是 TLS)。Trojan 直接复用完整、真实的 TLS——真域名、真证书、真握手,不做任何修改。从外部观察,一条 Trojan 连接就是一次普通的 HTTPS 访问,没有额外特征可供识别。这也意味着 Trojan 协议本身极其简单:TLS 建立后,里面只传一个密码哈希和目标地址,剩下的就是转发数据。
工作流程:验证失败就「变成」真网站
Trojan 最巧妙的设计在于对探测的处理:
- 客户端与服务器完成标准 TLS 握手;
- 客户端发送密码哈希;
- 密码正确:服务器进入代理模式,开始转发流量;
- 密码错误或根本不是 Trojan 请求:服务器把连接转交给本机运行的真实 Web 服务器(如 Nginx),返回一个正常网页。
这一步叫回落(fallback)。主动探测者用浏览器访问这台服务器,看到的是一个货真价实的网站;用错误密码试探,得到的也是正常的网页响应。无法在不知道密码的前提下证明「这是一台代理服务器」。
部署要求:域名 + 证书
Trojan 的伪装建立在「真实 TLS」之上,因此部署方必须具备:
- 一个域名:解析到服务器 IP;
- 有效的 TLS 证书:通常用 Let’s Encrypt 免费签发;
- 一个回落用的网站:应对探测访问。
这些是服务商的功课,用户端无感知——在 Shadowrocket 等客户端里,Trojan 节点从订阅导入后与其他协议用法完全相同。
优缺点小结
| 维度 | 表现 |
|---|---|
| 抗识别 | 优秀,流量即标准 HTTPS |
| 性能 | 良好,协议开销极小,但 TLS 内外双层加密仍有少量冗余 |
| 部署成本 | 较高,需要域名和证书 |
| 客户端支持 | 广泛,主流工具均支持 |
| 灵活性 | 一般,传输方式基本绑定 TLS/TCP |
Trojan 的思路深刻影响了后来的协议设计——VLESS 的 REALITY 方案可以看作这一哲学的进化版,而 Hysteria2 则在另一个方向(传输速度)上发力。想了解这些协议的整体格局,请阅读常见代理协议对比。