sing-box TUN 模式开启报错怎么办?按权限、虚拟网卡与路由排查
简答:sing-box TUN 模式开启报错时,先不要反复修改 auto_route 或 DNS:先执行 sing-box check 校验配置,再查看启动日志最后一条 FATAL。若是 operation not permitted,优先检查 Linux 权限与路由组件;若是 Access is denied,优先检查 Windows 管理员权限和虚拟网卡;若提示设备未就绪,则检查系统 VPN、网络扩展或其他代理软件冲突。本文按“启动即失败、启动后断网、运行后断流、关闭后仍无网”四类现象给出可回滚的排查路径。
定义:sing-box 的 TUN 模式会创建虚拟网络接口,并可通过 auto_route、auto_redirect 和 strict_route 接管或调整系统流量路径;因此报错可能来自配置字段、系统权限、虚拟网卡、路由规则、DNS 或其他网络软件冲突。
先试这一步:校验配置,再按最后一条 FATAL 分流
截至 2026-11-03,sing-box 官方配置文档仍将 sing-box check 列为配置检查命令。它只能判断配置结构和字段是否可接受,不能替代系统权限、网卡和路由检查。请在保存配置的目录执行下面的命令;如果二进制文件不在 PATH,请改用实际可执行文件路径。
sing-box check -c config.json
命令成功后,再以前台方式启动并保留完整日志。config.json 是演示文件名,不代表你的真实文件名;不要直接复制到客户端后假定一定可用。
| 日志或现象 | 优先判断 | 第一处理动作 |
|---|---|---|
operation not permitted、permission denied | Linux 权限、TUN 设备、路由或防火墙能力不足 | 确认运行用户、TUN 设备和路由组件,再测试关闭自动路由 |
Access is denied | Windows 未提升权限、虚拟网卡未就绪或系统策略阻止 | 以管理员权限启动,检查虚拟网卡与冲突 VPN |
device is not ready、无法创建 TUN | 虚拟网卡、网络扩展、系统 VPN 授权异常 | 关闭其他 VPN/代理,重新授权并观察系统网络接口 |
| 启动成功但全局断网 | auto_route、DNS、默认出口或回环规则冲突 | 先关闭 TUN 恢复网络,再逐项恢复路由和 DNS |
| 运行一段时间后断流 | 路由变化、系统网络切换、回环或 DNS 失效 | 记录断流时日志、默认接口和 DNS,再做最小化复测 |
官方 TUN 文档说明,auto_route 会把默认路由设置到 TUN;同时需要通过 route.auto_detect_interface、route.default_interface 或出站绑定接口避免流量回环。查看 sing-box 官方 TUN 配置说明。
Windows:管理员权限、虚拟网卡与冲突软件
Windows 上先完全退出其他 VPN、网络加速器、透明代理和带虚拟网卡的安全软件,再右键使用管理员权限启动 sing-box 或对应图形客户端。启动后打开系统网络连接列表,观察是否出现由客户端创建的 TUN 或虚拟网卡;如果进程启动但没有新接口,问题更接近权限、驱动或客户端内核,而不是节点本身。
- 确认权限:用管理员身份启动一次,并观察错误是否从
Access is denied变为其他更具体的提示。 - 确认网卡:检查设备管理器和网络连接列表;若虚拟网卡反复出现后立即消失,先退出其他 VPN,再重启客户端。
- 确认路由:如果 TUN 已出现但网页全部打不开,暂时关闭
auto_route做对照。关闭后恢复,说明重点在路由、DNS 或回环规则。 - 检查回滚:停止 sing-box 后,确认系统代理已关闭、虚拟网卡状态正常、默认网关仍指向原网络接口。
strict_route 在 Windows 上可能阻止不支持的网络访问,也可能影响部分虚拟机或特殊网络应用;不要把它当作所有设备都必须开启的选项。应先记录开启和关闭后的差异,再决定是否保留。
如果启动日志包含具体配置字段错误,应先以当前二进制对应的配置文档为准,不要直接套用旧教程中的字段名。官方文档已对部分 TUN 字段标注弃用、平台限制或版本条件。
Linux:先查权限、TUN 设备和路由能力
Linux 上的 TUN 启动失败,通常需要同时看运行身份、/dev/net/tun、路由工具和防火墙规则。下面命令可直接执行,用于观察环境;不会修改系统配置。
id:查看当前运行用户。ls -l /dev/net/tun:确认 TUN 设备是否存在。ip link:查看虚拟接口是否创建。ip route:查看默认路由和当前出口。command -v ip与command -v nft:确认路由和防火墙工具是否存在。
如果普通用户启动时报权限错误,可在测试阶段使用具备必要网络权限的运行方式复现;生产环境不要为了“能启动”长期使用过大的权限。也可以检查服务文件是否限制了网络管理能力。具体权限方案取决于发行版、服务管理器和防火墙实现,不能跨系统直接照搬。
Linux 使用 auto_redirect 时,官方文档明确标注其平台和能力要求;它通常与 auto_route 配合使用,但并非所有内核、容器或虚拟化环境都支持。公开 issue 中曾出现 Debian 12、sing-box 1.13.2 在启用自动路由后报 cleanup rules: operation not supported 的案例,这只能说明该组合存在兼容性线索,不能推断所有 Linux 用户都会遇到同一问题。查看该复现案例。
如果运行环境是容器、gVisor、受限虚拟机或云主机,先确认内核是否支持所需的 netlink、TUN、路由和 nftables 能力。官方仓库 issue 也记录过受限内核环境无法订阅路由 netlink 组而导致启动失败的情况。查看受限 Linux 环境的启动案例。
macOS、Android 和 iOS:重点看系统授权与客户端边界
macOS 和移动端的 TUN 通常不是简单地创建一个可自由管理的系统网卡,而是由客户端通过系统 VPN 或 Network Extension 机制提供。客户端显示“已启动”不等于所有配置字段都在当前平台生效,因此应以客户端日志、系统 VPN 状态和授权提示为判断依据。
- macOS:在系统设置中确认网络扩展或 VPN 配置已允许;若系统弹出授权提示,不要跳过。关闭其他 VPN 后重新启动,再观察是否能建立网络扩展。
- Android:确认系统 VPN 授权没有被撤销,并检查是否已有其他 VPN 占用该权限。电池优化、后台限制和系统网络切换也可能导致启动后断流。
- iOS:确认客户端的 VPN 配置已添加并允许,若配置导入后无法启动,优先查看客户端服务日志,而不是直接修改桌面端字段。
官方 Apple 客户端特性页说明,相关图形客户端可通过 NetworkExtension 提供非特权 TUN 实现,并且部分字段在 Apple 平台不支持或由系统管理。查看官方 Apple 客户端特性说明。因此,桌面命令行配置不能原样推断到 macOS 图形客户端、iOS 或 Android。
启动成功但没网:按 DNS、路由和回环顺序处理
如果 TUN 接口已经出现,错误从“启动失败”变成“启动成功但网页打不开”,就不要继续排查虚拟网卡。先做三组对照:
- IP 对照:测试能否访问一个已知 IP;如果 IP 可达但域名不可达,优先看 DNS。
- DNS 对照:查看 sing-box DNS 日志和系统 DNS 设置,确认 DNS 监听地址没有被其他程序占用,也没有把 DNS 请求重新送回 TUN。
- 路由对照:临时关闭
auto_route或减少路由范围,确认是否恢复;恢复后再逐项加入默认路由、排除地址和严格路由。
最小化测试时,只保留一个 TUN 入站、一个明确的出站和必要的日志配置。下面是字段关系示意,不是可直接启动的完整配置:address 提供 TUN 地址,mtu 控制接口包大小,auto_route 控制自动路由,strict_route 改变严格路由行为,route.auto_detect_interface 用于识别真实出口。出站、DNS 和路由规则仍需根据你的实际配置补齐。
如果出现启动后 CPU 占用升高、流量循环或所有连接立即失败,优先怀疑出站连接被重新捕获。先停止服务恢复网络,再对 TUN 地址、出口接口和排除规则做最小化测试。不要在未保存原配置的情况下连续修改多个字段,否则无法判断是哪一项改变了结果。
复测、回滚与提交问题时应保留什么
排查完成后按固定顺序复测:先启动 TUN,确认接口出现;再测试 IP;再测试 DNS;最后测试网页、长连接和实际应用。每一步只改变一个变量,并记录成功或失败。
- 版本:执行实际二进制的版本命令,记录 sing-box 版本、系统版本和客户端版本。
- 日志:保留从启动到第一条
FATAL的完整上下文,不只截取最后一句。 - 配置:提交脱敏后的 TUN、route、DNS 和出站片段,删除订阅地址、密钥、密码和个人信息。
- 回滚:停止 sing-box,关闭系统代理或 VPN,恢复原默认网络接口;若仍无网,重启网络连接或系统后再次确认默认路由。
如果问题只在某个系统、内核或版本组合中出现,应把它描述为“该环境下复现”,不要写成 sing-box 所有用户都会遇到的问题。官方文档和公开 issue 的字段、版本、平台限制应以页面当前内容和你的实际日志为准。
常见问题
sing-box TUN 模式一开启就提示 operation not permitted,怎么办?
先执行 sing-box check 排除配置错误,再确认 Linux 运行用户、/dev/net/tun、iproute2、nftables 和当前内核能力。如果运行在容器、gVisor 或受限虚拟机中,还要检查是否允许 TUN、netlink 和路由操作。
Windows 开启 TUN 提示 Access is denied,是不是订阅或节点有问题?
通常应先排查本机权限和虚拟网卡,而不是先判断节点。以管理员权限启动,退出其他 VPN 或代理软件,观察系统网络接口中是否出现虚拟网卡;如果网卡创建失败,重点看客户端内核、驱动和系统策略。
TUN 已经启动,但浏览器打不开网页怎么办?
先区分 IP 能否访问、DNS 是否能解析、HTTPS 是否能建立。若 IP 可达而域名失败,检查 DNS;若关闭 auto_route 后恢复,重点检查默认路由、strict_route、出口接口和 TUN 回环。
macOS、Android 或 iOS 能否直接使用 Windows 的 TUN 配置?
不能默认认为可以。Apple 图形客户端的 TUN 由 NetworkExtension 管理,移动端还受系统 VPN 授权和客户端内核限制影响。应以当前客户端支持的字段、授权状态和服务日志为准。
关闭 sing-box 后系统仍然无法联网,如何恢复?
先确认 sing-box 进程已退出,再关闭系统代理或 VPN,检查默认路由是否回到物理网络接口,并确认虚拟网卡没有残留异常状态。若仍无网,重启网络连接或系统后再次查看默认路由;不要继续修改原配置。
相关阅读
- 继续看 sing-box 连接失败的日志、配置与网络排查
- 如果配置还没导入,可先看 sing-box 订阅导入步骤
- 想对照其他客户端的 TUN 启动失败排查,可看 Mihomo 分平台方法
- 若 TUN 已连上但网页打不开,可继续看 DNS 与代理排查