← 返回 freecat.buzz 本地视觉备份 首页

sing-box连接成功但无法上网:按流量链路逐层排查

更新于 2026-10-26 · freecat.buzz

简答:sing-box显示连接成功不等于流量已经被接管。先用一个网页或命令确认代理/TUN是否生效,再依次检查 DNS、Route 规则、单节点连接和系统冲突;完成后应能明确是代理未接管、解析失败、路由误判还是节点问题。

定义:“sing-box连接成功但无法上网”是指客户端或服务进程显示运行、节点可能已建立连接,但浏览器或其他应用的 DNS、TCP、HTTPS 或 UDP 流量没有得到正确转发。

先做这组最短检查:不要同时改五项配置

先关闭 sing-box,确认当前 Wi-Fi 或移动网络本身可以打开一个普通 HTTPS 页面;再启动 sing-box,只改一个变量并复测一次。客户端显示运行中、VPN 图标出现、节点延迟测试成功,都不能单独证明浏览器流量已经经过 sing-box。

先判断卡在哪一层
现象优先检查下一步
sing-box运行,但网页和命令都像直连系统代理或TUN没有接管确认配置中的 inbound、端口、auto_route 或平台 VPN 状态
IP地址测试正常,域名打不开DNS规则、DNS上游或缓存分别测试域名解析和直接访问 IP
部分网站能开,部分网站超时Route规则、IPv6、UDP或目标站点限制查看日志,改用单个节点并分别测试 IPv4、IPv6
所有连接都出现 timeout 或 dial failed节点拨号、端口、防火墙或网络环境只切换一个节点,保留其他配置不变
启动后整机断网TUN路由、DNS劫持或其他VPN冲突停用其他VPN、Private DNS和安全软件的代理拦截后复测

命令行测试时请使用 GET 请求,不要把 Cookie、订阅链接或 token 打印出来。Windows PowerShell 中可执行:curl.exe -L -sS -A "Mozilla/5.0" -o NUL -w "%{http_code} %{remote_ip}\n" https://example.com/。macOS、Linux 可执行:curl -L -sS -A 'Mozilla/5.0' -o /dev/null -w '%{http_code} %{remote_ip}\n' https://example.com/。这里的结果只用于比较启停 sing-box 前后的访问路径,不代表节点测速或服务可用性结论。

第一层:确认系统代理或TUN真的接管了流量

sing-box既可以通过HTTP或SOCKS入站提供本地代理,也可以通过TUN接管更广泛的系统流量。官方配置文档把 mixed 入站定义为同时提供 SOCKS4、SOCKS4A、SOCKS5 和 HTTP 服务;其中 set_system_proxy 由配置控制,并不是所有图形客户端都会显示一个单独的“打开系统代理”开关。请先核对Mixed 入站文档中的监听地址、端口和系统代理字段。

  1. HTTP/SOCKS模式:在操作系统代理设置中确认代理地址通常是本机回环地址,端口必须与配置中的 listen_port 完全一致。Windows 可进入“设置 → 网络和 Internet → 代理”;macOS 可进入“系统设置 → 网络 → 当前网络 → 详细信息 → 代理”。Linux 的入口取决于桌面环境和发行版,应检查桌面代理设置或环境变量。
  2. TUN模式:确认配置中存在 type 为 tun 的入站,并检查 auto_route、地址和平台权限。官方文档说明标准 TUN 入站的完整能力与平台有关:桌面核心支持 Linux、Windows 和 macOS;Android 图形客户端通过 Android VpnService 提供非特权 TUN;Apple 平台图形客户端通过 NetworkExtension 提供非特权 TUN。分别参考TUN 入站文档、Android 客户端功能说明和Apple 平台功能说明。
  3. 平台差异:Windows、macOS 和 Linux 使用桌面权限、虚拟网卡和路由表;Android 与 iOS/iPadOS 需要系统批准 VPN 权限,且可能有分应用代理。Android 还要检查“设置 → 网络和互联网 → VPN”中的 VPN 状态、应用电池限制和分应用排除列表;iOS/iPadOS 要检查系统 VPN 权限,以及客户端是否把当前应用或网络排除。

如果启用TUN后所有应用都断网,先停用其他VPN、WireGuard、系统级代理、Android Private DNS或安全软件的HTTPS拦截,再只保留sing-box复测。Linux 创建TUN、修改路由或启用透明转发通常需要 sudo;Windows 需要管理员权限,具体权限由客户端和配置决定。

第二层:检查DNS,不要把解析失败误判成节点失败

打开网页至少涉及域名解析和后续连接。若用 IP 地址访问测试目标可以建立连接,但域名访问失败,优先查看 DNS,而不是立即更换节点。sing-box的 DNS 配置包含 servers、rules 和 final 等部分;DNS 规则按列表顺序匹配,字段和动作应以DNS配置文档及DNS Rule文档为准。

  1. 先在系统外测试解析:Windows PowerShell 执行 Resolve-DnsName example.com;macOS/Linux 执行 nslookup example.com。再启动和停止 sing-box 各测一次,记录是否只有启用后失败。
  2. 检查 DNS 规则是否把请求送到不存在或不可达的 server tag。若配置使用 TUN 的 hijack-dns 或 dns_mode,要同时确认配置里有可用的最小 dns 段;不能只写劫持动作而没有 DNS server。
  3. 如果启用了 FakeIP,确认后续 Route 能识别并处理 FakeIP 地址;配置迁移后旧的 GeoIP、Geosite字段或规则集可能与当前版本不兼容,先用最小 DNS 和 Route 配置复测。
  4. 不要一次性同时更换 DNS、清缓存、换节点和修改规则。先只临时停用复杂 DNS 规则,再测试一个明确的域名;恢复后若问题重现,才能锁定规则或上游。

第三层:检查Route规则、Direct和Block分支

sing-box的路由不是固定的 Clash 模式开关。只有配置启用了相关 API 或规则字段时,图形客户端才可能出现类似模式选项;不能看到“连接成功”就假定所有流量都走代理。Route配置的 rules 按顺序匹配,final 用于没有规则命中的默认出站,详见Route文档和Route Rule文档。

  1. 查看目标域名是否命中 direct、block 或错误的规则集。排查时可以暂时保留一条明确的测试规则,把一个测试域名送到确定的代理出站,复测后再恢复完整规则。
  2. 检查 route.final 是否为空且第一条 outbound 并非预期节点。官方文档说明 final 为空时会使用第一个 outbound,因此出站排列变化可能改变结果。
  3. 启用TUN时,桌面系统优先检查 auto_detect_interface 或 default_interface,避免出站连接再次进入TUN造成路由循环;Android则检查是否启用了错误的上游VPN覆盖选项。
  4. 如果只有 IPv6 失败,分别执行 IPv4 和 IPv6 测试,并检查 DNS 是否返回 AAAA、Route 是否允许 IPv6,以及节点协议是否支持对应网络。不要仅凭 ping 成功判断 HTTPS 一定可用。

第四层:看日志定位DNS、路由还是节点拨号

排障时必须记录具体错误和发生时间。配置中的 log.level 可使用 debug 等级,output 可指定日志文件;官方字段说明见Log配置文档。图形客户端通常在日志或运行信息页面查看;桌面服务模式还要检查服务的工作目录和日志输出位置,Windows 桌面服务的工作目录由官方客户端功能页列出。

常见日志关键词与验证方向
关键词通常先查复测方式
timeout、dial failed节点地址、端口、网络、防火墙、出站协议只换一个节点,保持DNS和规则不变
connection reset中途断开、协议参数、MTU或网络切换切换Wi-Fi与移动网络,降低复杂度后复测
authentication failed账号、密钥、密码或服务端认证参数重新核对配置来源,不在日志或文章中公开凭据
DNS、resolve、hijackDNS server tag、DNS规则、TUN DNS处理先测域名解析,再测HTTPS
no route、reject、blockRoute规则顺序、final和拒绝分支用单一测试域名核对命中的规则

配置文件可先执行官方提供的检查命令:sing-box check -c config.json。该命令只能验证配置结构或字段问题,不能证明节点可用、DNS可达或浏览器流量已经接管;相关命令说明见sing-box配置总览。

按平台收尾:权限、冲突和MTU怎么查

最后核对:按结果决定下一步

完成排查后,理想结果不是“换了一个节点后碰巧能用”,而是能回答四个问题:流量是否进入sing-box、DNS是否成功解析、Route把请求送到哪个出站、该出站是否完成了目标连接。如果只有某个节点失败,属于节点或协议参数方向;如果所有节点都失败但直连正常,优先检查接管、DNS、Route和系统冲突;如果只有特定网站失败,再检查IPv6、UDP、MTU或目标站点本身的访问限制。

本站是第三方使用指南站,与 sing-box 官方及 freecat 无关联;涉及具体服务、订阅或节点时,请以对应官方资料为准。

常见问题

sing-box显示连接成功,是否说明代理已经生效?

不一定。连接成功可能只代表进程运行、VPN权限已批准或节点测试完成。还要用浏览器或带 User-Agent 的 GET 请求验证流量是否经过代理,并检查日志中是否出现实际连接记录。

sing-box没有“系统代理开关”怎么办?

先看配置是否有 mixed 或 http 入站,以及是否设置了 set_system_proxy。官方文档说明 set_system_proxy 是配置字段,且平台支持有限;某些图形客户端可能只提供TUN或由配置自动设置系统代理,不能假定所有客户端都有同名按钮。

TUN模式开启后为什么整机断网?

优先停用其他VPN、WireGuard、Private DNS和安全软件代理拦截,再检查TUN的 auto_route、DNS处理、默认网卡和路由规则。桌面系统通常还要用管理员或 sudo 权限创建TUN和修改路由。

网页打不开但日志没有明确报错,应该看哪里?

先把日志等级调整为 debug,并确认输出位置。图形客户端查看日志或运行信息页面;命令行运行时直接观察终端输出;配置文件模式则检查 log.output 指定的文件。测试时只保留一个域名和一个节点,避免日志混杂。

要不要直接换节点或重装sing-box?

不建议先重装。先区分未接管、DNS失败、Route误判、节点拨号失败和目标网站限制;如果只换节点而问题消失,仍无法证明原问题根因。每次只改一项并复测,才能保留有效证据。

相关阅读

参考资料

  1. Mixed 入站配置文档
  2. TUN 入站配置文档
  3. DNS 配置文档
  4. DNS Rule 配置文档
  5. Route 配置文档
  6. Route Rule 配置文档
  7. Log 配置文档
  8. sing-box 配置总览
  9. Android 客户端功能说明
  10. Apple 平台功能说明
  11. Desktop 客户端功能说明