五树云高端机场 | 一个极速通道,让你畅通无阻!

sing-box 连接失败怎么排查?按日志、DNS 与节点逐层定位

更新于 2026-10-20 · xiaomitizi.top

简答:sing-box 连接失败,最快的方法是先判断失败发生在哪一层:订阅或配置无法导入、程序启动失败、节点握手超时、DNS 解析失败,还是已经启动但应用没有走代理。先备份配置,再查看第一条 ERROR 或 FATAL 日志,并运行 <code>sing-box check -c config.json</code> 校验配置;不要一开始就反复更换节点。本文是第三方使用指南,不能替代具体服务的官方支持。

定义:sing-box 连接失败,是指配置无法加载、内核无法启动、出站节点无法建立连接,或代理已运行但 DNS、路由、系统代理与应用流量没有正确接通。

先判断:连接失败究竟发生在哪一层

先不要把“订阅下载失败”“配置启动失败”和“节点连不上”混为一谈。sing-box 使用 JSON 配置结构,官方文档把配置中的日志、DNS、入站、出站和路由等部分分开定义;不同层级的故障,检查方法也不同。可先按下面的顺序定位。查看 sing-box 配置结构说明。

sing-box 连接失败分层速查
现象优先检查第一步动作
订阅打不开、更新失败订阅地址、网络、认证、返回内容在浏览器或命令行确认请求是否成功,保护好订阅链接
程序启动后立即退出JSON 格式、字段废弃、路径、权限运行 sing-box check -c config.json
节点连接超时地址、端口、DNS、网络可达性先做域名解析和端口测试
handshake 或 TLS 错误TLS、证书、SNI、传输参数、系统时间对照服务端参数逐项核对,不要只改一个字段反复尝试
程序显示运行但网页打不开系统代理、路由、DNS、TUN/VPN 权限先测试本地代理端口,再检查目标应用是否使用该代理
只有部分应用异常分流规则、应用代理支持、TUN 权限、其他代理冲突关闭复杂规则,使用单节点和单目标复测

最快解法:如果你现在只想先试一步,先复制配置文件做备份,然后运行配置检查命令;命令通过后,再进入节点和 DNS 排查。

第一步:查看日志,并抓住第一条错误

不要只看最后一行“连接失败”。启动阶段的第一条 ERROR 或 FATAL 往往更接近根因,后续错误可能只是连锁反应。命令行运行时直接观察终端输出;如果配置启用了文件日志,官方支持在 log 中设置 level、output 和 timestamp。日志级别包括 trace、debug、info、warn、error 和 fatal。查看 sing-box 官方日志配置。

  • 命令行:在启动命令所在的终端查看第一条报错,保留报错前后的少量上下文。
  • Linux systemd:使用 sudo journalctl -u sing-box --output cat -e 查看最近日志;用 sudo journalctl -u sing-box --output cat -f 持续跟踪新日志。官方安装文档列出了 systemd 日志命令。
  • Windows、macOS、Android、iOS 图形客户端:打开对应客户端的日志或运行记录页面,优先复制启动时最早出现的错误,而不是只截取界面上的“未连接”状态。不同客户端的菜单名称可能不同,无法确认时以当前客户端界面为准。

提交日志前要脱敏:删除订阅完整地址、节点密码、UUID、私钥、短期令牌、用户名和服务器真实地址。保留错误类型、时间、客户端版本、系统类型,以及经过脱敏的配置字段名。

第二步:用官方命令校验配置

在配置文件所在目录执行:

sing-box check -c config.json

如果配置不在当前目录,把路径写完整,例如:

sing-box check -c "C:\path\to\config.json"

Linux 或 macOS 可以使用:

sing-box check -c /path/to/config.json

官方配置文档提供了 check 和 format 命令;其中 format 可以用于整理 JSON,但修改前应保留原文件副本。查看官方 check 与 format 命令说明。

  1. 先确认文件确实是 JSON,而不是网页错误页、登录页或截断内容。
  2. 检查 JSON 的逗号、引号、括号和字段类型。
  3. 看到“unknown field”“deprecated”或字段迁移提示时,记录客户端和内核版本,再对照官方迁移文档处理。
  4. 如果配置引用了外部规则集、证书或文件路径,确认文件存在,并检查当前用户是否有读取权限。
  5. 校验通过后再启动,不要为了绕过报错随意删除未知字段;删除字段可能让配置能够启动,却改变原来的路由或安全行为。

版本兼容需要特别注意。官方发布页会列出稳定版、测试版和各平台构建包,版本号与安装包应以发布页在检查日显示的内容为准;本文核对日期为 2026-10-20。查看 sing-box 官方发布页。

第三步:把本地代理、节点端口、DNS 和目标网站分开测试

“网页打不开”至少可能包含四段链路:应用到本地代理端口、本地到远端节点、节点对域名的解析,以及节点到目标网站。分开测试,才能避免把 DNS 故障误判为节点失效。

1. 测试本地代理端口

先在 sing-box 配置或客户端界面确认 HTTP、SOCKS 或 mixed 入站端口。Windows PowerShell 可使用:

Test-NetConnection 127.0.0.1 -Port 端口号

如果使用 HTTP 代理,可用 curl.exe 指定代理测试:

curl.exe -I -x http://127.0.0.1:端口号 https://example.com

这里的 example.com 只是测试占位域名,实际结果会受目标站点和当前网络影响,不应把一次成功或失败当作线路排名。

2. 测试远端节点地址和端口

Windows 可执行:

Test-NetConnection 节点域名或IP -Port 节点端口

该测试只能说明 TCP 端口是否具备基础可达性,不能证明 TLS、认证、传输层参数或协议握手一定正确。Linux 和 macOS 可以使用:

nc -vz 节点域名或IP 节点端口

3. 测试 DNS

使用:

nslookup 节点域名

如果 DNS 查询失败,先检查系统 DNS、sing-box 的 DNS 配置和 DNS 出口;如果节点使用域名,域名解析失败会在建立连接前就中断。sing-box 官方文档说明,DNS 配置与路由、出站和 TUN 的处理方式有关,不能只看浏览器是否能打开网页。查看官方 DNS 配置说明。

4. 测试目标网站

本地端口可用、节点端口可达,并不代表目标网站一定可访问。用同一个本地代理端口执行 curl.exe,再与不经过代理的请求对比;如果只有某个域名失败,优先检查分流规则、DNS 解析结果和目标站点本身。

错误关键词对照:看到什么先查什么

sing-box 常见错误关键词与处理顺序
日志关键词常见定位方向建议动作
timeout地址、端口、路由、网络丢包或服务端无响应先做 DNS 和端口测试,再换一个已确认参数的节点复测
connection refused目标端口主动拒绝,或服务端没有监听核对端口与协议;如果只有该节点出现,记录为节点侧或参数侧问题
handshake failureTLS、认证、SNI、传输参数不一致逐项对照服务端参数,不要把端口可达误认为握手成功
DNS resolution failed域名解析失败、DNS 出口或 DNS 路由异常先用 nslookup 检查域名,再检查 sing-box DNS 与路由
permission denied读取配置、创建 TUN、绑定端口或访问文件权限不足检查文件权限、端口占用和系统 VPN/TUN 授权
no route路由规则没有匹配,或默认出站、接口选择不正确暂时减少规则,确认是否存在可用的默认出站
address already in use本地端口被其他程序占用关闭冲突程序或更换本地监听端口,然后同步更新系统代理

这些关键词是排查入口,不是对服务端故障的最终证明。若同一配置在多个网络、多个设备上都失败,再考虑参数或节点侧问题;若只有一个设备失败,优先检查本机权限、DNS、路由和端口冲突。

运行中打不开网页:重点检查 TUN、DNS 与系统代理

如果 sing-box 显示运行中,但浏览器或应用仍然打不开网页,先确认应用流量到底有没有进入 sing-box。普通系统代理模式需要应用支持并读取系统代理;TUN 模式则需要系统授予 VPN 或相关网络权限,并正确建立路由。

  • 系统代理:确认系统代理地址是 127.0.0.1 或客户端实际监听地址,端口与 sing-box 入站端口一致;同时检查是否有其他代理软件覆盖了系统代理。
  • TUN 权限:如果出现 permission denied、虚拟网卡创建失败或只有部分应用不通,检查系统是否授予 VPN、网络扩展或管理员权限。
  • DNS 劫持:官方 TUN 文档说明,dns_mode 可使用 disabled、native 或 hijack;启用 auto_route 时,hijack 是默认处理方式。Windows 启用 strict_route 时,还会阻止非 TUN 接口上的部分 53 端口流量。查看 sing-box 官方 TUN 与 DNS 模式说明。
  • 路由环回:启用 TUN 的自动路由后,要检查默认接口、自动探测接口或出站绑定接口,避免流量又被送回 TUN。相关设置应按系统和网络拓扑逐项验证。
  • 分流规则:暂时使用单一出站或简化规则,确认基础连接后再恢复复杂的域名、IP、应用和规则集分流。

最小复现建议是:备份原配置,只保留一个入站、一个出站、一个节点和一个测试目标;先关闭复杂分流,再分别测试系统代理与 TUN。基础链路恢复后,一次只恢复一个功能。

订阅导入失败与节点连接失败,不要混在一起处理

订阅更新失败时,先确认下载请求是否成功、返回内容是否完整、是否需要认证,以及保存后的内容是否仍是可解析的 sing-box JSON。下载失败不等于节点全部失效;反过来,订阅能更新也不代表每个节点参数都能成功握手。

  1. 复制订阅地址前,确认没有多余空格、换行或被聊天软件截断。
  2. 不要把完整订阅地址公开发到群组、工单或截图中;它通常可能包含访问凭证。
  3. 下载后先查看文件大小和开头内容,确认不是登录页、错误页或 HTML。
  4. 将内容保存为备份文件,再运行 sing-box check。
  5. 如果更新后突然启动失败,保留更新前配置,并对比新增、删除或废弃字段。

如果使用的是图形客户端,客户端名称、内核版本和配置格式可能不同。官方 Apple 客户端文档说明,其客户端用于管理和运行本地或远程 sing-box 配置,并提供平台相关的 TUN 实现;因此 iOS 和 macOS 上还需要额外检查系统网络权限与客户端状态。查看官方 Apple 平台客户端说明。

一套可复用的最小化排查流程

  1. 备份:复制当前配置、记录客户端和内核版本,不直接覆盖原文件。
  2. 看日志:找到最早的 ERROR 或 FATAL,不要只看最后一条提示。
  3. 校验配置:运行 sing-box check -c config.json,先解决 JSON、字段和路径问题。
  4. 确认本地端口:用 Test-NetConnection 127.0.0.1 -Port 端口号 或 curl.exe -x 测试入站端口。
  5. 确认远端端口:测试节点域名解析和端口可达性,再看 TLS、认证和传输参数。
  6. 简化配置:只保留一个节点、一个出站和一个目标,暂时关闭复杂规则、TUN 或特殊传输设置。
  7. 逐项恢复:基础连接正常后,一次恢复一个设置;每次变更都记录结果。
  8. 安全反馈:提交问题时只提供脱敏日志、错误时间、系统、客户端版本和配置结构,不提供完整订阅链接、密码或私钥。

如果完成上述步骤后仍失败,最有价值的信息不是“还是连不上”,而是:失败发生在哪一层、第一条错误是什么、单节点最小配置是否复现,以及本地端口和远端端口测试分别得到什么结果。

常见问题

sing-box 启动失败,应该先改配置还是先换节点?

先校验配置,不要先换节点。运行 sing-box check -c config.json,优先处理 JSON 格式、字段废弃、文件路径和权限错误;配置能够启动后,再检查节点连接。

日志显示 timeout,是不是节点一定失效了?

不一定。timeout 也可能来自 DNS 解析失败、端口不可达、路由错误、网络丢包或本机防火墙。先分别测试域名解析、远端端口和本地代理端口,再判断是否需要更换节点。

sing-box 显示运行中,但浏览器打不开网页怎么办?

先检查浏览器是否使用了 sing-box 的系统代理地址和端口,再测试本地代理端口;如果使用 TUN,检查 VPN 或网络扩展权限、DNS 模式、自动路由和其他代理软件冲突。

sing-box 的订阅更新失败,是否代表所有节点都不可用?

不代表。订阅更新失败可能是地址、认证、网络、返回内容或保存过程的问题。先确认下载结果是否为完整的 sing-box JSON,再用配置校验命令检查;不要把订阅下载故障直接等同于节点故障。

排查时可以把完整日志和订阅链接发给别人吗?

不建议。订阅链接可能包含访问凭证,配置中也可能有 UUID、密码、私钥和服务器地址。反馈时应脱敏这些字段,只保留错误关键词、时间、系统、客户端版本和最小化配置结构。

相关阅读

参考资料

  1. sing-box 官方配置结构与 check、format 命令
  2. sing-box 官方日志配置
  3. sing-box 官方 DNS 配置
  4. sing-box 官方中文 TUN 配置与 DNS 模式
  5. sing-box 官方安装与 systemd 日志命令
  6. sing-box 官方 Apple 平台客户端说明
  7. sing-box 官方 GitHub 发布页