Trojan 的设计思路可以概括为一句话:让流量看起来就是一次普通的 HTTPS 访问。

Trojan 协议的基本原理与使用特点

Trojan 的设计思路可以用一句话概括:让流量看起来就是一次普通的 HTTPS 访问。

这篇解释这个思路是怎么实现的,以及它在实际使用中带来了哪些特点和限制。

先看它要解决什么问题

早期的一些代理协议有明显的可识别特征:特定的握手格式、固定的字节模式、异常的包长分布。这些特征让流量在传输过程中容易被分类和处理。

一种应对思路是不断加密和混淆,让特征更难提取。Trojan 走的是另一条路:不发明新的伪装,直接使用已经无处不在的 TLS。

它怎么工作

Trojan 的运行方式大致是这样:

text
客户端 ──标准 TLS 握手──> 服务器(同时也是一个正常的 Web 服务器)

   握手成功后发送认证信息

   认证通过 → 按代理协议转发流量
   认证失败 → 当作普通 Web 请求处理,返回网页

关键在最后两行。服务器同时扮演两个角色:

  • 对于携带正确凭据的连接,它是一个代理服务器
  • 对于其他任何连接,它就是一个普通的网站

这意味着如果有人直接访问这个域名,看到的是一个正常网页,而不是任何异常响应。从外部看,这台服务器和一个普通的 HTTPS 站点没有区别。

三个必要条件

因为完全依赖标准 TLS,Trojan 对部署环境有几个硬性要求:

必须有域名

TLS 证书绑定在域名上。没有域名就没有可信证书,连接会被客户端拒绝。

必须有有效证书

证书需要由受信任的机构签发,且在有效期内。自签名证书会触发警告,反而暴露异常。

时间必须准确

TLS 握手会校验证书有效期。客户端时间偏差过大会导致握手失败。

第三点对使用者最有实际影响。

为什么系统时间这么重要

这是最常见的实际问题

如果你的设备时间与实际时间相差超过几分钟,TLS 握手会因为证书"尚未生效"或"已过期"而失败。

表现是:所有节点全部超时,而且看不出任何其他异常。

检查方式:

  • Windows:右键任务栏时钟 → 调整日期和时间 → 开启自动设置 → 立即同步
  • macOS:系统设置 → 通用 → 日期与时间 → 开启自动设置
  • 手机:设置中开启自动设置日期与时间

双系统电脑特别容易出问题:Windows 把硬件时钟当本地时间,Linux 当 UTC,来回切换会产生数小时的偏差。

排查详情见节点全部 Timeout 怎么处理

与其他协议的对比

维度Trojan一些其他协议
伪装方式直接使用标准 TLS自定义加密或混淆层
部署要求需要域名和有效证书部分只需 IP
配置复杂度较低,参数少差异较大
对时间的敏感度高(依赖证书校验)视协议而定
性能开销标准 TLS 开销视实现而定

这里不做优劣判断——不同协议在不同网络环境下的表现差异很大,没有普适的"最好"。

实际使用中的特点

配置项少。 通常只需要服务器地址、端口、密码和域名(SNI)。参数少意味着出错的可能性也少。

故障模式明确。 由于依赖标准 TLS,失败原因通常集中在几个点:证书问题、时间问题、域名解析问题。排查路径比较清晰。

性能取决于 TLS 实现。 加解密开销与普通 HTTPS 相当。在性能较弱的设备(例如低端路由器)上,加解密可能成为瓶颈。

对 DNS 有依赖。 需要正确解析域名才能连接。DNS 异常会直接导致连接失败,见 DNS 问题排查

使用者需要知道的

作为使用者,你通常不需要理解协议细节——客户端会处理这些。真正有实际价值的只有两条:

  1. 保持系统时间准确。 这是 Trojan 类协议最常见的故障原因。
  2. DNS 解析要正常。 域名解析不了,连接就建立不起来。

其余的配置由订阅提供,不需要手动干预。

注意事项

  • 本文描述的是协议的公开设计原理,属于技术知识范畴。
  • 具体节点使用什么协议以用户中心的说明为准,本站不对此做任何断言。
  • 任何协议都不能保证在所有网络环境下正常工作,实际表现受多方因素影响。

常见问题

Trojan 一定比其他协议好吗?

不一定。不同协议在不同网络环境下的表现差异很大,没有普适的答案。

为什么我的节点显示需要 SNI?

SNI 是 TLS 握手中用来告诉服务器"我要访问哪个域名"的字段。Trojan 依赖它来完成正确的证书协商。这项通常由订阅自动配置。

证书过期会怎样?

客户端会拒绝连接。这属于服务端维护范畴,使用者能做的是确认自己的系统时间正确。

为什么有的节点用域名有的用 IP?

Trojan 需要域名来完成证书校验。如果某个节点配置里是 IP,通常会同时指定 SNI 字段。

理解协议对日常使用有帮助吗?

帮助有限,但知道"时间不准会导致全部超时"这一条,可以省下很多排查时间。