sing-box TUN 模式开启后断网怎么办?
简答:先关闭 sing-box 的 TUN 开关并恢复系统代理、DNS 和 VPN 状态,再用最小配置验证;不要一开始就重装客户端。若关闭 TUN 后恢复,优先检查 TUN 的 auto_route、strict_route、route.auto_detect_interface、DNS 处理和其他虚拟网卡冲突;若关闭后仍断网,则排查系统代理、残留路由、DNS 和 VPN 权限。本文按 2026-11-03 可核验的 sing-box 文档整理,适用于使用 sing-box 配置或图形客户端的 Windows、macOS、Linux 场景。本站是第三方使用指南,不代表任何客户端官方。
定义:sing-box TUN 模式是通过虚拟网卡接管系统流量的运行方式,开启后断网通常需要在权限、路由、DNS、代理回环和其他网络组件之间分层定位。
先试这一步:关闭 TUN,确认网络能否恢复
如果开启 TUN 后整台设备立刻无法上网,先不要修改大量配置。按下面顺序操作:关闭 sing-box 的 TUN 开关,退出或停止运行实例,关闭其他 VPN、代理客户端和虚拟网络工具,然后等待网络状态重新建立。
- 关闭 TUN:在当前客户端的运行配置中关闭 TUN 或透明代理开关。不同图形客户端的按钮名称可能不同,以实际界面显示为准。
- 恢复系统代理:如果客户端曾开启 HTTP 或 SOCKS 系统代理,先关闭系统代理,避免客户端停止后浏览器仍指向不存在的本地端口。
- 断开并重新连接网络:重新连接 Wi-Fi、网线或移动热点;必要时重启网络适配器。
- 只保留一个网络接管入口:暂时关闭其他 VPN、Clash、虚拟网卡、VMware、WSL、Docker 网络组件,避免多个程序同时修改路由或 DNS。
- 复测:先打开一个已知可访问的网站,再分别测试域名和 IP。不要只依据浏览器页面判断,后文会给出分层检查方法。
如果关闭 TUN 后网络恢复,问题大多集中在 TUN 权限、自动路由、DNS、回环或虚拟网卡冲突;如果仍然断网,则先按“关闭客户端后仍断网”一节恢复系统网络。
sing-box 官方文档说明,TUN 的 auto_route 会把默认路由指向 TUN;同时,route.auto_detect_interface 或默认接口设置用于避免出站连接再次被 TUN 接管形成路由回环。可对照 sing-box TUN 配置文档 和 sing-box Route 配置文档 核对当前字段。
按症状定位:先判断是 DNS、路由、节点还是权限
| 现象 | 优先检查 | 下一步 |
|---|---|---|
| 开启 TUN 后所有网站和应用都断网 | 管理员或 root 权限、TUN 虚拟网卡、auto_route、其他 VPN 冲突 | 关闭其他网络接管程序,用最小配置启动并查看日志 |
| IP 地址可访问,但域名打不开 | DNS 服务、DNS 劫持、系统 DNS 残留 | 分别测试域名解析和 IP 连接,检查 DNS 配置与 TUN 的 DNS 处理方式 |
| 只有浏览器打不开,终端或其他应用正常 | 系统 HTTP 代理、浏览器独立代理、PAC 或代理端口 | 关闭系统代理后重新打开浏览器,确认本地端口是否仍在监听 |
| 只有部分应用无法联网 | strict_route、应用绑定接口、IPv6、分流规则 | 暂时关闭 strict_route 或应用独立代理设置,再看日志中的路由结果 |
| 关闭 sing-box 后仍然没有网络 | 系统代理、DNS、残留路由、VPN 权限或虚拟网卡 | 恢复系统网络设置并重新连接网络,再进行 IP、DNS、网页三层复测 |
| 客户端启动时报配置错误 | 配置字段与当前内核版本不匹配、JSON 格式错误 | 使用同一版本的 sing-box 执行配置检查,不要直接复制旧字段 |
这张表只用于确定排查顺序,不代表所有客户端的菜单或字段都一致。尤其是 TUN、DNS、系统 VPN 和网络权限由不同客户端实现,实际按钮、授权方式和日志位置需要以当前客户端界面为准。
配置与日志检查:先校验,再改 TUN 路由字段
1. 用同一版本执行配置检查
如果使用的是独立 sing-box 命令行程序,可以在配置文件所在目录执行 sing-box check -c config.json。其中 config.json 是演示文件名,实际使用时替换为你的配置文件路径;如果客户端内部使用了多个配置文件或配置目录,应按该客户端提供的检查方式操作。
官方配置说明列出了 sing-box check、sing-box format 和 sing-box merge 等命令。配置检查通过只表示配置能够被解析,不等于节点可用、DNS 正常或系统路由一定正确。可查看 sing-box 配置说明 中的 Check 部分。
2. 临时打开 debug 日志
在配置中加入或修改日志段时,只使用当前版本支持的字段。例如:
{"log":{"level":"debug","timestamp":true}}
这是演示片段,不是可直接替换的完整配置。保存前必须合并到原有 JSON 结构中,并确认没有重复的顶层 log 字段。复测一次后再恢复为 info,避免长期输出大量日志。官方文档列出的日志级别包括 trace、debug、info、warn、error、fatal 和 panic,详见 sing-box Log 配置文档。
3. 重点检查 TUN 与 Route 的关联
auto_route:用于把默认路由设置到 TUN。开启后整机断网,应优先检查权限、虚拟网卡和出站回环。route.auto_detect_interface:在 Linux、Windows 和 macOS 支持,用于让出站连接绑定默认网卡,避免代理自身的连接再次被 TUN 捕获。route.default_interface:如果配置了固定接口,应确认接口名称仍存在;网络从 Wi-Fi 切到网线后,旧接口名可能不再适用。strict_route:Windows 下可阻止部分 DNS 泄漏,但官方文档也提示它可能影响 VirtualBox 等应用;遇到只有虚拟机或特定应用无法联网时,应把它列入排查项。route_address与route_exclude_address:自定义路由范围过窄或排除范围错误时,可能出现部分地址可用、部分地址完全无法连接。
不要为了“先能用”直接删除所有路由字段。建议先备份配置,将改动控制在一个字段,启动后记录结果,失败就回滚上一份配置。
Windows、macOS、Linux 分系统排查路径
Windows
- 确认客户端已获得管理员权限;如果 TUN 虚拟网卡创建失败或启动后马上停止,先查看客户端错误日志。
- 打开系统代理设置,确认没有残留指向
127.0.0.1的 HTTP、SOCKS 或 PAC 地址。端口必须以当前客户端实际监听状态为准,不能照抄示例端口。 - 在命令提示符中执行
ipconfig /all,观察当前物理网卡、TUN 网卡和 DNS 服务器是否存在。命令只用于查看,不会修改网络。 - 执行
nslookup example.com测试域名解析;如果解析失败但网络图标正常,优先排查 DNS,而不是先更换节点。 - 如果只有 VirtualBox、WSL 或特定程序无法联网,暂时测试关闭
strict_route,并逐项恢复其他网络组件。
macOS
- 检查客户端是否获得系统 VPN 或网络扩展授权。权限名称和入口可能随客户端及系统版本变化,以系统设置实际显示为准。
- 关闭其他 VPN、代理工具和网络过滤器,再重新启动 sing-box TUN。
- 使用终端执行
scutil --dns查看系统 DNS 状态;如果 DNS 服务异常,先关闭 TUN 并重新连接 Wi-Fi 或网线。 - 执行
route -n get default查看默认路由接口,确认配置中的固定接口没有指向已不存在的设备。 - 如果只有某个应用异常,先检查该应用是否启用了独立代理、私有 DNS 或网络过滤扩展。
Linux
- 确认运行 TUN、自动路由或 nftables 相关功能时拥有所需权限;没有权限时,TUN 地址和 MTU 可能不会自动配置。
- 执行
ip link查看 TUN 设备是否存在,执行ip route查看默认路由和自定义路由。 - 如果使用自动重定向,检查系统是否具备 nftables 及相关内核支持;官方文档说明 Linux 上的
auto_redirect依赖相应的 nftables 能力。 - 执行
resolvectl status查看 DNS 状态;使用 systemd-resolved 的系统,还要确认 TUN 接口的 DNS 设置没有与物理网卡冲突。 - 如果配置由 systemd 服务启动,可以查看
sudo journalctl -u sing-box --output cat -e;该命令适用于已安装并使用 sing-box systemd 服务的环境。
Linux 的官方安装文档也列出了 systemd 服务的启动、停止和日志命令,可参考 sing-box Package Manager 文档。不同发行版的服务文件、权限和防火墙环境可能不同,不要把命令套用到非 systemd 系统。
关闭 TUN 后仍断网:按顺序恢复系统网络
- 先关闭系统代理:检查 Windows、macOS 或桌面环境的 HTTP、HTTPS、SOCKS、PAC 设置,删除指向已停止本地端口的配置。
- 重新连接物理网络:断开并重新连接 Wi-Fi 或网线;移动设备或笔记本从 VPN 切回普通网络时,也要确认当前连接已经重新建立。
- 刷新 DNS:优先使用系统提供的网络重连或 DNS 刷新方式,不要在没有确认系统类型的情况下照抄其他平台命令。
- 检查默认路由:Windows 使用
route print,macOS 使用route -n get default,Linux 使用ip route。只查看输出,先不要手动删除路由。 - 检查残留虚拟网卡:如果 TUN 设备仍存在但客户端已停止,重新启动客户端后正常关闭 TUN;只有在确认设备属于该客户端且有回滚方案时,才进行系统级清理。
- 最后再重启:如果系统代理、DNS 或 VPN 扩展的状态没有恢复,重启设备通常比直接删除配置更安全。
复测时按三层进行:第一层测试 IP 是否可达,第二层测试域名是否能解析,第三层测试浏览器或目标应用是否能建立连接。只有三层都恢复,才可以判断网络已基本恢复。
复测与回滚:确认不是“看起来恢复”
完成一次改动后,只复测一个变量,并记录结果:
| 测试项目 | 观察结果 | 说明 |
|---|---|---|
| TUN 关闭、系统代理关闭 | 普通网页能否打开 | 用于确认基础网络是否恢复 |
| 域名解析 | nslookup example.com 是否返回结果 | 失败时优先看 DNS |
| IP 层连接 | 系统提供的连通性测试是否成功 | 用于区分 DNS 与路由问题 |
| 仅启动 sing-box,不开 TUN | 本地代理入口是否能使用 | 用于判断节点或出站是否基本可用 |
| 重新开启 TUN | 网页、终端、目标应用是否同时正常 | 用于确认问题是否由 TUN 路由或 DNS 触发 |
如果重新开启 TUN 后立即复现,回滚最近一次配置改动,不要同时更换节点、DNS、MTU 和路由规则。若当前配置包含旧版字段,先核对安装版本对应的文档;官方迁移说明显示,TUN 的部分字段会在不同版本中新增、弃用或改变行为,不能把旧教程中的字段当成所有版本通用配置,可查看 sing-box Migration 文档。
MTU、IPv6、防火墙和 Docker、VMware、WSL 等虚拟网络组件属于后置排查项。只有在权限、DNS、默认路由、回环和其他 VPN 冲突排除后,再一次只调整一个变量,并保留原始配置作为回滚版本。
常见问题
sing-box 开启 TUN 后全部断网,第一步应该做什么?
先关闭 TUN 和系统代理,退出其他 VPN 或代理软件,再重新连接 Wi-Fi 或网线。确认基础网络恢复后,再检查权限、auto_route、DNS 和虚拟网卡,不建议一开始重装客户端。
sing-box TUN 开启后能打开 IP,但域名打不开怎么办?
这通常应先按 DNS 故障排查。执行系统对应的域名解析测试,确认 DNS 是否返回结果;同时检查 TUN 的 DNS 处理、系统 DNS 残留和其他 VPN 是否仍在接管 DNS。
为什么关闭 sing-box 后浏览器仍然无法上网?
常见原因是系统代理或 PAC 仍指向已停止的本地端口,也可能存在残留 VPN、DNS 或路由状态。先关闭系统代理并重新连接网络,再分别测试网页、域名解析和 IP 连通性。
strict_route 是否应该直接关闭?
不应直接把它当成通用修复项。官方文档说明它在 Windows 下可能影响 VirtualBox 等应用;如果只有虚拟机或特定程序异常,可以临时关闭进行对照测试,确认结果后再决定是否保留。
sing-box 配置检查通过,为什么开启 TUN 仍然断网?
配置检查主要用于确认文件能被解析,不等于权限、系统路由、DNS、节点连接和虚拟网卡都正常。还需要查看 debug 日志,并逐项确认 auto_route、auto_detect_interface、DNS 和其他网络接管程序。