sing-box 节点连接失败怎么排查?
简答:sing-box 节点连接失败,先不要立即修改 DNS、MTU 或规则:先看日志,再运行 sing-box check 检查配置,随后关闭 TUN、只保留一个节点做基础连接测试。日志中的 timeout、handshake、connection refused、authentication 和 DNS 关键词,通常能帮助你把问题分到本地配置、节点参数、网络链路或解析路径。本文适用于 sing-box 核心配置及 Windows、macOS、Linux 命令行环境;Android、iOS 图形客户端的具体日志入口以客户端界面为准。
定义:sing-box 节点连接失败,是指配置已加载或客户端已启动,但某个或多个出站无法完成连接、握手、认证,或连接成功后代理流量仍无法访问目标。
先按现象分流:不要把四类失败混在一起
先记录失败发生在哪一步:订阅或配置文件下载失败、配置无法启动、节点拨号失败,还是代理已经启动但网页打不开。四者的处理入口不同。
| 现象 | 优先查看 | 先做什么 | 责任范围 |
|---|---|---|---|
| 订阅下载失败或内容为空 | 订阅地址、HTTP 响应、文件内容 | 在浏览器或客户端重新获取,并确认下载内容确实是配置或订阅格式 | 订阅地址、服务端或网络入口 |
| 启动时报 JSON、字段或标签错误 | 配置文件结构和版本兼容 | 备份原文件后运行 sing-box check -c config.json | 本地配置或内核版本 |
| 只有一个节点 timeout | 节点地址、端口、协议参数 | 换同组另一个节点,仅保留一个出站测试 | 单节点参数或远端入口 |
| 所有节点同时 timeout | 本地网络、系统时间、权限、出口连通性 | 关闭 TUN,切换 Wi-Fi/移动网络或其他基础网络后复测 | 本地网络、权限或服务端整体状态 |
| 显示已连接但网页打不开 | DNS、route、final、TUN 和系统代理 | 先做命令行或浏览器基础代理测试,再逐项恢复高级设置 | 流量入口、解析或分流规则 |
sing-box 官方配置文档将配置分为 log、dns、inbounds、outbounds 和 route 等部分,因此“配置能启动”并不等于“节点能够拨号”或“网页一定能访问”。可先查看官方配置结构与 check 说明。
最短排查流程:备份、检查、最小化、验证、恢复
- 备份配置。复制当前 JSON 文件,保留原文件名和客户端配置。不要直接覆盖唯一可用版本;分享日志或配置前,删除服务器地址、UUID、密码、订阅令牌和私钥。
- 确认内核版本与配置来源。如果配置来自转换器或旧模板,先确认它是否适用于当前 sing-box 内核。官方文档会在字段旁标注引入、弃用或移除版本,看到 deprecated 字段时不要仅凭字段名推断当前客户端界面仍支持。
- 检查配置结构。在 macOS/Linux 的 Bash 或兼容 Shell 中执行:
sing-box check -c config.json;Windows PowerShell 可执行:.\sing-box.exe check -c .\config.json。如果程序不在当前目录,请改用实际路径。官方配置文档提供了 check 命令,命令行参数中的-c用于指定配置文件。 - 只留一个节点和一个出口。暂时停用复杂的 selector、urltest、rule-set、TUN 和多余入站,只用一个明确的出站测试。这样做是为了缩小变量,不代表所有客户端都能通过相同界面完成删减。
- 先测试普通代理。如果客户端支持 mixed 或 HTTP/SOCKS 入站,先让浏览器或测试程序使用该本地代理;确认基础代理可用后,再恢复 TUN。不要把端口处于监听状态、能 ping 通,或单次测速成功当成完整可用性证明。
- 逐项恢复。按“节点参数→DNS→route/final→系统代理→TUN”的顺序一次只改一项。每次改动后记录结果,失败就恢复上一份备份。
日志可以通过配置中的 log 部分提高可见性。官方文档支持 trace、debug、info、warn、error 等级别,也支持输出到文件;排查结束后可恢复到较低日志级别,避免长期写入大量日志。参考sing-box 官方 Log 配置。
日志关键词怎么判断:先看第一条真正的错误
| 关键词或现象 | 优先含义 | 处理动作 |
|---|---|---|
timeout | 连接在规定时间内没有完成,可能是地址、端口、网络、UDP 支持或远端入口问题 | 确认地址和端口;切换基础网络;分别测试 TCP 与 UDP 依赖的节点;不要只反复刷新节点 |
connection refused | 目标主机主动拒绝或对应端口没有接受连接 | 核对端口和协议;若多个节点都出现,先排查本地网络和订阅内容 |
handshake、TLS、certificate | 握手或证书参数没有完成匹配 | 检查系统日期时间、server_name、证书相关参数和客户端版本;不要凭感觉更换字段 |
authentication、invalid | 认证信息或节点参数不匹配 | 重新获取配置,核对 UUID、密码、用户信息和协议类型;不要公开完整凭据 |
DNS、resolve、no such host | 域名解析或 DNS 路径异常 | 先用 IP 或可控的基础解析测试区分“无法解析”和“解析后无法连接”,再检查 DNS 规则 |
route、no matching rule、网页空白 | 流量未进入预期出站,或 final 指向错误 | 检查 route 规则顺序、出站标签和 final;先使用单一明确出站验证 |
这些关键词是排查线索,不是单独的责任结论。同一条日志还要结合节点数量、网络切换结果和是否关闭 TUN 后恢复来判断。
单节点、多个节点、全部节点失败,分别怎么处理
只有一个节点失败
优先核对该节点的地址、端口、协议和认证字段。若其他节点可以连接,本地 sing-box、基础网络和入站通常仍具备基本可用性,但不能据此证明失败节点远端一定故障。把该节点单独复制到最小配置中测试,结果更容易复现。
同一协议或同一分组的多个节点失败
检查它们是否共用相同的传输、TLS 或认证参数。对于依赖域名解析的节点,先区分“域名解析失败”和“解析成功但端口超时”;对于依赖 UDP 的节点,还要考虑当前网络是否限制 UDP。不要只用 ping 判断代理协议是否可用。
所有节点同时失败
先关闭 TUN 和自动测速,使用一个节点、一个入站、一个出口做基础测试;然后切换到另一条基础网络。如果仍全部失败,再查看系统时间、客户端权限、系统代理残留和配置是否刚刚更新。服务端账户、订阅是否过期或流量是否用尽,需要到对应服务的可核验页面确认,本文无法替代该状态核验。
已连接但打不开网页:DNS、route 和 TUN 分层检查
sing-box 官方文档说明,DNS 配置包含 servers、rules、final 和 strategy 等部分;route 配置包含 rules、rule-set、final 以及自动选择网卡等字段。因此,节点拨号成功后仍无法访问,可能发生在解析、分流、默认出站或 TUN 流量接管阶段,可参考官方 DNS 配置和官方 Route 配置。
- 先关 TUN。改用普通代理测试。如果普通代理能访问而 TUN 不能,优先检查 TUN 权限、自动路由、系统代理冲突和 DNS 劫持路径。
- 再查 DNS。确认 DNS server 标签存在,DNS 规则引用的 server 与实际标签一致,
dns.final没有指向不存在或不可达的服务器。不要同时修改多个 DNS 字段。 - 再查 route。确认规则顺序、出站标签和
route.final。官方文档指出,final是默认出站标签;为空时会使用第一个出站,因此出站顺序变化可能影响结果。 - 最后恢复 TUN。官方 TUN 文档显示,
auto_route会设置默认路由;部分模式还涉及 DNS 处理、严格路由和系统网卡选择。若启用 TUN 后断网,先恢复普通代理,再只打开 TUN,不要同时改 MTU、DNS、路由和规则集。可对照官方 TUN 配置检查当前字段是否仍适用于你的版本。
协议专项核对:只检查配置中实际出现的字段
不要为了“碰碰运气”给所有节点添加字段。配置中是什么协议,就核对该协议实际使用的地址、端口、认证、TLS 或传输参数。
- TLS/Reality 类握手:优先核对系统时间、server_name、证书或公钥相关字段、short_id 和指纹设置是否与原始配置一致;缺少服务端原始参数时,无法从客户端日志推断正确值。
- 依赖 UDP 的传输:确认当前网络和本地防火墙没有阻断所需 UDP;“TCP 网页能打开”不能证明 UDP 节点可用。
- VMess、Trojan、Shadowsocks 等:核对协议类型、密码或 UUID、传输方式和 TLS 开关是否成套匹配。不要把一个协议的字段复制到另一个协议。
- WireGuard:单独检查私钥、公钥、AllowedIPs、端点地址和端口;如果配置来自订阅转换,先确认转换结果没有丢失密钥或路由范围。
如果修改后出现新的配置字段错误,先回滚到备份,再对照对应版本的官方配置文档逐字段核验,而不是继续叠加修改。
排查完成后的恢复清单
- 删除临时测试节点、临时日志和暴露凭据的文件。
- 恢复原有规则集、DNS 和 TUN 设置,每次只恢复一项。
- 确认客户端退出后系统代理、虚拟网卡和路由没有残留;发现断网时优先关闭客户端或撤销最近一次改动。
- 记录 sing-box 版本、系统、失败时间、首条错误日志和复现步骤,提交问题时脱敏后再提供。
- 如果只有某个服务的节点失败,保留“本地最小配置可启动、其他节点结果、切换网络结果”等证据,再到对应服务页面核对订阅或账户状态。
本文是第三方使用指南,不代表任何节点、订阅或品牌的官方页面;涉及服务状态、订阅期限和账户权限时,以对应服务的可核验信息为准。
常见问题
sing-box check 检查通过,为什么节点还是连接失败?
check 主要用于检查配置结构和加载阶段,不能证明远端端口、认证、TLS 握手、DNS 或实际网页访问一定正常。检查通过后仍要用单节点、单出口做真实连接测试,并结合日志判断。
sing-box 所有节点都 timeout,应该先换节点吗?
不建议直接反复换节点。先关闭 TUN,保留一个节点,切换基础网络,并检查系统时间、客户端权限和配置是否刚更新。如果所有节点在不同网络下仍失败,再核对订阅或服务状态。
sing-box 显示已连接但网页打不开怎么办?
先关闭 TUN,使用普通代理验证;若普通代理可用,再按 DNS、route.final、出站标签和 TUN 自动路由顺序恢复。DNS 解析成功不等于目标网站连接成功,端口监听也不等于完整代理可用。
日志中的 handshake failed 通常要看哪些参数?
先看系统时间和节点协议,再核对 server_name、TLS、证书或公钥、short_id、指纹以及传输方式。缺少服务端原始参数时,不要自行猜测字段值,应重新获取配置或向提供方核验。
Windows、macOS、Android、iOS 的日志入口一样吗?
不一样。命令行 sing-box 通常可通过 log 配置输出到控制台或文件;图形客户端的日志入口、权限和配置编辑能力由客户端实现,Android 和 iOS 应以当前客户端界面为准。