sing-box 节点连接失败怎么办?按症状分层排查
简答:sing-box 节点连接失败不要先改 TUN 或 DNS。先备份配置并执行 sing-box check,确认内核版本、节点参数和配置格式无误;再根据日志区分单节点超时、TLS 握手失败、认证失败、DNS 失败或已连接但网页打不开。这样能先判断问题在配置、节点还是本地网络。
定义:sing-box 节点连接失败,是指配置已导入但出站连接无法建立、建立后无法解析域名,或流量没有按预期经过 sing-box。
先做这 4 步:确认不是配置或启动问题
本文适用于使用 sing-box 内核的桌面端、Android 客户端和路由器环境;不同图形客户端的按钮名称可能不同。本文不替代具体服务商的节点参数说明,也不对任何节点的实时可用性作保证。sing-box 使用 JSON 配置,官方文档提供了配置检查、格式化和合并命令,因此排障应先从配置层开始,而不是直接修改 TUN、DNS 或 MTU。查看 sing-box 官方配置说明
- 备份当前配置。复制 JSON 文件或导出客户端配置,记录当前内核版本、系统、网络类型和失败节点名称。不要把订阅地址、UUID、密码、Reality 私钥或完整服务器地址发到公开论坛。
- 检查配置语法。在配置文件所在目录执行
sing-box check -c config.json。如果你的客户端通过配置目录加载文件,应按客户端实际入口检查;命令行环境也可参考官方的-c与配置目录参数。 - 确认内核版本和配置来源。图形客户端查看“关于”或“内核信息”;命令行安装则以实际二进制输出为准。若刚升级后开始失败,优先用备份配置进行一次对照,避免把版本变化、订阅变化和网络变化混在一起。
- 先关闭 TUN,仅验证普通代理。如果客户端支持 HTTP、SOCKS 或 Mixed 入站,先让浏览器或系统代理指向该本地端口。普通代理能访问而 TUN 不能,故障更可能在 VPN 权限、虚拟网卡、路由或 DNS 接管;两者都不能访问,则继续检查节点参数和本地网络。
官方文档说明 sing-box 的日志可设置为 trace、debug、info、warn、error 等级,也可以输出到文件。排障时临时提高到 debug,复现一次后恢复为原等级,避免长期生成过多日志。查看官方日志字段说明
按症状分流:超时、拒绝、握手和认证失败怎么处理
| 日志或现象 | 优先检查 | 下一步动作 |
|---|---|---|
timeout、连接超时 | 服务器地址、端口、当前 Wi-Fi 或移动网络、单节点还是全部节点 | 先换一个节点和网络;只有单节点失败时,不要先改全局 DNS |
connection refused | 端口是否正确、远端服务是否监听、节点是否已变更 | 核对订阅原始参数;本地能启动不代表远端端口可用 |
TLS handshake、证书或 SNI 报错 | TLS 开关、SNI、服务器名称、传输方式、时间 | 按节点提供方的原始参数逐项核对,不要凭经验替换 SNI 或 Reality 字段 |
invalid user、认证失败 | UUID、密码、用户名、短 ID、密钥或订阅是否过期 | 重新获取或更新配置,避免手工改动认证字段 |
DNS exchange failed、域名解析失败 | DNS server、route.rules、TUN DNS 模式和网络是否能访问 DNS | 先用 IP 与域名分别测试;确认 DNS 请求是否被错误规则拦截 |
| 显示连接但网页打不开 | 系统代理是否生效、route.final、分流规则、TUN 权限和应用排除项 | 先访问一个已知可用的普通站点,再逐步检查规则与应用范围 |
这张表只能用于定位方向,不能把单条日志当作完整结论。例如“节点测速失败”可能来自 DNS、路由、网络切换或节点侧响应;换节点后恢复,只能说明故障范围发生变化,不能证明某个节点长期可用。
单节点失败、多个节点失败、全部节点失败
- 只有一个节点失败:优先检查该节点的地址、端口、协议、TLS、SNI、WebSocket 或 HTTP/2 等字段是否与原始配置一致。不要为了“试试看”同时改协议和传输层。
- 多个节点失败:检查是否来自同一服务器、同一协议或同一订阅批次;再切换 Wi-Fi 与移动网络,观察失败范围是否改变。
- 全部节点失败:先确认订阅是否成功更新、客户端是否真的加载了新配置、本地时间是否正确,以及系统是否被其他代理、VPN、防火墙或安全软件接管。
节点参数与订阅:重点核对这 8 项
- 服务器地址:确认域名没有复制空格、全角字符或错误的 IPv6 格式。
- 端口:核对端口是否属于当前节点,而不是沿用了旧节点的端口。
- 认证信息:核对 UUID、密码、用户名、密钥、短 ID 等字段;不要把订阅链接直接贴进日志。
- 协议类型:确认导入的出站类型和节点实际协议一致。JSON 配置结构、出站和路由字段应以对应版本文档为准。
- TLS 与 SNI:启用 TLS 时,服务器名称、证书校验和传输层参数必须与节点资料匹配;不要把一个节点的 SNI 复制给另一个节点。
- 传输方式:WebSocket、HTTP/2、gRPC、QUIC 等字段不能混用。缺少对应构建能力或字段版本不兼容时,可能在启动阶段就报错。
- 订阅格式:sing-box 使用 JSON 配置;如果来源提供的是其他客户端专用格式,先确认是否已有 sing-box 格式或可靠转换方式,不要只看“订阅下载成功”就认为节点已能连接。
- 更新与回滚:更新订阅前保留旧配置。更新后若所有节点同时异常,立即回滚到旧配置并对比变更内容。
官方配置入口明确列出 dns、inbounds、outbounds 和 route 等结构;因此“配置文件能打开”与“出站参数正确”是两件事,前者通过语法检查并不代表后者一定可用。参照官方配置结构
已连接但无法上网:依次检查代理、TUN、DNS 和路由
- 先验证本地入站端口。确认客户端实际监听的 HTTP、SOCKS 或 Mixed 端口没有被其他程序占用。Linux systemd 环境可查看服务状态和日志;官方安装文档给出了
systemctl与journalctl的管理方式。查看官方服务与日志命令 - 确认系统代理。浏览器代理、系统代理和客户端入站端口要对应;如果只有某个应用打不开,先确认该应用是否遵循系统代理。
- 检查 TUN/VPN 权限。Windows、macOS 和 Android 需要允许客户端创建或使用虚拟网络接口;Android 还要检查是否有其他 VPN 占用 VPNService。关闭 TUN 后普通代理恢复,通常应优先处理这里。
- 检查路由规则。sing-box 的
route.final决定默认出站,路由规则可能把请求送到 direct、block 或错误的代理组。先用最小化规则验证,再逐条恢复复杂规则。查看官方 Route 配置说明 - 检查 DNS。如果 IP 请求可达但域名失败,重点看 DNS 服务器、DNS 规则和 TUN 的 DNS 处理方式。官方 TUN 文档区分了
disabled、native和hijack模式;不同模式会影响系统 DNS 配置和 53 端口流量。不要在不了解回滚方式时直接启用 DNS 劫持。查看官方 TUN 与 DNS 模式 - 最后检查 IPv4/IPv6 与 MTU。如果只有部分网络或部分网站失败,分别测试 IPv4、IPv6 和不同网络。MTU 不应作为第一步修改项;只有在有重复、分片或特定网络路径问题的证据时,再小幅调整并记录原值。
每次只改一个变量,并在修改后重复同一测试:同一节点、同一网址、同一网络。否则即使恢复,也无法判断是订阅、规则、DNS 还是网络切换起作用。
不同系统的最短验证清单
| 环境 | 先看什么 | 恢复方式 |
|---|---|---|
| Windows | 系统代理、TUN 权限、虚拟网卡、Windows 防火墙和其他 VPN | 关闭 TUN 改用本地代理;恢复系统代理原设置后重新启动客户端 |
| macOS | 网络代理、VPN 配置、系统时间、其他网络过滤器 | 先退出其他代理工具,再用普通代理验证,完成后恢复原网络设置 |
| Android | VPN 权限、始终开启 VPN、分应用代理、电池限制和 Wi-Fi/移动网络差异 | 先只代理一个测试应用,关闭分应用限制后重新验证 |
| Linux 或路由器 | 服务状态、监听端口、路由表、iptables/nftables、DNS 和日志 | 使用旧配置启动;必要时停止服务并恢复备份配置 |
桌面版 sing-box 官方页面说明其支持 Windows 10 及以上和 Linux,并提供本地或远程配置管理;但具体图形客户端的 TUN、系统代理和日志入口可能不同,遇到入口不一致时应以客户端版本界面为准。查看官方桌面客户端说明
什么时候可以判断是节点侧问题?
满足以下条件后,才比较适合把问题反馈给节点提供方:配置已通过检查;客户端和内核能正常启动;同一节点在普通代理模式下仍失败;至少换过一个网络;其他节点或其他协议有明确对照;日志显示的是远端连接、认证或 TLS 阶段失败,而不是本地端口、DNS 或路由错误。
反馈时只提供必要信息:系统、客户端类型、内核版本、失败时间、节点编号或脱敏标签、错误关键词和复现步骤。服务器地址、订阅令牌、UUID、密码、私钥和完整配置应打码。若只有单个节点失败,应描述单节点现象;若全部节点失败,应同时说明换网络和回滚订阅后的结果。
常见问题
sing-box 节点测速全部超时,是节点失效了吗?
不一定。测速失败也可能来自 DNS、路由、网络限制、客户端入站未生效或节点参数不匹配。先关闭 TUN,用普通代理测试同一节点,再换一个网络和节点;只有在多项对照都失败时,才把节点侧故障列为较高优先级。
sing-box 能启动,但所有网站都打不开怎么办?
先确认系统代理是否指向 sing-box 正在监听的端口,再检查 route.final 是否指向可用出站。若普通代理能访问而 TUN 不能,重点检查 VPN 权限、虚拟网卡、DNS 模式和路由;不要先同时修改 DNS、MTU 和规则。
出现 TLS handshake failed,应该直接换 SNI 吗?
不要直接猜测。先核对节点原始配置中的 TLS、SNI、证书校验、服务器地址和传输层字段,并检查系统时间。SNI 属于节点参数的一部分,错误替换可能让问题更难定位。
更新订阅后 sing-box 节点连接失败,怎么回滚?
关闭客户端,恢复更新前备份的 JSON 或配置目录,再启动并使用同一网络测试。如果旧配置恢复而新配置失败,保留两份配置的差异,反馈订阅来源时只提交脱敏后的字段和错误信息。
是否应该一开始就启用 TUN 和 DNS 劫持?
不建议。先用普通代理确认出站可用,再启用 TUN;启用后逐项检查 VPN 权限、路由和 DNS。官方文档显示 TUN 的 DNS 模式会改变系统 DNS 配置或处理 53 端口流量,因此修改前应保留原设置并准备回滚。参考官方 TUN 文档
常见问题
sing-box 节点测速全部超时,是节点失效了吗?
不一定。先用普通代理、换网络和换节点做对照,再根据日志判断是 DNS、路由、本地网络还是节点参数问题。
sing-box 能启动,但所有网站都打不开怎么办?
先确认系统代理指向正确的本地端口,再检查 route.final、DNS 和 TUN。普通代理可用而 TUN 不可用时,优先处理 VPN 权限和虚拟网卡。
TLS handshake failed 可以直接换 SNI 吗?
不建议。先按原始节点资料核对 TLS、SNI、证书校验、服务器地址、端口和传输层字段,并检查系统时间。
更新订阅后连接失败怎么恢复?
恢复更新前的配置备份,重新启动并用同一网络测试;如果旧配置可用,再比较新旧配置差异。
要不要一开始就打开 TUN 和 DNS 劫持?
不建议。先验证普通代理和节点出站,再逐步启用 TUN、DNS 和复杂规则,每次只修改一个变量。