sing-box TUN 模式无法上网怎么办?按 DNS、路由和权限排查
简答:先关闭 TUN,确认普通直连和节点本身是否正常;如果直连正常,再按权限、auto_route、DNS、路由命中和其他 VPN 冲突逐项检查。不要同时修改多个字段:先记录 sing-box 内核版本、平台、首条日志,再一次只改一个变量。
定义:sing-box TUN 模式是通过虚拟网络接口接管系统流量,再由 sing-box 根据 DNS、路由规则和出站配置决定直连或代理;开启后无法上网,通常要区分 TUN 接管、DNS 解析、路由回环、权限和节点连接几个层级。
先试这一步:关闭 TUN,判断故障在哪一层
如果开启 TUN 后所有应用都断网,先停止 TUN,恢复系统原有网络,再分别测试普通网页、节点连接和 DNS。这个动作只用于缩小范围,不代表最终修复。
- 关闭 TUN 或退出客户端,确认普通网络可以访问。
- 在不开 TUN 的情况下测试同一出站或节点,记录是否仍然连接失败。
- 重新开启 TUN,只观察第一条错误日志,不要立刻更换节点、DNS 和 MTU。
- 用配置文件检查命令验证 JSON 和字段兼容性:
sing-box check -c config.json。官方配置文档同时提供了format和merge命令,适合先整理或合并配置。
sing-box 使用 JSON 配置,TUN 配置字段会随版本变化。以 2026-10-28 检索到的官方文档为准,dns_mode、dns_address 从 1.14.0 起提供,stack 已在 1.15.0 废弃,不能把旧配置字段直接当作当前版本的兼容证明。参考:官方配置结构与检查命令、官方 TUN 字段说明。
按现象分流:先看哪一类问题
| 现象 | 优先检查 | 下一步 |
|---|---|---|
| 启动 TUN 立即全局断网 | 权限、auto_route、默认路由、其他 VPN | 关闭 TUN 恢复网络,再查看首条启动错误 |
| IP 可连接但域名打不开 | dns_mode、dns_address、DNS 劫持规则 | 分别测试 disabled、native、hijack,且一次只改一个值 |
| 只有部分网站打不开 | route 规则、Direct/Proxy/Block 命中 | 查看目标域名实际命中的路由和出站 |
| 运行一段时间后断流 | IPv6、UDP、MTU、网络切换和系统休眠 | 先固定 IPv4 测试,再单独检查 MTU 或 UDP |
| 日志出现 permission denied | 管理员、root、VPN 或网络扩展授权 | 补齐权限后重启客户端,不要先改路由字段 |
检查 TUN 权限与平台差异
Windows:确认客户端以需要的权限运行,并检查是否同时启用了其他 VPN、虚拟网卡或安全软件过滤。官方文档说明,strict_route 会限制不支持的网络,并可减少 Windows 普通多宿主 DNS 解析带来的泄漏,但也可能影响某些应用。若开启后只有特定软件失效,可暂时关闭 strict_route 做 A/B 测试;测试结束后恢复原值。
Linux:TUN 路由通常需要相应网络管理权限。官方建议在启用 auto_route 时设置 route.auto_detect_interface、route.default_interface 或出站的 bind_interface,避免节点连接再次被送回 TUN 形成回环。Linux 场景还应优先核对 auto_redirect、nftables 和内核 NFQUEUE 支持。
Android:图形客户端需要系统 VPN 授权;如果设备上还有其他 VPN、分应用代理或始终开启的 VPN,先全部停用后再测试。Android 的应用包含与排除规则需要结合实际客户端支持情况,不能只复制桌面端配置。
macOS:检查系统网络扩展是否获得授权,并留意 Apple 平台对部分 TUN 字段的实现差异。官方客户端文档列出了可用和未实现的 TUN 选项,因此不要把 Windows 或 Linux 的字段行为直接套用到 macOS。
平台客户端列表和实现差异可查看 sing-box 官方图形客户端说明 与 Apple 平台 TUN 特性说明。
DNS 排查:只改一个变量并记录结果
- 先判断是否为 DNS 问题:如果能访问已知 IP,但域名解析失败,优先检查 DNS;如果 IP 和域名都失败,继续检查路由、出站或权限。
- 查看 TUN 的
dns_mode。官方定义中,disabled不配置原生 DNS,也不劫持 DNS;native尝试配置平台原生 DNS;hijack在此基础上增加 53 端口处理。 - 若配置了
dns_address,确认它与 DNS 路由规则能够对应;不要只填写地址,却没有可用的 DNS 出站或hijack-dns处理。 - 分别测试
disabled、native、hijack,每次重启 TUN 并记录“域名是否解析、网页是否建立连接、日志是否出现 DNS lookup failed”。
官方文档还说明,启用 auto_route 时,hijack 通常是默认 DNS 模式;Windows 开启 strict_route 时,非 TUN 接口上的 53 端口流量可能被阻止。由此可见,DNS 失败不一定代表节点失效,也可能是 TUN 接管和 DNS 路由没有配套。参考 TUN 的 dns_mode 与 dns_address 说明、官方 DNS 配置说明。
路由与回环:重点核对 auto_route 和出站路径
auto_route 会把默认路由设置到 TUN。如果节点服务器本身的连接也被重新送入 TUN,可能出现连接超时、反复重连或全局断网。优先确认 route.auto_detect_interface、route.default_interface 或出站 bind_interface 至少有一套正确的底层接口选择。
再检查路由规则是否把目标误判为 Direct、Proxy 或 Block。私网地址、局域网地址、DNS 流量和默认出站应分别观察,不能用单次 ping 成功证明代理链路完整可用。
- 命中
Block:检查域名、IP、规则集和优先级。 - 命中
Direct:确认这是否符合预期,避免把需要代理的目标直接连接。 - 命中
Proxy但超时:检查节点连接、出站认证、TLS 握手和底层网络。 - 路由表异常:先关闭 TUN 恢复系统路由,再重新启动客户端,避免残留规则继续影响网络。
日志关键词速查与恢复标准
| 日志关键词 | 可能范围 | 处理动作 |
|---|---|---|
permission denied、operation not permitted | TUN、VPN、root 或网络扩展权限 | 补齐平台权限并重新启动 |
DNS lookup failed | DNS 出站、dns_mode、劫持规则 | 单独测试 DNS 模式和 DNS 出站 |
dial timeout | 节点不可达、路由回环或网络丢包 | 关闭 TUN 测节点,再核对底层接口 |
TLS handshake | 目标连接、系统时间、证书或链路质量 | 确认系统时间和出站参数,避免直接改 MTU |
address already in use | 端口被其他客户端占用 | 停止冲突程序或更换监听端口 |
恢复标准应至少包括:关闭 TUN 后普通网络恢复;重新开启后客户端日志不再持续报错;域名能够解析;目标应用能建立连接;关闭客户端后系统路由和 DNS 能恢复。单个网站可访问、ping 成功或一次测速通过,都不能单独证明 TUN 已完全正常。
常见错误做法:为什么越改越乱
- 一上来换节点:如果关闭 TUN 后节点本身可用,问题更可能在权限、DNS 或路由,不应先扩大变量。
- 同时改 DNS、MTU、IPv6 和路由:这样无法知道真正起作用的改动,建议一次只改一个参数。
- 复制旧版 stack 配置:官方已标记
stack在 1.15.0 废弃,并计划在 1.17.0 移除;当前版本应按官方迁移说明核对。 - 把配置片段当成成品:缺少出站、认证、DNS 或路由上下文的片段不能直接运行,先用完整配置执行
sing-box check。
结论:最短排查顺序
- 关闭 TUN,确认普通直连和节点是否正常。
- 记录平台、客户端类型、sing-box 内核版本和首条错误日志。
- 确认 TUN、VPN、root、管理员或网络扩展权限。
- 检查
auto_route与底层接口选择,排除回环。 - 分别测试 DNS 模式和 DNS 出站。
- 查看路由实际命中 Direct、Proxy 还是 Block。
- 最后再单独测试 IPv4/IPv6、UDP、MTU 和系统网络切换。
如果某一步恢复了网络,保留测试结果并撤销无效改动;若配置检查通过但仍无法连接,再将问题拆成“节点连接失败”或“系统流量未正确进入 TUN”两个独立方向。
本文是第三方使用指南,相关客户端版本、系统权限和字段行为应以当前客户端及官方文档为准。
常见问题
sing-box 开启 TUN 后全部断网,应该先换节点吗?
不建议。先关闭 TUN,确认普通直连和同一节点是否正常;如果不开 TUN 时节点可用,应优先检查权限、auto_route、DNS、路由回环和其他 VPN 冲突。
sing-box TUN 的 dns_mode 应该选 disabled、native 还是 hijack?
没有脱离平台和配置的固定答案。disabled 不接管原生 DNS,native 尝试配置平台 DNS,hijack 还会处理 53 端口。建议一次只测试一个模式,并同时检查 DNS 出站和 hijack-dns 规则。
sing-box 配置里的 stack 还能继续使用吗?
官方文档已将 stack 标记为 1.15.0 废弃,并说明计划在 1.17.0 移除。旧配置是否还能运行取决于实际内核版本,建议先执行配置检查,并按当前版本文档移除或迁移该字段。
sing-box check 通过后就代表 TUN 一定能上网吗?
不是。check 主要用于验证配置结构和字段,不能证明系统权限、路由、DNS、节点认证、TLS 或实际链路都正常。配置通过后仍需启动 TUN、观察日志并测试域名和目标应用。
为什么 ping 通但浏览器仍然打不开?
ping 只覆盖特定 ICMP 路径,不能证明 DNS、TCP、TLS、代理出站和应用规则都正常。应继续查看域名解析、路由命中、连接建立和 TLS 日志。