Skip to content

Transport — sing-box

sing-box 的传输选项位于每个支持 TLS 的入站 / 出站内嵌的 transport 块。该块是 多态 的:type 字段选择五种传输变体之一,匹配的字段 子集生效。

json
"transport": { "type": "<ws|http|grpc|quic|httpupgrade>", ...variant fields }

type: "ws"

字段类型默认值允许值描述
pathstring//<path>WebSocket 路径。
headersbadoption.HTTPHeader{}{<header>: <value or list>}附加 upgrade 请求头。
max_early_datauint320<bytes>WS 握手完成前缓冲的最大 0-RTT 早数据字节数。0 关闭。
early_data_header_namestringSec-WebSocket-Protocol<header name>当服务端使用非标准头承载 base64 编码早数据时使用的 HTTP 头名。

源码: option/v2ray_transport.go:79-84 · 锚定版本 v1.13.11 (553cfa1)

type: "http"(HTTP/2)

字段类型默认值允许值描述
hostbadoption.Listable[string][][<hostname>]Host 头值列表。服务端用于 SNI 匹配;客户端每次请求随机选一个。
pathstring//<path>HTTP 路径。
methodstringPUT<HTTP method>HTTP 方法。标准传输使用 PUT 以抑制缓存。
headersbadoption.HTTPHeader{}{<header>: <value or list>}附加请求头。
idle_timeoutbadoption.Duration0<duration>空闲超时 —— 在该时长内无活动则关闭底层 HTTP 连接。0 关闭。
ping_timeoutbadoption.Duration0<duration>HTTP/2 PING 探测响应超时。0 关闭 PING。

源码: option/v2ray_transport.go:70-77 · 锚定版本 v1.13.11 (553cfa1)

HTTP 传输默认走 HTTP/2。若在外层 TLS 块上设置 tls.alpn: ["h3"],则改走 HTTP/3。

type: "grpc"

字段类型默认值允许值描述
service_namestring(required)<service path>gRPC 服务名。
idle_timeoutbadoption.Duration0<duration>空闲超时。0 关闭。
ping_timeoutbadoption.Duration0<duration>keepalive PING 超时。0 关闭 PING。
permit_without_streamboolfalsetrue | false允许无活跃流时也发送 PING。

源码: option/v2ray_transport.go:88-94 · 锚定版本 v1.13.11 (553cfa1)

type: "quic"

QUIC 传输结构体 没有用户可见字段 —— 只是 { "type": "quic" }。所有 QUIC 调优都在协议层进行(Hysteria2 / TUIC 自带原生 QUIC 栈)。

type: "httpupgrade"

字段类型默认值允许值描述
hoststring(server address)<hostname>HTTP Host 头。
pathstring//<path>HTTP 路径。
headersbadoption.HTTPHeader{}{<header>: <value or list>}附加请求头。

源码: option/v2ray_transport.go:96-100 · 锚定版本 v1.13.11 (553cfa1)

示例

WebSocket + TLS:

json
{
  "outbounds": [{
    "type": "vless",
    "server": "example.com",
    "server_port": 443,
    "uuid": "...",
    "tls": {
      "enabled": true,
      "server_name": "example.com"
    },
    "transport": {
      "type": "ws",
      "path": "/vl",
      "headers": { "Host": "example.com" }
    }
  }]
}

gRPC + REALITY:

json
{
  "outbounds": [{
    "type": "vless",
    "server": "example.com",
    "server_port": 443,
    "uuid": "...",
    "tls": {
      "enabled": true,
      "server_name": "www.cloudflare.com",
      "utls": { "enabled": true, "fingerprint": "chrome" },
      "reality": { "enabled": true, "public_key": "...", "short_id": "..." }
    },
    "transport": {
      "type": "grpc",
      "service_name": "GunService",
      "idle_timeout": "60s",
      "ping_timeout": "20s",
      "permit_without_stream": true
    }
  }]
}

HTTP/3(HTTP 传输走 h3):

json
{
  "outbounds": [{
    "type": "vless",
    "server": "example.com",
    "server_port": 443,
    "uuid": "...",
    "tls": {
      "enabled": true,
      "server_name": "example.com",
      "alpn": ["h3"]
    },
    "transport": {
      "type": "http",
      "host": ["example.com"],
      "path": "/h3",
      "method": "PUT"
    }
  }]
}

说明

  • sing-box 提供独立的 SplitHTTP / XHTTP 传输。最接近的等价 是走 HTTP/3 的 type: "http"(设置 tls.alpn: ["h3"]),可提 供大部分相同的反 DPI 特性。
  • idle_timeout: 0ping_timeout: 0 一起会完全禁用 keepalive PING。对位于 NAT 之后的长连接,建议设 idle_timeout"30s" 之类,让底层 TCP 连接看到周期性活动。
  • type: "http"host 字段是 列表。服务端用于 SNI 匹配 (任一值匹配即可);客户端每次请求随机选一个,便于按 Host 头路由 的上游负载均衡器。
  • WebSocket early_data_header_name 默认 Sec-WebSocket-Protocol —— 与 V2Ray 使用的头一致。仅在上游代理剥离该头时才需覆盖。

跨内核说明

  • Xray-core 使用 streamSettings.network + 每个传输的 *Settings 块,并额外提供 sing-box 没有的 TCP、mKCP 与 SplitHTTP/XHTTP 变体。参见 Transport — Xray-core
  • mihomo 把传输设置按协议分散到每个 proxy 条目的 *-opts 块。 参见 Transport — mihomo

源码: option/v2ray_transport.go:70-100 · v1.13.11 (553cfa1)

由 Argsment 出品的 Core Tutorial