Skip to content

Trojan — Xray-core

Trojan 是带密码握手的 TLS 形态隧道。Xray-core 的实现遵循原始 Trojan 规范,不支持 XTLS 的 flow 扩展 —— 出于兼容性 flow 字段仍可 被解析,但任何非空值都会触发硬错误(infra/conf/trojan.go:73, 128)。

出站

"protocol": "trojan" 出站的 settings

字段类型默认值允许值描述
address*Address(unset)<host>简化形式 —— 服务器主机名或 IP。
portuint16(required with address)<port>服务器端口。
levelbyte0<byte>用户等级(简化形式)。
emailstring(unset)<string>统计中显示的用户标识。
passwordstring(required with address)<string>Trojan 握手用的共享密码。
flowstring(must be empty)已移除特性。任何非空值都会在启动时拒绝。
servers[]*TrojanServerTarget(use simplified shape)[TrojanServerTarget]完整形式。必须恰好一个服务器;多服务器场景请使用多个出站加负载均衡器。

源码: infra/conf/trojan.go:31-39 · 锚定版本 v26.6.1 (94ffd50)

servers[]

字段类型默认值允许值描述
address*Address(required)<host>服务器主机名或 IP。
portuint16(required)<port>服务器端口。
levelbyte0<byte>用户等级。
emailstring(unset)<string>用户标识。
passwordstring(required)<string>Trojan 密码。
flowstring(must be empty)已移除;非空值会被拒绝。

源码: infra/conf/trojan.go:21-28 · 锚定版本 v26.6.1 (94ffd50)

简化形式 vs. servers

出站接受 要么 简化的顶层形式(addressportpassword ……),要么 完整的 servers 形式且恰好一个条目。多服务器场景 请使用多个 Trojan 出站配合路由负载均衡器。

入站

"protocol": "trojan" 入站的 settings

字段类型默认值允许值描述
users[]*TrojanUserConfig[TrojanUserConfig] | …入站账户列表;对象形状与 `clients` 相同。`users` 是近期 Xray 引入的较新名称,与 `clients` 一并接受。
clients[]*TrojanUserConfig(required)[TrojanUserConfig]可接受的用户列表。
fallbacks[]*TrojanInboundFallback[][TrojanInboundFallback]TLS 包裹的传入流量不像 Trojan 时使用的备用目标。

源码: infra/conf/trojan.go:114-118 · 锚定版本 v26.6.1 (94ffd50)

clients[]

字段类型默认值允许值描述
passwordstring(required)<string>Trojan 密码。
levelbyte0<byte>该用户的策略等级。
emailstring(unset)<string>统计 / 日志中显示的标签。
flowstring(must be empty)已移除;非空值会被拒绝。

源码: infra/conf/trojan.go:106-111 · 锚定版本 v26.6.1 (94ffd50)

fallbacks[]

字段类型默认值允许值描述
namestring(unset)<TLS server name>匹配传入的 TLS SNI;空值匹配任意。
alpnstring(unset)h2 | http/1.1 | 匹配协商出的 ALPN;空值匹配任意。
pathstring(unset)/<path>HTTP 路径前缀。非空时必须以 `/` 开头。
typestring(auto)tcp | unix | serve后端协议。省略时由 `dest` 推断。
destjson.RawMessage(required)<host:port> | <port> | <unix path>转发目标。纯整数 = localhost 上的端口。
xveruint6400 | 1 | 2PROXY 协议版本。0 关闭。

源码: infra/conf/trojan.go:96-103 · 锚定版本 v26.6.1 (94ffd50)

Trojan 的 fallback 链与 VLESS 镜像一致:在 TLS 包裹流的首字节上按 顺序匹配,键为 (name, alpn, path)

示例

最小入站,单用户启用 TLS:

json
{
  "inbounds": [
    {
      "tag": "trojan-in",
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "trojan",
      "settings": {
        "clients": [
          { "password": "<password>", "email": "alice" }
        ]
      },
      "streamSettings": { "network": "tcp", "security": "tls" }
    }
  ]
}

简化出站:

json
{
  "outbounds": [
    {
      "tag": "trojan-out",
      "protocol": "trojan",
      "settings": {
        "address": "example.com",
        "port": 443,
        "password": "<password>",
        "email": "alice"
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": { "path": "/tj" }
      }
    }
  ]
}

说明

  • Trojan 的 flow 在 Xray-core 中是 已移除特性。结构体字段仍存在 以保持兼容性解析,但传入任何非空值都会触发 PrintRemovedFeatureError("Flow for Trojan") 启动错误。运行时还会 打印推荐 "VLESS with Flow & Seed" 的弃用横幅 (infra/conf/trojan.go:42, 120)。
  • password 必填。空 password 的出站会构建失败 (infra/conf/trojan.go:69-71)。
  • fallbacks 与 VLESS 的 fallbacks 完全一致 —— 字段形状相同, typedest 推断的逻辑也相同。

跨内核说明

  • sing-box 使用 users[](含 name / password)替代 clients[],并把 Xray 的 fallback 链拆成两个独立选项:单个 fallback 目标 + 按 ALPN 索引的 fallback_for_alpn。参见 Trojan — sing-box
  • mihomo 采用标准的单一 proxy 对象形态,还额外暴露了用于 trojan-go 客户端的 Shadowsocks-over-Trojan 兼容层(ss-opts)。 参见 Trojan — mihomo

源码: infra/conf/trojan.go:21-118 · v26.6.1 (94ffd50)

由 Argsment 出品的 Core Tutorial