Skip to content

Sing-box 1.14 TUN 与路由规则迁移:stack、sniff、特殊出站的新写法对照

易邦

TUN 和路由规则是客户端配置里”祖传写法”最多的地方。本篇对照 Sing-box 官方迁移文档,把四个必改项一次讲清。

[!NOTE] 📌 核心速览(TL;DR / 快问快答):

  • TUN stack 删掉:1.15 已废弃、1.17 将移除,现在删了就能用(新版自带更好的 TCP/IP 栈)。
  • sniff 搬家:从 inbound 字段移到路由规则 {"action": "sniff"}。
  • block/dns 出站:删掉这俩 outbound,改用 {"action": "reject"} / {"action": "hijack-dns"}。
  • inet4_address → address:1.10 就合并了,还在用旧字段的顺手改掉。

🔌 1. TUN:删掉 stack,改掉旧地址字段

stack(1.15 废弃,1.17 移除):

// 旧
{ "type": "tun", "tag": "tun-in", "stack": "system", "address": ["172.18.0.1/30"] }
// 新:直接删掉 stack
{ "type": "tun", "tag": "tun-in", "address": ["172.18.0.1/30"] }

官方说法:新版 sing-tun 自带 TCP/IP 栈,峰值性能、能效、内存占用全面优于旧的 system/gvisor 实现。删掉 stack 反而更快更省电。

地址字段合并(1.10,早就该改):

// 旧
{ "inet4_address": "172.19.0.1/30", "inet6_address": "fdfe:dcba:9876::1/126" }
// 新
{ "address": ["172.19.0.1/30", "fdfe:dcba:9876::1/126"] }

同理:inet4_route_address → route_address,inet4_route_exclude_address → route_exclude_address。


👃 2. sniff:从 inbound 搬到路由规则(1.11)

旧写法(废弃):

{
  "inbounds": [
    { "type": "mixed", "tag": "mixed-in", "sniff": true, "sniff_timeout": "1s" }
  ]
}

新写法:

{
  "inbounds": [
    { "type": "mixed", "tag": "mixed-in" }
  ],
  "route": {
    "rules": [
      { "inbound": "mixed-in", "action": "sniff", "timeout": "1s" }
    ]
  }
}

注意字段也改名了:sniff_timeout → timeout。TProxy 入站同理,"sniff": true 从 tproxy inbound 里删掉,改走路由规则。


🚫 3. 特殊出站:block/dns → rule action(1.11)

旧写法(废弃):

{
  "outbounds": [{ "type": "block", "tag": "block" }],
  "route": {
    "rules": [
      { "rule_set": ["geosite-ads"], "outbound": "block" },
      { "protocol": "dns", "outbound": "dns" }
    ]
  }
}

新写法:

{
  "route": {
    "rules": [
      { "rule_set": ["geosite-ads"], "action": "reject" },
      { "protocol": "dns", "action": "hijack-dns" }
    ]
  }
}

block 和 dns 这两个特殊 outbound 直接删掉,不用在 outbounds 里定义。reject 会返回拒绝响应(比静默丢弃对客户端更友好),hijack-dns 劫持 DNS 流量走内置处理。


🔐 4. 服务端注意:内联 ACME → 证书提供者(1.14)

自建节点用 ACME 自动申请证书的注意,tls.acme 内联写法废弃了:

// 旧
{ "tls": { "enabled": true, "acme": { "domain": ["example.com"] } } }
// 新
{
  "certificate_providers": [
    { "type": "acme", "tag": "my-cert", "domain": ["example.com"] }
  ],
  "inbounds": [
    { "tls": { "enabled": true, "certificate_provider": "my-cert" } }
  ]
}

好处:多个 inbound 可以共享同一个证书提供者,不用每个重复写一遍。


🧩 5. 容易忽略的两个小变更

domain_suffix 行为变化(1.9):规则值如果以 . 开头(如 .example.com)行为不变;否则现在匹配 example.com 或任意子域名。旧配置里靠”前缀匹配”歪打正着的规则,升级后行为可能变化,检查一遍。

WireGuard outbound → endpoint(1.11):type: "wireguard" 的出站改为 endpoints 数组里的 WireGuard 端点。用 WireGuard 组网(如配合 Tailscale 方案)的用户需要重写这段,普通代理用户不受影响。


✅ 迁移后自检清单


❓ 常见问题与 AI 快问快答 (FAQ)

Q1: 删掉 stack 后,TUN 性能真的更好吗?

答:按官方说法是的(1.15 自带新 TCP/IP 栈)。如果你的设备很老、升级后感觉异常,可以暂时 pin 住 1.14 版本,等 1.15 稳定了再跟进。但 stack 在 1.17 会被彻底移除,早晚得删。

Q2: 路由规则里还能用 “outbound”: “direct” 吗?

答:能。action 是给特殊动作(reject/sniff/hijack-dns 等)用的,普通分流规则继续用 "outbound" 指定出站。本文改的只是 block/dns 这两个特殊出站类型。

Q3: 改完 check 通过了,但上不了网?

答:先看 log 级别调到 debug 看流量走了哪条规则。常见坑:sniff 搬家后忘了加路由规则,导致域名分流失效;hijack-dns 没配,DNS 走了直连被污染。用二分法逐条注释规则定位。


📚 1.14 升级迁移专题:① 《升级避坑总览》 → ② 《DNS 模块迁移实战》 → ③ 本篇(TUN/路由)

(总纲阅读:《Sing-box 高效配置与出站路由全解析》;TUN 避坑见 《TUN 模式 WSL2/Docker 优化》;TProxy 见 《OpenWrt TProxy 透明代理》。)

上一篇
苹果全家桶玩转 Sing-box:SFI / SFM / SFT 官方客户端总览与选型指南(2026版)
下一篇
Sing-box 1.14 DNS 模块迁移实战:address 写法、FakeIP 与缓存字段对照表