Skip to content

Trojan — sing-box

sing-box 同时实现 Trojan 两端。没有 flow 字段 —— 实现遵循原始 Trojan 规范,而非 XTLS 分支。回落语义比 Xray 更丰富:一个默认 fallback 目标加上一个按 ALPN 索引的 fallback_for_alpn 映射。

入站

type: "trojan" 入站:

字段类型默认值允许值描述
users[]TrojanUser[][TrojanUser]可接受的用户列表。
fallback*ServerOptions(none)ServerOptions回落目标 —— 当请求未通过 Trojan 鉴权时,原始流被转发到这里。包含 `server` + `server_port`。
fallback_for_alpnmap[string]*ServerOptions{}{<alpn>: ServerOptions}按 ALPN 的回落映射。协商 ALPN 匹配某键时优先于 `fallback`。
multiplex*InboundMultiplexOptions(disabled)InboundMultiplexOptions服务端多路复用。
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptions可选的 V2Ray 风格传输层(ws、http、grpc、quic)。

源码: option/trojan.go:3-11 · 锚定版本 v1.13.11 (553cfa1)

该结构体内嵌 ListenOptions(监听地址、端口、嗅探等)与 InboundTLSOptionsContainer(TLS 凭据)。

users[]

字段类型默认值允许值描述
namestring(unset)<string>统计与日志中使用的显示名。
passwordstring(required)<string>Trojan 密码。

源码: option/trojan.go:13-16 · 锚定版本 v1.13.11 (553cfa1)

出站

type: "trojan" 出站:

字段类型默认值允许值描述
passwordstring(required)<string>上游服务器期望的密码。
networkNetworkList(tcp+udp)tcp | udp | 限定为仅 TCP 或仅 UDP。空值同时启用两者。
multiplex*OutboundMultiplexOptions(disabled)OutboundMultiplexOptions客户端多路复用(必须与服务端一致)。
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsV2Ray 风格传输层包装。

源码: option/trojan.go:18-26 · 锚定版本 v1.13.11 (553cfa1)

同时内嵌 DialerOptionsServerOptionsserverserver_port) 与 OutboundTLSOptionsContainertls)。

示例

单用户加 HTTPS 回落的入站:

json
{
  "inbounds": [
    {
      "type": "trojan",
      "tag": "trojan-in",
      "listen": "::",
      "listen_port": 443,
      "users": [
        { "name": "alice", "password": "<password>" }
      ],
      "tls": {
        "enabled": true,
        "server_name": "example.com",
        "certificate_path": "/etc/ssl/cert.pem",
        "key_path": "/etc/ssl/key.pem"
      },
      "fallback": { "server": "127.0.0.1", "server_port": 8080 },
      "fallback_for_alpn": {
        "h2":       { "server": "127.0.0.1", "server_port": 8443 },
        "http/1.1": { "server": "127.0.0.1", "server_port": 8080 }
      }
    }
  ]
}

出站:

json
{
  "outbounds": [
    {
      "type": "trojan",
      "tag": "trojan-out",
      "server": "example.com",
      "server_port": 443,
      "password": "<password>",
      "tls": {
        "enabled": true,
        "server_name": "example.com"
      },
      "transport": { "type": "ws", "path": "/tj" }
    }
  ]
}

说明

  • 回落设计与 Xray 不同:Xray 接受一个按 (sni, alpn, path) 三元组 匹配的 fallbacks 列表,而 sing-box 使用单个默认 fallback + 按 ALPN 索引的映射。路径级匹配不暴露 —— 需要时请在 sing-box 之前 终止 TLS。
  • 先查 fallback_for_alpn:若协商 ALPN 匹配某键,则使用对应目标; 否则使用默认 fallback
  • 没有 flow 选项。带 XTLS Vision 的 Trojan 客户端(Xray-core 配 非空 flow)无法连接到 sing-box Trojan 服务端。

跨内核说明

  • Xray 使用 clients[] 与列表形式的 fallbacks[]。参见 Trojan — Xray-core
  • mihomo 采用单一 proxy 对象形态,出站使用 password,入站使 用按用户的 password;并暴露 trojan-go 的 ss-opts 用于串联 Shadowsocks 加密。参见 Trojan — mihomo

源码: option/trojan.go:3-26 · v1.13.11 (553cfa1)

由 Argsment 出品的 Core Tutorial