AmyTelecom - 2026顶级网络加速专线 | 极速秒开流媒体与AI的机场推荐

sing-box TUN 模式连接失败:先判断 TUN、DNS、路由还是节点故障

更新于 2026-11-03 · amytelecom.top

简答:先关闭 TUN,确认普通代理或直连网络是否恢复;再备份配置并运行 sing-box check,最后根据日志判断是 TUN 创建、DNS、路由还是节点出站失败。关闭 TUN 后恢复,优先查本机权限、DNS 接管和默认路由;只有域名失败查 DNS,只有单个节点失败再查节点或服务端。

定义:sing-box TUN 模式是通过虚拟网卡接管系统流量的工作方式,连接失败通常发生在 TUN 创建、DNS 解析、路由接管或代理出站其中一层。

先做三步速查:不要一开始就换节点

本文是第三方使用指南,不是 sing-box 或其他客户端的官方网站。排查时先把故障分层,否则同时修改 DNS、MTU、路由和节点,很难知道哪一步真正生效。

首屏故障决策表
现象第一步优先怀疑结果判断
TUN 一开启就报错或自动关闭关闭 TUN,查看第一条启动错误权限、虚拟网卡、字段或版本差异接口未出现或进程退出,先处理本机创建失败
TUN 显示运行但所有网页打不开关闭 TUN,看普通网络是否恢复DNS、默认路由、回环或系统代理冲突关闭后恢复,问题集中在 TUN 接管链路
只有域名打不开,已有 IP 连接仍在用 nslookup 或系统 DNS 测试dns_mode、DNS 出站或劫持规则解析失败而路由正常,优先查 DNS
只有一个节点失败用同一配置测试其他节点端口、TLS、协议或服务端状态其他节点可用时,不要先改 TUN
所有节点都失败,普通代理也失败检查出站配置和端口可达性节点地址、端口、时间或服务端连通性本机 TUN 不是唯一可能原因
  1. 关闭 TUN,并确认浏览器或普通代理是否恢复。
  2. 复制当前配置和日志,再运行 sing-box check -c config.json。
  3. 根据第一条明确错误一次只改一个变量,优先从权限、DNS、路由、出站顺序排查。

官方配置说明将 JSON 配置检查与运行时网络行为分开;sing-box check 只能帮助发现配置结构或字段问题,不能证明 TUN 接口、DNS、路由和节点连接都正常。可参考 sing-box 配置引言。

安全回滚:先恢复网络,再逐项恢复 TUN

  1. 备份:复制配置文件,保留故障发生时的日志、系统版本和 sing-box 版本。
  2. 关闭接管:关闭 TUN;如果仍无法联网,再关闭系统代理、其他 VPN 或分应用代理。
  3. 确认直连:测试一个已知可访问的 IP 和一个域名,确认普通网络与解析都恢复。
  4. 校验配置:运行 sing-box check -c config.json,只修复命令明确指出的字段问题。
  5. 最小恢复:先只启用 TUN 和现有出站,不要同时加入自定义 DNS、严格路由、自动重定向或 MTU 修改。
  6. 逐项增加:按 DNS、路由、严格路由、Linux 自动重定向的顺序,每次只恢复一项。

如果关闭 TUN 后网络仍未恢复,不要继续修改 TUN 配置;先检查系统代理、其他 VPN、DNS 设置和节点出站。任何删除系统路由或防火墙规则的操作都应延后,优先使用只读检查。

官方文档当前明确列出了 TUN 字段的版本变化。stack 在 sing-box 1.15.0 中已标记为弃用,并计划在 1.17.0 移除;遇到旧配置时应按官方迁移说明核对,不要把旧字段直接复制到新配置。

DNS 与路由:最容易把“能启动”误判成“能联网”

先隔离 DNS。在支持当前字段的版本中,dns_mode 的含义是:disabled 不配置原生 DNS、也不劫持 DNS;native 尝试设置系统或接口 DNS;hijack 在此基础上额外处理 53 端口流量。排查时可先使用 disabled 隔离 DNS 变量,确认路由和出站是否基本可用,再测试 native。

不要绝对化理解 dns_address。官方 TUN 文档说明,未设置 dns_address 时,系统会根据 TUN 地址选择后续地址,并按相应方式处理;如果手动设置了 dns_address,则需要在当前版本配置中匹配对应的 hijack-dns 路由动作。这是特定 DNS 接管配置下的匹配关系,不代表所有 DNS 配置都必须使用同一条规则。详见TUN 配置参考。

再检查路由回环。auto_route 会把默认路由设置到 TUN。官方文档建议通过 route.auto_detect_interface、route.default_interface 或出站的 bind_interface 避免代理出站再次被送回 TUN。若 TUN 已运行但所有请求超时,先检查这些接口选择项,不要先改 MTU。

strict_route 要按平台理解。在 Windows 上,它用于更严格的路由处理,也用于减少普通多网卡 DNS 解析造成的泄漏,但官方同时提示某些应用可能因此无法正常工作;在 Android 和 Apple 图形客户端中,官方特性页将该字段标为未实现,因此不能把桌面端结论直接套到移动端。

Windows:权限、虚拟网卡、代理冲突和 DNS

  1. 关闭 TUN:确认普通代理或直连恢复。如果没有恢复,先检查系统代理和其他 VPN。
  2. 检查网卡:以管理员身份打开 PowerShell,执行 Get-NetAdapter。预期能看到新增或正在运行的虚拟适配器;如果没有,优先检查客户端权限、驱动安装和安全软件拦截。
  3. 检查路由:执行 route print,只观察活动路由,不要直接删除。开启 TUN 前后对比默认路由是否发生变化;如果 TUN 关闭后路由仍残留,先重启客户端或系统,再按客户端提供的恢复方式处理。
  4. 检查 DNS:执行 nslookup example.com。如果 TUN 关闭时能解析、开启后超时,优先测试 dns_mode,不要同时修改节点。
  5. 检查系统代理:确认系统代理指向的本地端口仍由 sing-box 监听。TUN 与系统代理同时开启时,先保留一种接管方式做对照。
  6. 检查 strict_route:如果浏览器能用但 VirtualBox、局域网工具或某个程序不能用,记录关闭前后的差异,先临时关闭 strict_route 复测。

典型判断是:没有虚拟适配器属于创建或权限层;适配器存在但 DNS 超时属于 DNS 层;DNS 正常但所有 TCP 请求超时,继续检查默认路由、出站绑定和节点端口。Windows 的 strict_route、DNS 53 端口处理和 TUN 版本字段以官方 TUN 文档为准。

Linux:TUN 权限、路由表、nftables 和 Docker 冲突

  1. 停止服务:如果使用 systemd,执行 sudo systemctl stop sing-box,确认普通网络恢复后再继续。
  2. 检查接口:执行 ip addr。预期能看到 TUN 接口及其地址;没有接口时,先查运行用户权限、配置字段和启动日志。
  3. 检查路由:执行 ip route。只读观察默认路由、TUN 相关路由和 Docker 网桥;不要直接删除路由。若停止 sing-box 后异常路由仍在,先重启服务或系统网络管理服务,并保留现场信息。
  4. 检查 nftables:执行 sudo nft list ruleset。预期能看到与自动重定向相关的规则;如果规则被其他防火墙工具覆盖,先暂时关闭 auto_redirect 做对照,不要清空整套规则。
  5. 查看日志:执行 sudo journalctl -u sing-box --output cat -e 查看最近日志,或执行 sudo journalctl -u sing-box --output cat -f 观察新日志。官方安装文档提供了这两种 systemd 日志命令。
  6. 检查 Docker:如果只在 Docker、容器或桥接网络中失败,比较启用 TUN 前后的 docker0、路由和 nftables 规则,再一次只调整自动重定向变量。

官方文档将 auto_redirect 标为 Linux 专用能力,并说明它需要 auto_route,通过 nftables 改善路由、性能并减少 TUN 与 Docker 网桥冲突;这不等于所有发行版、防火墙和内核都无需额外核对。参考TUN 字段说明和官方服务管理文档。

macOS:系统扩展、网络权限、系统代理和日志

  1. 关闭 TUN:确认普通网络恢复,再检查是否存在其他 VPN 或系统代理。
  2. 检查授权:在客户端或系统设置中确认 Network Extension、VPN 或相关网络扩展授权已经完成;如果系统出现授权提示,不要点拒绝后继续反复启动。
  3. 检查系统代理:确认系统代理没有指向已停止的本地端口。TUN 和系统代理同时启用时,先关闭其中一种。
  4. 检查 DNS:先测试域名解析,再根据结果对照 disabled、native 和 hijack。如果 IP 可达而域名失败,优先查 DNS,不要先改 MTU。
  5. 查看日志:Apple 图形客户端的官方特性页说明,服务日志可从客户端的 Settings → View Service Log 查看;如果当前客户端没有该入口,以当前版本界面为准。

Apple 图形客户端使用 NetworkExtension 提供非特权 TUN,且官方特性页将 strict_route 标为未实现,因此 macOS 或 iOS 客户端不能照搬 Windows 的 strict_route 排查结论。参考Apple 客户端特性说明。

Android:VPN 授权、分应用设置、其他 VPN 和日志

  1. 重新确认 VPN 授权:关闭 sing-box 后,从系统 VPN 设置确认没有其他 VPN 正在占用连接;再次启动时接受系统 VPN 请求。
  2. 检查分应用路由:如果只有部分应用不能联网,检查客户端的 include_package、exclude_package 或分应用代理设置。先临时取消分应用限制,测试全量接管。
  3. 检查始终开启 VPN:如果系统开启了“始终开启 VPN”或“阻止未使用 VPN 的连接”,先记录设置状态,再暂时关闭做对照,避免把系统强制策略误判为 sing-box 节点故障。
  4. 检查 DNS:先用浏览器测试 IP 和域名,再检查当前配置的 DNS 模式。移动端不要直接套用 Windows 的 strict_route 或 Linux 的 auto_redirect 判断。
  5. 查看日志:官方 Android 特性页说明,崩溃日志位于工作目录的 stderr.log;图形客户端是否提供完整运行日志,以当前客户端界面为准。
  6. 检查电池限制:如果 TUN 启动后过一段时间自动停止,检查系统对 sing-box 的后台运行和电池优化限制;先恢复前台运行,再判断是否仍然断流。

官方 Android 特性页说明,图形客户端通过 Android VpnService 提供非特权 TUN,并支持按应用包含或排除;同时将 strict_route 标为未实现。因此 Android 的排查重点是 VPN 授权、分应用规则、其他 VPN 冲突和后台限制,而不是照搬桌面端路由选项。参考Android 客户端特性说明。

按日志关键词判断下一步

日志与动作对照
关键词或现象通常对应层级下一步
configure tun interface、permission denied、device unavailableTUN 创建或权限检查系统授权、运行用户、虚拟网卡和其他 VPN 冲突
DNS exchange failed、resolve timeoutDNS暂时隔离 DNS 模式,检查 DNS 出站和 hijack-dns 关系
no route、network unreachable路由只读检查 ip route 或 route print,核对自动探测接口和默认接口
connection refused、i/o timeout出站或节点检查地址、端口、TLS 时间和同配置下其他节点
context canceled连接被取消或上游变化结合前一条错误判断,不要只凭这一行断定节点故障

如果需要增加日志,可在配置中设置 log.level 为 debug,并保留故障时段的日志;官方日志配置支持 trace、debug、info、warn、error 等级以及输出文件。排查完成后可恢复到较低日志等级,避免长期产生过多日志。参考sing-box 日志配置。

最终复测清单:确认修复的是哪一层

  1. 关闭 TUN,确认普通网络、IP 连接和域名解析都正常。
  2. 开启最小 TUN 配置,只测试一个网页和一个 DNS 查询。
  3. 检查是否出现 TUN 接口、默认路由和预期日志。
  4. 再恢复 DNS 设置,单独测试域名解析。
  5. 再恢复路由规则或严格路由,测试局域网、浏览器和命令行。
  6. 最后测试多个节点、TCP 连接和需要 UDP 的应用。
  7. 若某一步失败,回到上一个成功配置,不覆盖原始备份。

如果只有一个节点失败,应优先检查节点端口、TLS、协议和服务端状态;如果所有节点只在 TUN 开启后失败,应回到本机权限、DNS 和路由。无法从本页资料确认某个具体服务的在线状态时,不要把一次连接失败直接判断为服务端故障。

常见问题

sing-box TUN 一开启就断网,应该先改什么?

先关闭 TUN,确认普通网络恢复,再备份配置并运行 sing-box check -c config.json。配置通过后,优先隔离 DNS 和默认路由变量,不要同时修改 MTU、节点和规则。

sing-box check 通过了,为什么 TUN 还是连接失败?

配置检查通过不代表虚拟网卡权限、系统路由、DNS 出站、nftables 或节点端口可达。继续结合日志、ip addr、ip route、route print 或实际域名测试判断。

dns_mode 应该选 disabled、native 还是 hijack?

排查时可先用 disabled 隔离 DNS;确认路由和出站正常后再测试 native。hijack 会额外处理 DNS 流量,若设置了自定义 dns_address,应按当前版本配置参考匹配 hijack-dns 路由动作。

Windows 开启 strict_route 后部分软件不能联网怎么办?

记录开启和关闭后的差异,先临时关闭 strict_route 复测,并检查软件是否使用虚拟网卡、独立 DNS 或特殊绑定接口。官方文档明确提示该选项在某些 Windows 应用场景中可能造成兼容性影响。

Linux 开启 TUN 后 Docker 网络异常怎么办?

先停止 sing-box,确认 Docker 网络恢复,再只读检查 ip route 和 nft list ruleset。不要清空防火墙规则;根据结果单独测试 auto_redirect 或相关路由设置。

Android 为什么只有部分应用不能联网?

优先检查 VPN 授权、分应用代理、include_package、exclude_package、其他 VPN 和后台限制。先临时取消分应用限制并全量接管,再判断是应用规则还是 TUN 本身的问题。

常见问题

sing-box TUN 一开启就断网,应该先改什么?

先关闭 TUN,确认普通网络恢复,再备份配置并运行 sing-box check。之后先隔离 DNS 和默认路由变量,不要同时修改 MTU、节点和规则。

sing-box check 通过了,为什么 TUN 还是连接失败?

check 主要验证配置结构,不能证明虚拟网卡权限、系统路由、DNS 出站、nftables 或节点端口可达,需要结合日志和系统网络检查继续定位。

dns_mode 应该选 disabled、native 还是 hijack?

排查时可先用 disabled 隔离 DNS,确认路由和出站正常后再测试 native;hijack 涉及额外 DNS 流量处理,需按当前版本配置参考匹配 dns_address 与 hijack-dns 规则。

Windows 开启 strict_route 后部分软件不能联网怎么办?

先记录开启与关闭后的差异,临时关闭 strict_route 复测,同时检查软件是否使用虚拟网卡、独立 DNS 或特殊绑定接口。

Linux 开启 TUN 后 Docker 网络异常怎么办?

先停止 sing-box,确认 Docker 网络恢复,再只读检查 ip route 和 nft list ruleset;不要清空防火墙规则,按变量逐项复测。

Android 为什么只有部分应用不能联网?

优先检查 VPN 授权、分应用代理、include_package、exclude_package、其他 VPN 和后台限制,先取消分应用限制测试全量接管。

相关阅读

参考资料

  1. sing-box 官方 TUN 配置参考
  2. sing-box 官方迁移说明
  3. sing-box 官方配置引言与 check 命令
  4. sing-box 官方安装与 systemd 日志命令
  5. sing-box 官方日志配置
  6. sing-box 官方 Android 客户端特性
  7. sing-box 官方 Apple 客户端特性