Bocchi

sing-box TUN 模式无法上网怎么办?按 DNS、路由和权限排查

更新于 2026-10-28 · bocchi.icu

简答:先关闭 TUN,确认普通直连和节点本身是否正常;如果直连正常,再按权限、auto_route、DNS、路由命中和其他 VPN 冲突逐项检查。不要同时修改多个字段:先记录 sing-box 内核版本、平台、首条日志,再一次只改一个变量。

定义:sing-box TUN 模式是通过虚拟网络接口接管系统流量,再由 sing-box 根据 DNS、路由规则和出站配置决定直连或代理;开启后无法上网,通常要区分 TUN 接管、DNS 解析、路由回环、权限和节点连接几个层级。

先试这一步:关闭 TUN,判断故障在哪一层

如果开启 TUN 后所有应用都断网,先停止 TUN,恢复系统原有网络,再分别测试普通网页、节点连接和 DNS。这个动作只用于缩小范围,不代表最终修复。

  1. 关闭 TUN 或退出客户端,确认普通网络可以访问。
  2. 在不开 TUN 的情况下测试同一出站或节点,记录是否仍然连接失败。
  3. 重新开启 TUN,只观察第一条错误日志,不要立刻更换节点、DNS 和 MTU。
  4. 用配置文件检查命令验证 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 排查:只改一个变量并记录结果

  1. 先判断是否为 DNS 问题:如果能访问已知 IP,但域名解析失败,优先检查 DNS;如果 IP 和域名都失败,继续检查路由、出站或权限。
  2. 查看 TUN 的 dns_mode。官方定义中,disabled 不配置原生 DNS,也不劫持 DNS;native 尝试配置平台原生 DNS;hijack 在此基础上增加 53 端口处理。
  3. 若配置了 dns_address,确认它与 DNS 路由规则能够对应;不要只填写地址,却没有可用的 DNS 出站或 hijack-dns 处理。
  4. 分别测试 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 permittedTUN、VPN、root 或网络扩展权限补齐平台权限并重新启动
DNS lookup failedDNS 出站、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。

结论:最短排查顺序

  1. 关闭 TUN,确认普通直连和节点是否正常。
  2. 记录平台、客户端类型、sing-box 内核版本和首条错误日志。
  3. 确认 TUN、VPN、root、管理员或网络扩展权限。
  4. 检查 auto_route 与底层接口选择,排除回环。
  5. 分别测试 DNS 模式和 DNS 出站。
  6. 查看路由实际命中 Direct、Proxy 还是 Block。
  7. 最后再单独测试 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 日志。

相关阅读

参考资料

  1. sing-box 官方 TUN 配置文档
  2. sing-box 官方配置结构、检查与格式化命令
  3. sing-box 官方客户端与 TUN 使用说明
  4. sing-box 官方 Apple 平台 TUN 特性说明
  5. sing-box 官方图形客户端列表
  6. SagerNet sing-box 官方 GitHub Releases
  7. sing-box.sagernet.org