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.9.9 (52a412d)

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.9.9 (52a412d)

简化形式 vs. servers

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

入站 ​

"protocol": "trojan" 入站的 settings:

字段类型默认值允许值描述
users[]*TrojanUserConfig—[TrojanUserConfig] | …入站账户列表;对象形状与 clients 相同。两个键均可使用。
clients[]*TrojanUserConfig(required)[TrojanUserConfig]可接受的用户列表。
fallbacks[]*TrojanInboundFallback[][TrojanInboundFallback]TLS 包裹的传入流量不像 Trojan 时使用的备用目标。

源码: infra/conf/trojan.go:114-118 · 锚定版本 v26.9.9 (52a412d)

clients[] ​

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

源码: infra/conf/trojan.go:106-111 · 锚定版本 v26.9.9 (52a412d)

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.9.9 (52a412d)

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" }
      }
    }
  ]
}

说明 ​

  • Xray-core 中的 Trojan 不支持 flow。结构体字段会被解析,但传入任何非空值都会触发 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 完全一致 —— 字段形状相同,type 从 dest 推断的逻辑也相同。

跨内核说明 ​

  • 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.9.9 (52a412d)

由 Argsment 出品的 Core Tutorial