Skip to content

Naive — sing-box

Naive 是一种 TCP/HTTP-mux 代理,旨在看起来像普通的 HTTPS 或 HTTP/3 流量。sing-box 实现了双端,并对内嵌的 quiche QUIC 栈的拥塞控制与 流控窗口提供了直接旋钮。

入站

type: "naive"

字段类型默认值允许值描述
users[]auth.User[][{username, password}]可接受的用户。
networkNetworkList(tcp+udp)tcp | udp | 限定为仅 TCP 或仅 UDP。
quic_congestion_controlstring(QUIC default) | TBBR | B2ON | QBIC | RENO传给 quiche 栈的 QUIC 拥塞控制算法。接受四个四字母代码:TBBR(BBRv1)、B2ON(BBRv2)、QBIC(CUBIC)、RENO。

源码: option/naive.go:19-25 · 锚定版本 v1.13.11 (553cfa1)

该结构体内嵌 ListenOptionsInboundTLSOptionsContainer必须 配置 TLS —— Naive 在线路上始终被 TLS 包裹。

出站

type: "naive"

字段类型默认值允许值描述
usernamestring(unset)<string>上游代理鉴权用户名。
passwordstring(unset)<string>上游代理鉴权密码。
insecure_concurrencyint0<int>每条连接允许的并发 HTTP/2 流数。0 使用栈默认值。
extra_headersbadoption.HTTPHeader{}{<header>: <value or list>}每个请求附加的额外头。
stream_receive_window*byteformats.MemoryBytes(stack default)<bytes / MiB / GiB>单流的流量控制窗口。接受 "4MiB" 这类带后缀字符串。
udp_over_tcp*UDPOverTCPOptions(disabled)UDPOverTCPOptions当上游不支持 QUIC 数据报时,把 UDP 包包装在 Naive 的 TCP 风格流中。
quicboolfalsetrue | false使用 HTTP/3(QUIC)作为传输替代 HTTP/2。服务端需同时支持两者以便客户端能正确回退。
quic_congestion_controlstring(QUIC default) | TBBR | B2ON | QBIC | RENO客户端侧的 QUIC 拥塞控制算法。
quic_session_receive_window*byteformats.MemoryBytes(stack default)<bytes / MiB / GiB>QUIC 单会话(非单流)流量控制窗口。

源码: option/naive.go:27-40 · 锚定版本 v1.13.11 (553cfa1)

同时内嵌 DialerOptionsServerOptionsOutboundTLSOptionsContainer

示例

入站(TLS 之上的 HTTP/2):

json
{
  "inbounds": [
    {
      "type": "naive",
      "tag": "naive-in",
      "listen": "::",
      "listen_port": 443,
      "users": [{ "username": "alice", "password": "<password>" }],
      "tls": {
        "enabled": true,
        "alpn": ["h2", "http/1.1"],
        "certificate_path": "/etc/ssl/cert.pem",
        "key_path": "/etc/ssl/key.pem"
      }
    }
  ]
}

切换到 HTTP/3 并使用 BBRv2 拥塞控制的出站:

json
{
  "outbounds": [
    {
      "type": "naive",
      "tag": "naive-out",
      "server": "example.com",
      "server_port": 443,
      "username": "alice",
      "password": "<password>",
      "quic": true,
      "quic_congestion_control": "B2ON",
      "quic_session_receive_window": "16MiB",
      "tls": {
        "enabled": true,
        "server_name": "example.com",
        "alpn": ["h3", "h2", "http/1.1"]
      }
    }
  ]
}

说明

  • 四个拥塞控制代码是 quiche 栈使用的大小写敏感四字母标签:
    • TBBR —— BBR v1
    • B2ON —— BBR v2
    • QBIC —— CUBIC
    • RENO —— New Reno
  • stream_receive_windowquic_session_receive_window 通过 byteformats.MemoryBytes 解析带后缀的字节字面量 —— "4MiB""16MiB""1GiB"。纯整数视为原始字节。
  • insecure_concurrency 是原始 Naive 客户端的实验性多流标志。 超过约 8 后通常没有进一步加速效果,但会占用更多每连接内存。
  • udp_over_tcp 与 Shadowsocks / TUIC 变体形态相同 —— {enabled, version}

跨内核说明

源码: option/naive.go:19-40 · v1.13.11 (553cfa1)

由 Argsment 出品的 Core Tutorial