sing-box TUN 模式无法连接网络怎么办?
简答:sing-box TUN 模式无法连接网络时,先关闭其他 VPN、系统代理和虚拟网络软件,再执行 sing-box check 检查配置,并观察日志里是否出现请求、DNS、route、dial 或 permission denied。若 TUN 已启动但仍断网,优先检查 auto_route、auto_detect_interface、DNS 处理和代理出站,最后用最小配置做 A/B 测试,不要一开始就盲目更换节点。
定义:sing-box TUN 模式是通过虚拟网络接口接管系统流量,再依据 DNS、路由规则和出站配置转发请求的工作方式。
先试这一步:按症状快速分流
先完全停止 sing-box,确认普通网络可以正常访问;然后只启动 sing-box 的 TUN,暂时关闭其他 VPN、系统代理、网络加速器、Docker、WSL、虚拟机网络和旧的虚拟网卡。sing-box 官方将客户端代理方式区分为系统代理、防火墙重定向和虚拟接口,其中 TUN 属于虚拟接口,接管范围比普通 HTTP 系统代理更广。官方代理客户端说明
| 现象 | 优先检查 | 下一步 |
|---|---|---|
| 开启 TUN 后所有网络断开 | 权限、路由回环、其他 VPN、auto_route | 查看启动日志,再关闭 TUN 恢复网络 |
| IP 地址可以访问,但域名打不开 | DNS server、dns_mode、dns_address、DNS 规则 | 先用 IP 与域名分别测试 |
| 只有部分应用不能用 | 应用是否使用系统代理、UDP/ICMP 是否被接管、分应用规则 | 检查该应用是否进入 TUN 以及命中的 outbound |
| TUN 显示已启动,但流量仍直连 | auto_route、系统代理模式、route 规则和 final | 检查日志是否有请求进入及最终出站 |
| 启动时报 permission denied | Windows 管理员权限、Linux 权限、Apple 网络扩展、Android VPN 授权 | 按平台重新授权后再启动 |
判断原则:日志中没有任何请求,先查 TUN 或系统接管;有请求但 DNS 失败,查 DNS;DNS 成功但 dial 失败,查代理出站和节点可达性;请求命中 direct 或 block,则查 route 规则和 final。
按固定顺序排查:配置、保存、校验、重载、日志、业务验证
- 备份配置:先复制当前 JSON 文件,保留原文件名和配置目录。不要把订阅链接、UUID、密码、私钥、Cookie 或完整节点参数发到公开平台。
- 编辑配置:先只保留一个 TUN 入站、一个代理出站、一个 direct 出站,删除暂时不用的规则集、复杂 DNS 规则和额外入站。
- 保存并校验:在 macOS/Linux Bash 或兼容 Shell 中执行
sing-box check -c config.json;Windows PowerShell 中使用.\sing-box.exe check -c .\config.json。官方配置文档列出了sing-box check检查命令。sing-box 官方配置文档 - 重新载入:先停止旧进程,再启动新配置,避免旧进程继续占用端口、虚拟网卡或系统代理。
- 查看日志:将日志级别暂时调为
debug,启动后观察是否出现 TUN 创建、DNS 请求、路由匹配、出站拨号和权限错误。官方日志字段支持trace、debug、info等级别。sing-box 官方日志配置 - 验证业务:先测试一个普通网页,再测试域名解析、命令行请求和实际应用。每次只改一个变量,并记录改动前后的日志结果。
如果校验通过但启动后仍断网,说明问题可能不在 JSON 语法,而在权限、虚拟接口、路由、DNS、出站连接或系统网络冲突。check 通过并不等于节点一定可达,也不等于系统已经正确接管全部流量。
可复制的最小 TUN 配置思路
下面是用于定位 TUN、DNS 和路由问题的结构示例,不包含任何具体节点参数。你需要把代理出站替换成自己已经确认格式正确的出站,并让 route.final 指向该出站。该示例采用 sing-box 官方文档中出现的 TUN、DNS、路由字段,适合先做结构化排查,不代表所有平台都能直接复制运行。
{
"$schema": "https://sing-box.sagernet.org/schema.json",
"log": {
"level": "debug",
"timestamp": true
},
"dns": {
"servers": [
{
"tag": "local",
"type": "local"
}
],
"strategy": "prefer_ipv4",
"final": "local"
},
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"address": ["172.19.0.1/30"],
"auto_route": true,
"strict_route": true
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
},
{
"type": "URL协议出站",
"tag": "proxy"
}
],
"route": {
"auto_detect_interface": true,
"rules": [
{
"protocol": "dns",
"action": "hijack-dns"
},
{
"ip_is_private": true,
"outbound": "direct"
}
],
"final": "proxy"
}
}上面的 URL协议出站 只是占位文字,不能直接运行,必须替换成真实且与当前 sing-box 版本兼容的出站对象。若你只是测试 TUN 是否造成断网,也可以临时把 route.final 改成 direct:如果改成 direct 后网络恢复,TUN 和系统路由可能基本正常,问题更可能位于代理出站、节点参数或出站拨号。
官方 TUN 文档说明,启用 auto_route 时应通过 route.auto_detect_interface、route.default_interface 或出站的 bind_interface 避免流量回环;Linux 还可使用 auto_redirect 改善 TUN 路由处理。sing-box 官方 TUN 配置 sing-box 官方 Route 配置
DNS、路由和回环:最容易误判的三类问题
1. 只有域名打不开:先区分 DNS 和代理出站
在 TUN 已启动的情况下,如果可以连接已知 IP,但域名访问失败,优先查看 DNS 日志。sing-box 的 DNS 配置包含服务器、规则、默认服务器和解析策略;prefer_ipv4、ipv4_only 等策略会影响 A/AAAA 解析结果。sing-box 官方 DNS 配置
如果使用 1.14.0 或更高版本的配置字段,还要核对 TUN 的 dns_mode 和 dns_address。官方文档说明,hijack 会在原生 DNS 处理之外增加 DNS 流量劫持;Windows 开启 strict_route 时,非 TUN 接口上的 53 端口流量可能被阻止。字段兼容性必须结合实际运行版本确认。
2. 开启 TUN 后全局断网:检查回环和默认路由
当 sing-box 把代理服务器自身的连接也重新送回 TUN,可能出现循环拨号、全部连接超时或启动后立即断网。先确认 route.auto_detect_interface 是否启用;在 Linux、Windows 和 macOS 上,官方文档将其定义为默认把出站连接绑定到默认网卡,以减少 TUN 下的路由回环。也可以在明确知道物理网卡名称时使用 default_interface,但不要同时依赖互相冲突的设置。
3. 规则命中错误:检查 final、direct 和 block
如果日志显示请求已经进入,但命中了 direct 或 block,这不是 TUN 本身失效,而是路由规则结果。先临时保留 DNS 劫持、私有地址直连和一个 final 出站,再逐条恢复规则集。官方 Route Rule 文档说明,域名、IP、端口和其他条件可以组合匹配,规则顺序和最终出站会直接影响请求去向。sing-box 官方路由规则
Windows、macOS、Linux、Android 的入口差异
| 平台 | 先确认什么 | 常见处理 |
|---|---|---|
| Windows | 是否以管理员身份运行;是否存在其他 VPN、虚拟网卡或旧系统代理 | 用管理员权限重新启动;暂时关闭其他 VPN 和系统代理;检查 TUN 与 strict_route 对虚拟机软件的影响 |
| macOS | 是否批准 Network Extension;是否启用了其他 VPN 配置 | 在系统网络设置中检查 VPN 和网络扩展授权;停止其他 VPN 后重新载入配置 |
| Linux | 是否具备创建 TUN、修改路由和使用 nftables 的权限 | 先用普通 TUN 配置测试;确认权限后再启用 auto_redirect;检查 Docker、桥接网卡和策略路由 |
| Android | 是否允许 VPN;是否有其他 VPN 或分应用规则;是否误用桌面端字段 | 重新批准 VPN;关闭其他 VPN;先取消 include/exclude package 等复杂限制,再测试全局 TUN |
官方客户端资料显示,Android 图形客户端通过 Android VpnService 提供非特权 TUN;Apple 图形客户端通过 NetworkExtension 提供非特权 TUN,因此部分桌面端字段在移动平台不可用或由系统管理。Android 客户端还明确标注 strict_route 未实现,不能把 Windows 或 Linux 的排查结论直接套用到 Android。官方 Android 客户端特性 官方 Apple 客户端特性
最小化 A/B 测试:不要一次改十处
- 保留一个 TUN、一个 direct、一个已经确认格式正确的代理出站。
- 先把
route.final指向 direct,检查开启 TUN 后普通网络是否恢复。 - 如果 direct 正常,再把 final 改回 proxy,观察日志中的 dial、TLS、超时或认证错误。
- DNS 先只保留一个可用服务器,确认域名解析后再增加 DNS 规则。
- 确认基础连接后,再恢复规则集、分流、IPv6、应用过滤和其他入站。
- 每次改动后都重新执行
sing-box check -c 配置文件,再重新载入并验证。
结果解释:direct 也无法联网,优先查 TUN 权限、系统路由、DNS 或其他网络软件;direct 正常而 proxy 失败,优先查代理出站、服务器地址、端口、TLS 参数和网络可达性;网页正常但某应用失败,优先查该应用是否使用 UDP、是否绕过系统代理或是否被分应用规则排除。
需要提交日志时,只保留时间、错误类型、是否出现请求和出站标签等必要信息;节点域名、IP、端口、UUID、密码、私钥、订阅链接和 Cookie 应先脱敏。
常见问题
sing-box TUN 已启动,为什么浏览器还是打不开?
先确认浏览器请求是否出现在 sing-box 日志中。如果没有,请检查系统是否真的启用了 TUN、是否被其他 VPN 抢占,以及浏览器是否使用了独立代理设置。如果有请求但失败,继续查看 DNS、route 命中结果和代理出站拨号错误。
把 strict_route 关闭后就能上网,要不要一直关闭?
不要直接把它当成永久修复。官方文档说明,Windows 上 strict_route 可用于减少普通多网卡 DNS 解析造成的泄漏,但也可能影响 VirtualBox 等部分应用;Linux 上它还会影响不支持网络的处理方式。应先确认是哪个应用或路由受影响,再决定是否保留,并记录关闭后的安全与兼容性取舍。
为什么 sing-box check 通过,启动后仍然无法联网?
check 主要用于验证配置能否被解析和初始化,不能证明代理服务器可达、系统权限已批准、DNS 一定可用或规则符合预期。校验通过后仍需重新载入、查看日志并进行真实业务测试。
Android 上可以直接使用桌面端的 strict_route 和 auto_redirect 吗?
不能直接照搬。官方 Android 客户端特性表标注了部分 TUN 字段的可用性和限制,其中 strict_route 未实现,auto_redirect 也涉及 root 服务等条件。Android 应先确认 VPN 授权、应用过滤和其他 VPN 冲突,再按当前客户端支持的字段调整。
DNS 泄漏或 DNS 解析失败时,应该先改 DNS 服务器还是先改 TUN?
先看日志确认 DNS 请求是否进入 sing-box。如果请求没有进入,先查 TUN 接管和 DNS 劫持;如果请求进入但上游超时,再检查 DNS server、解析策略和代理路径。不要同时更换多个 DNS、路由和节点,否则无法判断是哪一项产生了变化。
参考资料
本文仅依据 sing-box 官方配置与客户端文档整理,版本字段可能随 sing-box 更新变化;涉及具体配置时,应以当前版本对应的官方文档和本地 sing-box version 输出为准。
常见问题
sing-box TUN 已启动,为什么浏览器还是打不开?
先看日志中是否有浏览器请求。没有请求时检查 TUN 接管、其他 VPN 和浏览器独立代理;有请求时继续检查 DNS、路由命中和代理出站拨号错误。
sing-box check 通过后仍然无法联网怎么办?
check 只能说明配置可以被检查,不能证明节点可达、系统权限有效或 DNS 正常。还要重新载入配置、查看 debug 日志,并分别验证 direct、DNS 和 proxy 出站。
strict_route 关闭后恢复网络,是否应该一直关闭?
不一定。strict_route 可能影响部分虚拟机或多网卡环境,但也用于减少某些 DNS 泄漏路径。应先定位具体冲突应用,再根据兼容性和网络需求决定。
Android 能否照搬 Windows 或 Linux 的 TUN 配置?
不能完全照搬。Android 图形客户端通过 VpnService 管理 TUN,部分字段不可用或由系统管理;应优先检查 VPN 授权、其他 VPN、应用过滤和当前客户端支持范围。
如何判断是 DNS 问题还是代理节点问题?
如果请求没有 DNS 响应,先查 DNS;如果 DNS 成功但代理出站 dial、TLS 或认证失败,再查节点参数和网络可达性。用 direct 与 proxy 分别测试,比同时换 DNS 和节点更容易定位。