Trojan是什么协议?原理、会不会被识别,和VLESS哪个好
Trojan 这个词本意是「特洛伊木马」,在代理软件里指的是一种 2019 年前后出现的代理协议:它把自己伪装成一个普通的 HTTPS 网站。服务器在 443 端口跑真正的 TLS 服务,用的是你自己域名的正规证书;密码对的连接当作代理转发,密码不对的连接交给一个真实的网站处理,所以探测者连过去,看到的就是一个正常网站。
这个思路简单有效,它也因此流行了好几年。但它也有几个绕不开的弱点,后来的 VLESS + Reality 正是针对这些弱点改进的。这篇讲清它的原理、和 VLESS、VMess、SSR 的区别,以及「为什么说它会被识别」。
Trojan 的工作原理
客户端和服务器之间先完成一次标准的 TLS 握手,从外面看和你打开一个 HTTPS 网站完全一样。握手完成后,客户端在加密通道里发出:
SHA224(密码) 的十六进制 | 换行 | 请求(连接哪个地址、TCP 还是 UDP)| 换行 | 数据
服务器检查第一段:
| 情况 | 服务器怎么做 |
|---|---|
| 格式和密码都对 | 当作代理请求,帮你连目标网站,支持 TCP 和 UDP |
| 格式不对或密码不对 | 原样转给预设的网站(默认是本机 80 端口的网页服务) |
第二种情况是它抗主动探测的关键。探测者拿不到密码,连过去得到的永远是那个网站的正常响应,看不出这台机器还在做代理。
Trojan 和 VLESS、VMess、SSR 的区别
| 对比项 | Trojan | VLESS + Reality | VMess | SSR |
|---|---|---|---|---|
| 伪装方式 | 自己的域名 + 正规证书,伪装成 HTTPS 网站 | 借用别人真实网站的证书,不用自己的域名 | 本身不伪装,常配合 WebSocket + TLS | 混淆参数,伪装能力弱 |
| 需要自己的域名和证书 | 需要 | 不需要 | 配 TLS 时需要 | 不需要 |
| 加密由谁负责 | TLS | TLS(Reality) | 协议自带加密 | 协议自带加密 |
| 抗主动探测 | 有,转给真实网站 | 有,转给被借用的真实网站 | 看配置 | 弱 |
| 对系统时间的要求 | 无 | 无 | 客户端和服务器时间差要在 90 秒内 | 无 |
| 现状 | 原版项目多年没发新版,协议由 Xray、sing-box 等内核继续支持 | 目前的主流方案 | 仍可用,逐渐被 VLESS 取代 | 早已停更,不推荐 |
VLESS 和 VMess 的详细区别见 VLESS是什么。
为什么说 Trojan 会被识别
搜索「trojan 协议被识别」「trojan 不稳定」的人不少。原因主要有三个,都和协议本身的加密强度无关。
一、TLS 套 TLS 的特征。 你访问的网站本身大多是 HTTPS,浏览器要和网站做一次 TLS 握手;这次握手又被装进代理外层的 TLS 里。外层虽然加密了,但里面那次握手的包大小和往返节奏有固定规律,从外面能观察到。2024 年 USENIX Security 会议上就有论文专门研究用这种「套娃」特征识别代理流量。
二、客户端的 TLS 指纹。 不同程序发起 TLS 握手时,支持的算法列表和顺序各不相同,形成「指纹」。代理客户端的指纹如果和常见浏览器对不上,就是一个可疑点。现在的内核大多能模仿浏览器的指纹,但老客户端不一定。
三、域名和 IP 太集中。 这个协议需要自己的域名,而一个没什么名气的小域名、每天跑大量流量、只解析到一个境外 IP,这个组合本身就显眼。
所以,同样一个这类节点,有人用很稳,有人隔几天就出问题,除了线路质量,也和这些特征有关。IP 被封之后怎么判断和处理,见 IP被墙怎么办。
原版项目还在更新吗
| 项目 | 最后一次正式发版 |
|---|---|
| trojan(原版,C++) | v1.16.0,2020 年 6 月 |
| trojan-go(Go 实现) | v0.10.6,2021 年 9 月 |
两个项目的仓库都还在,但已经多年没发新版本。现在继续支持这个协议、并且在更新的,是 Xray、sing-box、mihomo(Clash Meta)这些通用内核。所以要用这个协议,选这些内核的客户端,别用早期的独立客户端。
Trojan 和 VLESS 哪个好
VLESS + Reality 是在它的思路上往前走了一步:
- 不需要自己的域名和证书:借用一个真实大网站的证书完成握手,探测者看到的是那个大网站,第三个弱点(小域名太显眼)也就没有了。原理见 Reality协议是什么
- Vision 流控处理「套娃」特征:VLESS 常配合的 xtls-rprx-vision 流控,会处理内层 TLS 握手的包长特征,针对的正是上面说的第一个弱点
它的优势是简单、成熟、几乎所有第三方客户端都支持。如果你已经有一个用着稳定的节点,没必要为了换协议而换;新选的话,VLESS + Reality 更稳妥。
我们用的是哪种
我们的线路用的是 VLESS + Reality,配 xtls-rprx-vision 流控,备用协议是 Hysteria2,不提供这个协议。
它的客户端支持比我们的协议更广。 原版 Clash 内核(包括已经停更的 Clash for Windows)支持它,但不支持 VLESS,而我们的订阅只导出 v2rayN、NekoBox、Shadowrocket 三种格式,没有 Clash 格式。如果你手上只有老版本 Clash,我们的线路导不进去,要换成 mihomo 内核的客户端,或者用我们自己的客户端。订阅格式怎么转,见 订阅转换是什么。
常见问题
Trojan 是什么协议?
一种伪装成 HTTPS 网站的代理协议。服务器用自己域名的正规证书跑 TLS,密码对的连接当代理转发,密码不对的转给一个真实网站,让探测者看到的只是普通网站。
Trojan 协议会被识别吗?
会有被识别的可能。原因主要是 TLS 套 TLS 的包长特征、客户端的 TLS 指纹,以及自有小域名流量过于集中,跟加密强度无关。
Trojan 和 VLESS 哪个好?
新选的话 VLESS + Reality 更好:不需要自己的域名和证书,还能处理 TLS 套 TLS 的特征。它胜在简单成熟、客户端支持广。
Trojan 和 VMess 哪个好?
前者靠 TLS 加密和伪装,对系统时间没有要求;VMess 自带加密,客户端和服务器时间差超过 90 秒就连不上,现在正逐渐被 VLESS 取代。
Trojan 支持 UDP 吗?
支持。协议里有专门的 UDP 转发命令,游戏、语音通话这类 UDP 流量可以走这个协议,前提是客户端和服务端都开启了这项功能。