sing-box 1.14.0-alpha.40 的重点只有一个:新增 bridge outbound。它把 TUN 或其他 L3 endpoint 收到的 TCP、UDP、ICMP 直接转出网络接口,不走 L3 to L4 translation。别把它当生产升级信号。github.com 仍把 alpha.40 标成 pre-release,稳定 Latest 还是 2026-06-25 发布的 1.13.14。
1.14.0-alpha.40 现在能上生产吗?
不建议。这个版本在 GitHub Releases 里标记为 pre-release,发布日期是 2026-07-07,release notes 只列了 Add bridge outbound 和 fixes/improvements。对生产环境来说,信息还不够厚:没有稳定版标签,没有迁移说明,也没有图形客户端适配节奏。
如果你只是跑 sing-box 下载与配置入口 里的常规客户端配置,优先继续看 1.13.14。它在 Release 列表里仍是 Latest,发布日期是 2026-06-25。alpha.40 适合放在一份独立测试 JSON 里验证,不适合直接替换 systemd、OpenWrt 或长期在线的旁路由内核。
| 版本 | GitHub 标记 | 发布日期 | 适合动作 |
|---|---|---|---|
| 1.14.0-alpha.40 | Pre-release | 2026-07-07 | 测试 bridge outbound 和 L3 转发 |
| 1.14.0-alpha.39 | Pre-release | 2026-07-06 | 观察 L3 forwarding 基础变化 |
| 1.13.14 | Latest | 2026-06-25 | 生产环境继续优先使用 |
bridge outbound 到底补了哪一层?
bridge 是 direct 的 L3 counterpart。这个说法别跳过,它决定了你该把它放在哪一段配置里。
常规 direct outbound 收到的是已经被 sing-box 抽象出来的连接,请求目标、端口、协议都在 L4 语义里处理。bridge 处理的是 L3 连接:TCP、UDP、ICMP 从 TUN、WireGuard、Tailscale 这类入口进来后,可以在 pre-match 阶段直接被 route 到一个 bridge outbound,再从指定网络接口发出去。
Release notes 明确写了一个关键点:不走 L3 to L4 translation。翻成配置语言,就是不要期待它像普通 SOCKS/HTTP 出站那样处理已经建立好的 L4 连接。官方 Bridge 文档也写了:L4 connections will be rejected。
direct 和 bridge 差在哪?
把它们放在同一张表里更清楚。
| 对比项 | direct outbound | bridge outbound |
|---|---|---|
| 配置类型 | "type": "direct" | "type": "bridge" |
| 工作层级 | L4 连接语义 | L3 连接语义 |
| 典型入口 | mixed、socks、http、常规 route | TUN 或其他 L3 endpoint |
| 支持流量 | 常规 TCP/UDP 连接 | TCP、UDP、ICMP 的 L3 流量 |
| 关键限制 | 走 Dial Fields | 需要权限,L4 连接会被拒绝 |
| 生产建议 | 稳定配置可继续用 | alpha 阶段只测试 |
最容易误判的是把 bridge 当成「更底层的 direct」。它不是 direct 的性能开关,也不是把所有出站都改成 bridge 就会更干净。你的流量如果不是从 L3 inbound 进来,或者 route 规则没有在 pre-match 阶段命中它,bridge 不会给普通 profile 带来可见收益。
哪些平台真的能用?
官方文档写得很直:需要权限,支持 Linux、macOS、rooted Android、jailbroken iOS。图形客户端还要再加一层条件。
macOS 上,只有 standalone 版本可用,并且需要 Root Helper。Android 需要 root permission。iOS 需要 jailbreak。没有这些权限,bridge 不会神奇地绕开系统网络栈限制;更可能的结果是启动失败、接口不可用,或者规则命中了但流量被丢掉。
Linux 用户还要留意两个字段:iproute2_table_index 和 iproute2_rule_index。前者只在 Linux 且设置了 interface 时生效,用来给 pinned egress routes 分配路由表索引;后者是 Linux 的 iproute2 rule 起始索引。多实例环境里,这两个值撞车会很难排,日志不看就是玄学。
最小配置长什么样?
下面不是可直接覆盖的完整配置,而是字段骨架。它只说明 bridge outbound 应该出现在 outbounds,并且 route rule 用 action: "route" 指向它。真实配置还要按你的 TUN 入站、地址段、DNS 和默认出站补齐。
{
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"address": ["172.19.0.1/30"],
"auto_route": true
}
],
"outbounds": [
{
"type": "bridge",
"tag": "bridge-out",
"interface": "en0",
"bridge_name": "bridge"
}
],
"route": {
"rules": [
{
"inbound": "tun-in",
"action": "route",
"outbound": "bridge-out"
}
],
"final": "bridge-out"
}
}
配置时先保留一份 config-stable-1.13.14.json,再新建 config-alpha40-bridge.json。两个文件不要共用同一个 systemd service。最小改变量是单独启动 alpha 配置,确认日志里 bridge-out 能加载,再考虑把某一段测试地址导进去。
怎么确认流量走的是 L3 转发?
先确认版本,再看配置,再看日志。命令行用户可以把检查顺序写死,不要边改配置边猜。
sing-box version
sing-box check -c ./config-alpha40-bridge.json
sudo sing-box run -c ./config-alpha40-bridge.json
你要看到的是三类信号。
第一,sing-box version 输出里确实是 1.14.0-alpha.40,不是图形客户端还在加载旧 core。第二,check 阶段没有 unknown outbound type: bridge,否则说明内核版本不对。第三,运行日志里没有权限相关错误,尤其是接口、iproute2 rule、Root Helper、root permission 这一类。
排查时把失败信号归成三类就够了:
| 信号 | 更可能原因 | 先改哪里 |
|---|---|---|
unknown outbound type: bridge | 当前 core 不认识 bridge | 版本和 GUI 内置 core |
| 接口不可用或没有对应路由 | interface、网卡名或系统路由不匹配 | 出口接口和 route 目标 |
| 权限相关错误 | 缺 root、Root Helper、Android root 或 iOS jailbreak | 启动权限和平台条件 |
版本不对、出站网卡不可用、权限不够,三种问题的修法完全不同,别一次性改 route.rules、interface 和启动权限。
哪些配置不要急着迁移?
只用常规 direct、selector、urltest、socks、http 出站的配置,不需要为了 alpha.40 改结构。bridge 解决的是 L3 endpoint 到网络接口的直接转发,不是普通出站选择器的替代品。
正在用 FakeIP 的配置也要小心。官方 Pre-match 文档说明,FakeIP destinations 需要在 pre-match 执行 resolve action,否则连接会被拒绝。也就是说,看到 bridge 支持 TCP/UDP,不代表你的 FakeIP + TUN 配置能无改动搬过去。
旁路由和多网卡环境可以单独测。测试范围建议缩小到一台设备、一个 TUN 入站、一个固定出口接口。Linux 上先记录当前路由表和 rule:
ip rule show
ip route show table all | grep -E "2200|bridge|tun"
如果测试后多出了一组表项,先确认它们对应的是 alpha 配置生成的 iproute2_table_index 和 iproute2_rule_index。回滚时停掉 alpha 进程,再看这些表项是否消失。没消失就别继续扩大测试范围。
这次更新和 alpha.39 的 L3 forwarding 有什么关系?
alpha.39 先补了 L3 forwarding 支持:来自 L3 inbounds 的 TCP/UDP 可以直接转发到 WireGuard 和 Tailscale endpoints,不走 L3 to L4 translation。alpha.40 在这个基础上补了 bridge outbound,让同类 L3 流量可以直接转出网络接口。
这条线索说明 1.14 正在把 L3 inbound、pre-match、route action、endpoint/outbound 这些部件接起来。它不是一个给普通 GUI 用户点开的新按钮,更像内核层把转发路径拆得更细。等 1.14 稳定版出来,再看 GUI 客户端怎么暴露这些选项,会比现在手动把主配置改成 alpha 更稳。
这篇没有覆盖桥接后的吞吐、延迟和多平台稳定性,因为官方 release notes 没给数据,我也没有可复现测试样本。现在能确定的是版本、发布时间、pre-release 状态、支持平台、权限要求,以及 bridge 和 direct 的层级差异。