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_controlstringbbrbbr | cubic | renoHTTP/3(QUIC)监听器的拥塞控制算法:bbr(默认;空值即 bbr)、cubic 或 reno。其他值会在启动时报错。

源码: option/naive.go:9-15 · 锚定版本 v1.14.2 (af6e64c)

该结构体内嵌 ListenOptions 与 InboundTLSOptionsContainer。必须 配置 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(stack default)bbr | bbr2 | cubic | renoquic 为 true 时客户端 QUIC 栈使用的拥塞控制算法:bbr(BBRv1)、bbr2、cubic 或 reno。空值保持栈的默认值;其他值会在启动时报错。
quic_session_receive_window*byteformats.MemoryBytes(stack default)<bytes / MiB / GiB>QUIC 单会话(非单流)流量控制窗口。

源码: option/naive.go:17-30 · 锚定版本 v1.14.2 (af6e64c)

同时内嵌 DialerOptions、ServerOptions 与 OutboundTLSOptionsContainer。

示例 ​

入站(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": "bbr2",
      "quic_session_receive_window": "16MiB",
      "tls": {
        "enabled": true,
        "server_name": "example.com",
        "alpn": ["h3", "h2", "http/1.1"]
      }
    }
  ]
}

说明 ​

  • quic_congestion_control 使用小写名称。出站(Cronet QUIC 客户端)接受 bbr、bbr2、cubic 与 reno;入站(HTTP/3 监听器)接受 bbr、cubic 与 reno,默认 bbr。quiche 的四字母代码(TBBR、B2ON、QBIC、RENO)不被接受。
  • stream_receive_window 与 quic_session_receive_window 通过 byteformats.MemoryBytes 解析带后缀的字节字面量 —— "4MiB"、"16MiB"、"1GiB"。纯整数视为原始字节。
  • insecure_concurrency 是原始 Naive 客户端的实验性多流标志。超过约 8 后通常没有进一步加速效果,但会占用更多每连接内存。
  • udp_over_tcp 与 Shadowsocks / TUIC 变体形态相同 —— {enabled, version}。

跨内核说明 ​

源码: option/naive.go:9-30 · v1.14.2 (af6e64c)

由 Argsment 出品的 Core Tutorial