跳转至

Naive 出站

WutherCore 的 Naive 出站基于 cronet 0.2.0 和 SagerNet/Naive Cronet 原生库。实现与 sing-box 当前 Naive 出站字段对齐,支持:

  • HTTP/2 CONNECT 与 HTTP/3 CONNECT;
  • Basic 认证、自定义请求头与 H2 非安全并发连接池;
  • Naive 前 8 个数据块填充;
  • UDP over TCP v2;
  • QUIC 拥塞控制与接收窗口;
  • SNI、自定义根证书、ECH Config List 和 ECH DNS 查询;
  • 内核的 socket protect、出站 mark、bind-interface 与 DNS 钩子。

构建

Naive 是显式启用的 Cargo feature:

cargo build --release -p wuther-core --features naive

该 feature 需要 Rust 1.88 或更高版本,以及与 cronet crate ABI 匹配的 SagerNet/Naive Cronet 动态库。可使用 cronet-rs v0.2.0 中带校验和验证的下载脚本。

Windows PowerShell:

git clone --branch v0.2.0 --depth 1 https://github.com/MiChongs/cronet-rs.git
Set-Location cronet-rs
.\scripts\fetch-native.ps1
$env:CRONET_LIB_DIR = "$PWD\target\cronet-sdk\lib"
$env:CRONET_LIB_NAME = "cronet"
$env:PATH = "$PWD\target\cronet-sdk\bin;$env:PATH"
Set-Location ..\WutherCore
cargo build --release -p wuther-core --features naive

Linux:

git clone --branch v0.2.0 --depth 1 https://github.com/MiChongs/cronet-rs.git
cd cronet-rs
./scripts/fetch-native.sh
export CRONET_LIB_DIR="$PWD/target/cronet-sdk/lib"
export CRONET_LIB_NAME=cronet
export LD_LIBRARY_PATH="$CRONET_LIB_DIR${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
cd ../WutherCore
cargo build --release -p wuther-core --features naive

运行时也必须让系统能够找到 cronet.dlllibcronet.so 或对应平台的兼容动态库。Windows 可将 DLL 放在 wuther-core.exe 同目录;Linux 可安装到系统库目录或保留 LD_LIBRARY_PATH

配置

手动节点示例:

nodes:
  - name: naive-h2
    type: naive
    server: proxy.example.com
    port: 443
    username: alice
    password: replace-me
    udp: true
    sni: front.example.com
    udp-over-tcp: true
    insecure-concurrency: 2
    extra-headers:
      X-Client: WutherCore

  - name: naive-h3
    type: naive
    server: proxy.example.com
    port: 443
    username: alice
    password: replace-me
    udp: true
    quic: true
    udp-over-tcp: true
    quic-congestion-control: bbr

也支持 URI:

naive://alice:password@proxy.example.com:443?udp-over-tcp=true#naive-h2
naive+quic://alice:password@proxy.example.com:443?udp-over-tcp=true#naive-h3

主要扩展字段:

字段 说明
insecure-concurrency H2 连接池并发数;QUIC 模式只能为 1
extra-headers Mihomo 风格头部映射;URI 可使用 extra-header.<名称>
udp-over-tcp 使用 sing-box UoT v2 封装 UDP
quic 启用 H3;naive+quic:// 会自动启用
quic-congestion-control bbrbbr2cubicreno
stream-receive-window QUIC 单流接收窗口
quic-session-receive-window QUIC 会话接收窗口
certificate-path PEM 根证书文件
certificate 内联 PEM 根证书
ech 启用 ECH
ech-config Base64 或十六进制 ECH Config List
ech-query-server-name 用于获取 ECH HTTPS 记录的名称

insecureskip-cert-verify 等跳过验证选项会被拒绝。Cronet 不提供可靠的“忽略证书错误”能力;私有 CA 应通过 certificate-pathcertificate 配置。

UoT v2 是定目标 packet socket:同一 UDP socket 只能收发创建时的目标地址。长度超过调用方缓冲区的数据报会被完整丢弃并返回错误,避免破坏后续帧边界。

许可与发布

WutherCore 默认构建仍为 MIT,且不包含 Naive feature。cronet crate 与 SagerNet/Naive Cronet 原生组件使用 GPL-3.0-or-later;启用、链接或分发 Naive 构建时,发布者必须按 GPL-3.0-or-later 履行相应义务。官方默认 Release 产物不会自动携带该动态库。