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_alpn | map[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[]
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
name | string | (unset) | <string> | 统计与日志中使用的显示名。 |
password | string | (required) | <string> | Trojan 密码。 |
源码: option/trojan.go:13-16 · 锚定版本 v1.13.11 (553cfa1)
出站
type: "trojan" 出站:
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
password | string | (required) | <string> | 上游服务器期望的密码。 |
network | NetworkList | (tcp+udp) | tcp | udp | | 限定为仅 TCP 或仅 UDP。空值同时启用两者。 |
multiplex | *OutboundMultiplexOptions | (disabled) | OutboundMultiplexOptions | 客户端多路复用(必须与服务端一致)。 |
transport | *V2RayTransportOptions | (plain TCP) | V2RayTransportOptions | V2Ray 风格传输层包装。 |
源码: option/trojan.go:18-26 · 锚定版本 v1.13.11 (553cfa1)
同时内嵌 DialerOptions、ServerOptions(server、server_port) 与 OutboundTLSOptionsContainer(tls)。
示例
单用户加 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)
