OVEROUTESOVEROUTES
首页
阅读须知
  • 总览
  • 选购要点
  • 推荐机场
  • 客户端使用
  • 概述
  • IP 与线路
  • 选型指南
  • 选购参考
  • 基础部署
  • 安全加固
  • 概述
  • 3X-UI
  • Xboard
  • 协议总览
  • Shadowsocks
  • Shadowsocks 2022
  • VMess
  • Trojan
  • VLESS
  • Hysteria 2
  • TUIC
  • AnyTLS
  • NaiveProxy
  • Mieru
  • ShadowTLS
  • VLESS-XHTTP
  • WireGuard
  • 传统协议
  • 孤家寡人协议
  • 软件总览
  • Mihomo
  • sing-box
  • Xray
  • V2Fly
  • dae (Linux)
  • Shadowrocket (iOS)
  • QuantumultX (iOS)
  • Stash (iOS/macOS)
  • Loon (iOS)
  • Surge (macOS/iOS)
  • NekoBox (Android)
  • Husi (Android)
  • Exclave (Android)
配置
首页
阅读须知
  • 总览
  • 选购要点
  • 推荐机场
  • 客户端使用
  • 概述
  • IP 与线路
  • 选型指南
  • 选购参考
  • 基础部署
  • 安全加固
  • 概述
  • 3X-UI
  • Xboard
  • 协议总览
  • Shadowsocks
  • Shadowsocks 2022
  • VMess
  • Trojan
  • VLESS
  • Hysteria 2
  • TUIC
  • AnyTLS
  • NaiveProxy
  • Mieru
  • ShadowTLS
  • VLESS-XHTTP
  • WireGuard
  • 传统协议
  • 孤家寡人协议
  • 软件总览
  • Mihomo
  • sing-box
  • Xray
  • V2Fly
  • dae (Linux)
  • Shadowrocket (iOS)
  • QuantumultX (iOS)
  • Stash (iOS/macOS)
  • Loon (iOS)
  • Surge (macOS/iOS)
  • NekoBox (Android)
  • Husi (Android)
  • Exclave (Android)
配置
  • 主流序列

    • 代理协议总览
    • Shadowsocks
    • Shadowsocks 2022
    • VMess
    • Trojan
    • VLESS
    • Hysteria 2
  • 新生序列

    • TUIC
    • AnyTLS
    • ShadowQUIC
    • VLESS-Encryption
    • Sudoku
  • 小众序列

    • NaiveProxy
    • Mieru
    • SS-ShadowTLS
    • VLESS-XHTTP
    • Juicity
  • 传统与其他

    • WireGuard
    • 传统协议
    • 孤家寡人协议

Trojan

Trojan 是一种将代理流量完全伪装为 HTTPS 流量的代理协议,于 2017 年发布。其核心设计思路是:不去对抗检测,而是让代理流量从外观上与正常的 HTTPS 访问完全一致,使检测系统无从区分。这种设计使 Trojan 成为抗检测能力较强的传统协议之一。

设计思路

在 Trojan 出现之前,大多数代理协议采用的策略是"加密混淆"——将流量加密或变形,使其看起来像随机数据或其他协议。然而,随着检测技术的进步,即使是随机化的流量也可能被统计分析方法识别。

Trojan 换了一个思路:如果代理流量看起来就是标准的 TLS 1.3 连接,检测系统又如何区分它和正常的 HTTPS 浏览?

Trojan 的核心策略:

  • 直接使用真实的 TLS 协议(而不是模拟),流量的 TLS 指纹与普通 HTTPS 客户端完全一致
  • 监听在 443 端口,这是 HTTPS 的标准端口
  • 服务端同时运行一个正常的 Web 服务(如 Nginx),当收到非 Trojan 流量时,表现为一个普通的 HTTPS 网站

工作原理

连接建立流程

客户端
  |
  | 1. 向服务器 443 端口发起标准 TLS 握手
  | 2. TLS 握手完成后,发送 Trojan 请求头(含密码哈希和目标地址)
  v
服务端
  |
  | 3. 接收 TLS 连接
  | 4. 验证 Trojan 请求头中的密码哈希
  |    - 密码正确 → 解析目标地址,作为代理处理
  |    - 密码错误 → 将连接转发给后端 Web 服务器
  v
目标服务器 / 回落 Web 服务

回落机制

回落(Fallback)是 Trojan 最重要的安全特性之一。当服务端接收到一个 TLS 连接,但其中的密码不正确(或根本没有 Trojan 请求头)时,服务端会将这个连接无缝转发给一个正常运行的 Web 服务器。

对于主动探测者来说:

  • 他们向服务器 443 端口发起连接
  • 由于不知道正确密码,流量被转发给后端 Web 服务器
  • 他们得到一个看起来完全正常的 HTTPS 网站响应
  • 无法判断这个服务器是否运行了代理服务

这使得 Trojan 服务器从外部看来与一个普通的 HTTPS 网站没有任何区别。

密码认证

Trojan 使用密码的 SHA224 哈希值进行认证。请求头结构简化如下:

[SHA224(密码)] + [CRLF] + [目标地址] + [CRLF] + [请求数据]

密码以哈希形式传输,避免了在网络中明文暴露密码(尽管整个连接已经在 TLS 保护之下)。

TLS 的重要性

Trojan 完全依赖 TLS 提供加密保护。这意味着:

  1. 必须使用有效的域名:TLS 证书需要绑定到一个域名
  2. 必须使用有效的证书:自签名证书会导致 TLS 握手特征异常,反而更容易被识别
  3. 推荐使用主流 CA 颁发的证书:Let's Encrypt、ZeroSSL 等免费 CA 颁发的证书在浏览器中受信任,TLS 指纹与真实用户相符

关于自签名证书

不要对外使用自签名证书。自签名证书会导致 TLS Client Hello 中出现与正常 HTTPS 访问不符的特征,可能被检测系统识别为异常流量。始终使用受信任的 CA 颁发的证书。

优缺点

优点缺点
流量完全基于真实 TLS,极难被检测需要一个指向服务器的域名
443 端口,流量与 HTTPS 高度一致需要有效的 TLS 证书
回落机制有效对抗主动探测原生不支持 CDN 中转
配置相对简单(无需复杂的传输层配置)不同 TLS 客户端实现的指纹可能存在细微差异
服务端同时提供真实 Web 服务需要管理域名解析和证书续期
性能较好(直接使用 TLS,无额外加密层)—

Trojan 与 Trojan-Go / Trojan-GFW

Trojan 协议有多个实现版本:

实现说明维护状态
trojan(原版)最初的 C++ 实现停止维护
Trojan-GoGo 语言重写版,添加了多路复用、WebSocket 等特性活跃维护
Xray-core内置 Trojan 实现,支持 XTLS 等扩展活跃维护
sing-box内置 Trojan 实现活跃维护

目前推荐使用 Xray-core 或 sing-box 中内置的 Trojan 实现,因为原版 trojan 和 Trojan-Go 已逐渐被整合进这些通用代理框架。

与其他协议的对比

对比维度TrojanShadowsocks 2022VLESS + Reality
是否需要域名是否否
是否需要证书是否否
传输层TLS 1.3自定义加密TLS 1.3 + Reality
抗检测能力较高中极高
回落机制有无有(通过 Xray)
CDN 支持有限(需 WebSocket 变体)否否
配置复杂度中低中
客户端支持广度广较广较广

适用场景

推荐使用 Trojan 的场景:

  • 已有可用域名和证书,希望部署一个简洁的代理节点
  • 网络环境对 HTTPS 流量基本不干扰,但对混淆类流量敏感
  • 需要与现有 Web 服务共用 443 端口
  • 机场订阅中包含 Trojan 节点

考虑其他方案的场景:

  • 没有可用域名(考虑 VLESS + Reality)
  • 需要最强的抗检测能力(考虑 VLESS + Reality 或 AnyTLS)
  • 需要在高丢包/高延迟线路上稳定使用(考虑 Hysteria 2 或 TUIC)

服务端部署参考

以下以 Xray-core 搭配 Caddy 为例,展示 Trojan 节点的基本部署方案。

前置条件

  • 一个指向服务器 IP 的域名(已完成 DNS 解析)
  • 服务器已开放 80 和 443 端口
  • 已安装 Caddy 用于自动申请和续期 TLS 证书

安装 Xray-core

# 使用官方安装脚本(Debian/Ubuntu/CentOS)
bash <(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh) install

Caddy 配置(Caddyfile)

Caddy 负责处理 TLS 证书,并将来自外部的 HTTPS 请求反向代理到 Xray:

your.domain.com {
    reverse_proxy /trojan-path 127.0.0.1:10443

    root * /var/www/html
    file_server
}

更常见的方案是让 Xray 直接监听 443 端口并处理 TLS,Caddy 只作为回落的 Web 服务器。

Xray 配置(config.json)

以下为 Xray 直接监听 443 端口,TLS 由 Xray 处理,非 Trojan 流量回落至 Nginx 的方案:

{
  "inbounds": [
    {
      "port": 443,
      "protocol": "trojan",
      "settings": {
        "clients": [
          {
            "password": "your-strong-password"
          }
        ],
        "fallbacks": [
          {
            "dest": 80,
            "xver": 1
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "certificates": [
            {
              "certificateFile": "/etc/ssl/certs/your.domain.com.crt",
              "keyFile": "/etc/ssl/private/your.domain.com.key"
            }
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom"
    }
  ]
}

申请 TLS 证书

推荐使用 acme.sh 申请 Let's Encrypt 证书:

# 安装 acme.sh
curl https://get.acme.sh | sh

# 申请证书(HTTP 验证方式,需确保 80 端口可访问)
~/.acme.sh/acme.sh --issue -d your.domain.com --webroot /var/www/html

# 安装证书到指定路径
~/.acme.sh/acme.sh --install-cert -d your.domain.com \
  --cert-file /etc/ssl/certs/your.domain.com.crt \
  --key-file /etc/ssl/private/your.domain.com.key \
  --reloadcmd "systemctl restart xray"

acme.sh 会自动设置定时任务,在证书到期前自动续期。

回落 Web 服务(Nginx)

回落目标 Web 服务需要监听本地端口(而非 443),以接收来自 Xray 转发的非 Trojan 连接:

server {
    listen 80;
    server_name your.domain.com;
    root /var/www/html;
    index index.html;
}

关于回落内容

回落的 Web 服务最好展示一个看起来合理的网站内容(如博客、个人主页等),而不是一个空白页面或默认的 Nginx 欢迎页。空白或默认页面在主动探测场景下仍然可能引发怀疑。

启动服务

systemctl enable xray
systemctl start xray
systemctl status xray

客户端支持

Trojan 是客户端支持最广泛的协议之一,几乎所有主流代理软件都提供了完整支持:

平台客户端支持状态
Windows / macOS / LinuxMihomo、sing-box、Xray、v2rayN、V2Fly支持
iOSShadowrocket、Stash、Quantumult X、Surge、Loon支持
macOSStash、Surge支持
AndroidNekoBox、Husi、Exclave支持
Linuxdae、sing-box、Mihomo支持

常见问题

Q:Trojan 的密码用什么格式?

Trojan 支持任意字符串作为密码,建议使用 16 位以上的随机字符串。密码在传输中以 SHA224 哈希形式出现,但考虑到整个连接在 TLS 保护下,主要目的是用于服务端区分不同用户。

Q:Trojan 可以搭配 CDN 使用吗?

原生的 Trojan(直接 TCP + TLS)不能直接通过 CDN 中转,因为 CDN 通常不透传底层 TCP 连接。如果需要 CDN 支持,可以使用 Trojan over WebSocket + TLS 的变体,但这种方案实际上与 VMess/VLESS over WebSocket + TLS 的效果类似,且增加了配置复杂度。

Q:Trojan 和 VLESS + TLS 有什么区别?

两者都依赖 TLS 提供加密,但身份认证机制不同(Trojan 使用密码哈希,VLESS 使用 UUID)。更重要的区别是,VLESS 支持 Reality 扩展(无需域名),而 Trojan 必须依赖真实的 TLS 证书。在新建节点时,VLESS + Reality 通常是更优的选择。

延伸阅读

  • VLESS 协议 — 了解支持 Reality 的现代协议,适合无域名场景
  • VMess 协议 — 了解另一个支持 WebSocket + TLS + CDN 的经典方案
  • 代理协议总览 — 回到协议总览页面
  • Trojan 原版仓库:github.com/trojan-gfw/trojan
  • Trojan-Go:github.com/p4gefau1t/trojan-go
  • Xray-core:github.com/XTLS/Xray-core
最近更新: 2026/4/9 14:18
Prev
VMess
Next
VLESS