TL;DR:不要同时改 TUN、系统代理、DNS 和系统 VPN。先保存日志,把入口缩到一个,再逐项打开。能复现,才知道是哪一层冲突。

sing-box 桌面端最麻烦的故障不是「启动失败」,而是启动成功后部分应用没网、浏览器能用但终端不能用、关闭后系统仍然连不上。SFA、第三方 GUI 和手写配置都会遇到同一类问题:多个组件同时接管本机网络。

先判断冲突位置

现象优先检查典型原因
开启后全局断网TUN 与路由默认路由被改写,返回流量走错
浏览器可用,终端不可用系统代理终端没有读取系统代理环境
只有域名访问失败DNSDNS 入站没启动或被其它服务占用
关闭客户端仍无网络系统残留代理端口、虚拟网卡或 DNS 没恢复
某个软件单独失败应用网络栈应用自己带代理或固定 DNS

先做表格里的粗分,不要马上改配置。粗分错了,后面的日志会越看越乱。

需要保留的日志

把日志级别临时调到 infodebug,重启一次客户端,复制从启动到故障出现的片段。重点找这些词:

tun: started
route: default interface
dns: exchange failed
bind: address already in use
permission denied
auto route
strict route

bind: address already in use 说明端口被占;permission denied 多半是系统权限;dns: exchange failed 要继续看 DNS 上游和本机监听。不要把整份配置、订阅 URL、密码、token 一起发到公开 issue。

入口一次只留一个

排障时按这个顺序关:

  1. 关闭系统 VPN 配置或其它网络过滤工具。
  2. 关闭系统代理,只保留 sing-box 本地端口。
  3. 关闭 TUN,只用 mixedsockshttp 入站测试。
  4. 浏览器手动填本机端口,确认核心可以转发。
  5. 再打开 TUN,先不开 strict_route,观察路由表变化。

如果第 4 步正常,第 5 步断网,问题就在 TUN、路由或权限,不在节点参数。需要现成多端配置时,可以使用兼容 Clash / Singbox / V2Ray 的订阅,但排障仍要先确认本机入口是否干净。

Windows、macOS、Linux 的差异

Windows 常见问题是虚拟网卡和管理员权限。客户端没有足够权限时,TUN 可能启动一半,日志显示路由添加失败。先用管理员身份启动一次,确认是不是权限问题,再决定是否安装服务模式。

macOS 更容易被系统 VPN 配置、网络位置和 DNS 缓存影响。关闭客户端后,如果系统代理仍指向 127.0.0.1:7890 之类端口,浏览器会继续报错。去系统设置里确认代理开关,而不是只看客户端按钮。

Linux 要看 NetworkManager、systemd-resolved、iptables/nftables。auto_route 写入的规则可能和容器、Docker、局域网路由冲突。排障时先记录 ip routeip ruleresolvectl status 的变化。

DNS 不要和 TUN 混在一起猜

很多人看到网页打不开就先改规则,其实是 DNS 没返回。检查三点:

  • DNS 入站是否实际监听在配置里的地址。
  • 上游 DNS 是否能从当前网络访问。
  • 规则里是否把 DNS 请求又送回了同一个代理链路。

如果日志里反复出现 DNS 超时,先临时换成本机可访问的普通上游,等网络恢复后再加复杂分流。

回滚模板

最小可用配置只保留一个本机入口、一个出站和基础日志。确认能转发后,再按顺序加:规则、DNS、TUN、自动路由、严格路由。每加一步都保存一份配置,文件名写清楚日期和改动。

01-mixed-only.yaml
02-add-rules.yaml
03-add-dns.yaml
04-add-tun.yaml
05-add-strict-route.yaml

这样下次出问题可以直接回到上一个版本,而不是重新猜。

相关阅读

FAQ

为什么浏览器能打开,App 不能打开? 可能浏览器读取了系统代理,App 没读;也可能 App 自带代理设置。先用同一个测试地址分别从浏览器和终端访问。

TUN 模式是不是一定比系统代理好? 不是。TUN 覆盖范围更广,但也更容易碰到权限、路由和 DNS 冲突。普通桌面浏览场景,系统代理更容易维护。

关闭客户端后需要重启电脑吗? 不一定。先检查系统代理、DNS 和虚拟网卡。只有确认残留状态无法手动恢复时,再重启网络服务或系统。