sing-box TUN 模式无法启动怎么办?按报错和系统逐项排查
简答:sing-box TUN 无法启动,先不要换节点:备份配置,确认实际内核版本,再执行配置检查;通过后关闭其他 VPN、代理和 TUN 接管程序,并按系统补齐管理员权限、网络扩展或 VPN 授权。若配置检查通过但仍失败,重点看首次出现的 permission denied、address already in use、interface not found 或 unknown field。
定义:sing-box TUN 模式是通过虚拟网卡接管系统流量的透明代理方式,启动失败通常分为配置解析失败、权限不足、虚拟网卡或网络扩展创建失败、路由或 DNS 冲突四类。
先做这三步:判断是配置错,还是 TUN 无法创建
本文为第三方使用指南,核验时间为 2026年11月3日。不同图形客户端调用的 sing-box 内核、配置目录和权限方式可能不同,因此先记录客户端显示的实际内核版本,不要只看客户端名称。
- 备份配置:复制当前 JSON 配置和日志文件,删除或遮盖订阅链接、密码、私钥和访问令牌后再进行排查。
- 检查版本与配置:在终端运行
sing-box version查看实际内核版本;在配置所在环境执行sing-box check。官方配置文档明确提供了check检查命令,JSON Schema 文档也说明配置字段应与当前二进制能力匹配。配置基础与 check 命令 JSON Schema 与当前构建字段 - 暂时停用其他接管网络的软件:退出其他代理客户端、WireGuard、系统 VPN、虚拟网卡工具和可能开启 TUN 的程序,只保留一个程序接管系统流量。
如果 sing-box check 已经报 JSON、字段或类型错误,先修配置,不要继续改系统权限;如果检查通过但启动时才报权限、网卡或路由错误,才进入平台排查。
按报错关键词快速分流
| 首次报错关键词 | 优先判断 | 先做什么 |
|---|---|---|
unknown field、unknown option | 配置字段与实际内核版本不匹配 | 确认实际版本,删除或替换不被当前版本识别的字段;不要直接复制旧教程配置 |
permission denied、Access is denied | 没有创建 TUN、路由或网络扩展所需权限 | Windows 以管理员身份运行;Linux 检查 root 或网络管理能力;Apple 平台检查网络扩展授权 |
address already in use | 本地端口或相关资源已被其他进程占用 | 退出其他客户端,检查配置中的本地监听端口,确认没有重复启动服务 |
interface not found、failed to create tun | 虚拟网卡、TUN 设备或平台网络扩展无法创建 | 检查驱动、系统 VPN 授权、客户端权限和平台支持范围 |
| 启动成功但网页打不开 | 路由、DNS、回环或规则问题 | 先关闭 TUN 恢复网络,再逐项恢复 auto_route、DNS 和规则 |
官方 TUN 文档列出了 auto_route、strict_route、auto_redirect、dns_mode 和 dns_address 的作用及版本变化;因此遇到字段报错时,应以当前内核文档为准,而不是把不同版本的配置混用。官方 TUN 入站配置说明
Windows:优先检查管理员权限、虚拟网卡和冲突程序
- 完全退出其他代理、VPN、WireGuard 和带 TUN 功能的客户端,确认任务管理器中没有残留的 sing-box 进程。
- 右键客户端或终端,选择以管理员身份运行,再启动 TUN。Windows 图形客户端的官方要求包含 Windows 10 及以上;TUN 属于系统网络接管功能,普通权限启动失败时应先排除权限原因。sing-box Desktop 官方平台说明
- 打开“设置—网络和 Internet—高级网络设置”,观察启动前后是否出现新的虚拟适配器。若没有出现,记录首次报错,检查安全软件是否拦截虚拟网卡或网络过滤驱动。
- 如果提示端口占用,关闭重复启动的客户端实例,并检查配置中是否同时启用了多个相同监听端口。
- 如果 TUN 能启动但系统断网,先关闭
strict_route或恢复备份配置进行验证。官方文档说明 Windows 的strict_route会实施更严格的路由,并可能影响某些虚拟化软件;确认网络恢复后,再结合实际需求逐项启用。
回滚:停止 TUN,恢复备份配置,关闭系统代理或 VPN 开关,确认普通网络恢复后再只开启一个 TUN 客户端。
macOS:检查网络扩展授权,不要把命令行和图形客户端混为一谈
- 退出其他 VPN、代理客户端和网络过滤工具,避免多个 Network Extension 同时修改路由。
- 在 sing-box 图形客户端中重新启动服务,留意 macOS 是否弹出添加 VPN 配置或允许网络扩展的系统提示;未授权时,TUN 可能无法建立。
- 打开“系统设置—网络—VPN 与过滤器”以及“系统设置—隐私与安全性”,查看是否有待允许的系统扩展、网络扩展或 VPN 配置。不同 macOS 版本的菜单文字可能不同,以当前系统界面为准。
- 如果使用命令行版本,确认终端进程本身具备创建 TUN 和修改路由的条件;如果使用图形客户端,则优先使用其内置的网络扩展能力。官方 Apple 客户端通过 NetworkExtension 提供非特权 TUN,部分 TUN 字段在 Apple 平台并未实现,不能直接套用 Linux 配置。Apple 平台功能与 TUN 支持范围
- 启动后无网络时,先关闭 TUN 验证普通网络,再检查 DNS 和路由规则;不要在未确认平台支持的情况下强行添加
strict_route等字段。
Linux:检查 root、iproute2、nftables 和路由回环
- 先执行
sing-box version和sing-box check,再查看服务日志。使用 systemd 安装的服务可运行sudo journalctl -u sing-box --output cat -e查看最近日志,持续观察可用sudo journalctl -u sing-box --output cat -f。这些服务管理命令来自官方安装文档。官方安装与 systemd 日志命令 - 确认服务以 root 或具备创建 TUN、修改路由的权限运行。若日志出现
permission denied,先不要改 DNS,优先处理权限。 - 确认系统存在
ip、路由管理能力和所需 nftables 支持。Linux 的auto_redirect依赖 nftables,并且官方文档将其列为 Linux 下改善 TUN 路由和避免部分网络冲突的方式。 - 检查配置中的
route.auto_detect_interface、route.default_interface或出站绑定接口设置,避免 sing-box 把自身连接再次送回 TUN。官方路由文档明确提示,TUN 场景需要绑定默认网卡或自动识别接口来避免回环。官方 Route 配置说明 - 如果 Docker、虚拟机、容器网桥或自定义策略路由同时存在,先暂时关闭相关规则,再测试最小配置。不要一开始同时启用复杂的
route_address、规则集和自定义标记。
Linux 的建议顺序:先用 auto_route: true 验证基本启动,再根据日志决定是否启用 auto_redirect: true;每次只改一个字段,并记录改动前后的首次报错。
Android 与 iOS:重点是系统 VPN 授权和客户端能力边界
Android 图形客户端通过系统 VpnService 提供非特权 TUN;首次启动通常需要用户确认 VPN 连接授权。若系统提示未出现或授权后立即停止,检查系统 VPN 设置、后台限制、省电策略和是否已有其他 VPN 占用。官方 Android 功能表还标注了部分 TUN 选项不具备权限或未实现,因此不要照搬 Linux 的 UID、接口和严格路由参数。Android 平台功能与 TUN 支持范围
iOS 和 macOS 图形客户端通过 NetworkExtension 提供 TUN。检查系统是否允许添加 VPN 配置,并确认应用没有被系统限制后台运行。Apple 功能表显示部分字段由系统管理或未实现,出现 unknown field 或启动后断流时,应先删除平台不支持的字段,再测试基础配置。
平台回滚:停止客户端,进入系统 VPN 设置删除或关闭对应 VPN 配置,重新打开客户端并仅授权一个配置。若仍失败,保留首次报错、系统版本、客户端名称和实际内核版本,交给客户端维护者核对。
启动成功但无法上网:按 DNS、路由和规则分开验证
- 先验证 IP 连通性:如果能访问 IP 但域名打不开,优先排查 DNS;如果 IP 也不通,优先排查路由、默认接口和出站连接。
- 检查 DNS 模式:当前官方 TUN 文档将
dns_mode分为disabled、native和hijack,并说明启用auto_route时默认行为可能涉及 DNS 接管。不要在旧教程中直接复制已变化的 DNS 字段。 - 检查路由回环:配置中加入或确认
route.auto_detect_interface,避免连接服务器本身的流量进入 TUN。官方客户端示例也将该设置用于 TUN 场景。 - 检查规则命中:暂时使用一个明确的默认出站进行测试,确认请求是否有记录;如果只有部分域名失败,再检查 DNS 规则、直连规则和私有地址规则。
- 复测并回滚:每次只恢复一个高级选项,依次测试网页、DNS 和需要的应用;一旦出现断网,恢复上一步配置,而不是继续叠加字段。
官方示例同时展示了 TUN、DNS 劫持、私有地址直连和自动识别默认接口的组合,但示例不代表所有客户端都能原样使用,仍需按实际内核版本和平台支持情况调整。官方客户端配置示例
最小化排查清单:确认后再恢复复杂配置
- 已备份原始配置,并隐藏订阅链接和凭据。
- 已记录客户端实际调用的 sing-box 版本。
sing-box check不再报告 JSON 或未知字段错误。- 已退出其他代理、VPN、WireGuard 和 TUN 程序。
- 已按平台补齐管理员权限、root、VPN 授权或网络扩展授权。
- 已确认没有重复监听端口。
- 已先用基础 TUN 配置启动,再逐项恢复 DNS、规则和严格路由。
- 启动后已分别测试 IP、域名、普通网页和目标应用。
- 若失败,保留首次错误行,而不是只复制最后一行日志。
如果最小配置可以启动,而原配置不能启动,问题通常在字段兼容、路由、DNS 或规则组合;如果最小配置也无法创建 TUN,则优先回到系统权限、网络扩展、虚拟网卡和冲突程序层面。
常见问题
sing-box TUN 一打开就提示 permission denied,先改哪一项?
先确认权限,不要先改 DNS。Windows 以管理员身份运行;Linux 检查服务是否以 root 或具备网络管理能力的用户运行;Android 和 Apple 平台则检查系统 VPN 或 NetworkExtension 授权。授权后仍失败,再根据首次日志判断是网卡创建还是路由修改失败。
sing-box check 通过了,为什么 TUN 还是启动不了?
配置检查只说明 JSON 和已识别字段能够解析,不代表系统一定允许创建 TUN、修改路由或启用网络扩展。此时重点排查管理员权限、root、虚拟网卡、端口占用、其他 VPN/TUN 冲突和平台功能限制。
出现 unknown field,直接删掉这个字段可以吗?
不能盲删。先确认字段属于哪个版本以及当前客户端实际调用的内核版本;如果字段只是旧版本名称,应按当前官方 TUN 文档替换为现行字段。删除后重新执行配置检查,并观察是否引入新的路由或 DNS 问题。
TUN 启动后系统完全断网,怎样快速恢复?
先停止 sing-box 或关闭 TUN,恢复系统代理和 VPN 设置,确认普通网络恢复;然后恢复备份配置,只保留基础 TUN 和必要出站,逐项加入 DNS、auto_route、strict_route、规则集等设置。若启用 strict_route 后断网,优先检查默认接口、回环和平台兼容性。
Android 或 iOS 能不能直接使用 Linux 的 TUN 配置?
不建议直接照搬。Android 使用 VpnService,Apple 平台使用 NetworkExtension,部分 Linux 字段在移动端未实现或没有系统权限。应先使用客户端支持的基础字段,再根据平台功能表调整路由、DNS 和应用范围。