sing-box 更新后连不上或报错?先按这几项排查
简答:sing-box 更新后先不要重装:按“确认客户端与内核版本→复制第一条完整报错→运行 check→核对订阅格式→检查 DNS、Route、TUN 和权限→最后测试节点”的顺序排查。这样能先判断是配置迁移、订阅内容还是实际链路问题,避免一开始就删配置或换节点。
定义:sing-box 更新后连接失败,是指客户端界面、sing-box 内核或远程订阅刷新后出现启动失败、配置解析失败、节点握手失败,或显示运行但没有实际流量。
先看这张速查表:不要把配置关键词当成日志原文
本文只讲 sing-box 更新后出现连接失败或报错的通用排查,覆盖 Windows、Android、macOS 和 Linux。本站是第三方使用指南站,不是相关客户端或项目的官方站点。先复制日志中的第一条完整报错,再判断它属于语法、文件、字段解析还是运行链路问题。
| 层级 | 对应报错或现象 | 先查什么 | 是否适合回退 |
|---|---|---|---|
| JSON 语法 | invalid character、括号或逗号错误 | 检查 JSON 引号、逗号、括号和注释 | 通常不必回退 |
| 读取文件 | no such file、permission denied | 核对绝对路径、文件权限和客户端工作目录 | 回退通常无效 |
| 字段解析 | unknown field、decode error | 检查旧字段、订阅格式和配置生成器输出 | 可用旧内核做对照 |
| 证书解析 | failed to parse certificate | 检查 certificate_path 是否指向 PEM 证书,而不是公钥或 DER 文件 | 先改字段,不要先换节点 |
| 迁移关键词 | legacy strategy、match_response | 这是配置字段或迁移相关关键词,不一定是完整日志原文 | 按官方迁移条目修改 |
| 运行链路 | 启动成功但网页打不开、DNS 超时、节点握手超时 | 分别测试代理端口、DNS、Route、TUN 和单个出站 | 最后才换节点 |
legacy strategy、match_response更适合作为配置搜索词;如果日志里没有完整出现这些字样,不要把它们当成固定报错。配置检查通过也不代表节点、DNS、代理端口和 TUN 已经正常。
第 1 步:确认是客户端、内核还是订阅发生了变化
- 客户端版本:查看图形客户端的“关于 / About”或“设置 / Settings”页面,记录客户端版本和系统版本。
- 内核版本:如果客户端允许选择内核,记录实际运行的 sing-box 版本;不要只看客户端界面版本。
- 配置生成器版本:记录订阅转换或配置生成器的更新时间、输出格式和是否刚刚刷新。客户端、内核、配置生成器三者中任意一个变化,都可能让同一份配置表现不同。
- 保存旧环境:先复制此前可用的配置、订阅返回文件和旧版可执行文件到固定的绝对路径,例如
C:\sing-box\backup\config-working.json、C:\sing-box\backup\sing-box-old.exe或/opt/sing-box/backup/config-working.json。不要只保存订阅链接,因为远程内容可能继续变化。 - 暂停自动覆盖:在客户端设置中暂时关闭“自动更新 / Auto Update”和“自动刷新订阅 / Auto Refresh”;如果界面没有独立开关,就暂时退出客户端,手动保留一份配置副本后再测试。具体菜单名称会随客户端版本变化。
官方 Change Log 当前可见 1.14.0 稳定条目以及 1.15.0-alpha 系列条目,不能把 alpha 条目直接当作稳定版名称。官方迁移页把 TUN stack 的迁移节点写为 1.15.0:该字段在 1.15.0 废弃,并计划在 1.17.0 移除;实际是否已经安装到对应版本,应以你本机的版本输出为准。可对照官方 Change Log和官方 Migration 页面。
第 2 步:运行配置检查,再按报错类型处理
Windows PowerShell:下面使用绝对路径;请替换成实际文件位置。sing-box.exe 和配置文件不在同一目录时,也要分别写出完整路径。
C:\sing-box\sing-box.exe version
C:\sing-box\sing-box.exe check -c C:\sing-box\config\config.json官方配置文档说明 sing-box 使用 JSON,并提供 check 命令。完整配置结构和检查命令可查看官方 Configuration 文档。
- JSON 语法错误:先修复引号、逗号、括号和非法注释。
no such file:确认路径真实存在,避免依赖当前工作目录。permission denied:确认当前用户能读取配置、证书和规则集缓存。unknown field:不要整份删除配置,先搜索报错字段,再对照 Migration 和 Deprecated 页面。decode error:检查订阅返回内容是否真的是完整 sing-box JSON,而不是 Clash YAML、Base64 分享内容、登录页或错误页。
遇到 failed to parse certificate
截至 2026-10-25,问题 #4658 页面仍显示为 Open。该问题的报告者环境是 Windows 图形客户端,配置把由 OpenSSL 导出的 public_key.pem 填入了 certificate_path。这只能说明该报告中的具体配置存在证书字段核对点,不能证明所有更新后的 sing-box 都有同一故障。可查看Issue #4658 原始配置和日志。
先核对三项:certificate_path 是否是 PEM 编码的服务器证书或证书链;是否误填了公钥、私钥或 DER 二进制文件;server_name 是否与证书名称匹配。官方 TLS 字段文档将 certificate_path、certificate_sha256 和 certificate_public_key_sha256 分开定义,不能仅因文件扩展名是 .pem 就认定字段用途正确。详见官方 TLS 文档。
遇到 legacy strategy 或 match_response
官方 DNS Rule Action 文档写明,strategy 在 sing-box 1.14.0 废弃,并计划在 1.16.0 移除。官方 Change Log 还说明,1.14.0-alpha.10 引入了 evaluate 和响应匹配字段,match_response需要配合前置的 evaluate 动作使用。不要把 match_response: true 单独添加到任意规则,先按官方 DNS Rule Action 文档和Migration 页面对应条目检查规则顺序。
第 3 步:检查 rule-set、DNS、Route 和 TUN
如果旧配置里还出现 geoip 或 geosite,不要简单理解为“规则文件丢了”。官方迁移文档显示,GeoIP 和 Geosite 已迁移到 rule_set;现在应检查规则集的 tag、url、缓存文件和下载路径是否可用。对应说明见官方 GeoIP/Geosite 迁移条目和官方 rule-set 文档。
| 现象 | 优先检查 | 操作顺序 |
|---|---|---|
| 启动即退出 | JSON、字段、证书路径、规则集初始加载 | 先运行 check,再用最小配置启动 |
| 显示运行但网页打不开 | 代理端口、DNS、Route 和系统代理 | 先测试本地代理端口,再测试目标网站 |
| 普通代理可用但 TUN 不通 | TUN/VPN 权限、旧 stack、路由冲突 | 先关闭 TUN,确认 HTTP/SOCKS 或 Mixed 入站可用 |
| 规则集下载失败 | 远程 URL、证书校验、缓存文件和下载路径 | 暂时减少规则,单独确认规则集能否加载 |
| 单个节点握手失败 | 地址、端口、TLS、系统时间和节点参数 | 用最小配置只测试一个出站 |
Route 规则按顺序匹配,更具体的规则应放在前面;如果使用远程规则集,要确认对应文件或远程地址可访问。Route、默认解析器和规则匹配字段可查看官方 Route 文档。不要用 ping 或 nslookup 代替代理出口测试;验证 HTTP 代理时,应使用客户端页面显示的本地端口,并在 PowerShell 中执行类似命令:
curl.exe -x http://127.0.0.1:7890 https://example.com -I上面的端口只是占位示例,需替换为客户端实际监听端口;如果客户端提供 SOCKS5 端口,则改用对应的 socks5h://127.0.0.1:端口。只要代理端口、DNS、目标网站和 TUN 分开验证,就能避免把一个层面的错误误判成节点失效。
第 4 步:不同平台分别检查哪里
| 平台 | 先检查 | 可执行操作 |
|---|---|---|
| Windows | TUN 权限、其他 VPN/代理、配置绝对路径 | 先关闭其他网络代理,重新授权 TUN,再运行 PowerShell 的 version 和 check |
| Android | VPN 授权、后台限制和电池优化 | 在系统“设置 → 网络和互联网 → VPN”中确认 sing-box 的 VPN 权限;撤销后重新授权,并检查电池优化是否限制后台运行 |
| macOS | Network Extension、系统扩展和应用数据 | 在“系统设置 → 通用 → 登录项与扩展”检查网络扩展;如果更新后配置消失,重新导入并查看客户端服务日志 |
| Linux | systemd 用户、配置绝对路径和权限 | 使用 systemctl status 和 journalctl 检查服务状态与日志 |
Linux 示例:以下命令适用于服务名确实为 sing-box 的 systemd 部署;如果服务名不同,请替换服务名。
sudo systemctl status sing-box --no-pager
sudo journalctl -u sing-box -n 100 --no-pagerAndroid 的 TUN 由系统 VPN 能力提供,macOS 的 TUN 依赖 NetworkExtension;官方平台说明可分别查看Android 特性文档和Apple 平台特性文档。如果只是客户端更新,权限或应用数据迁移也可能变化,不要直接把问题归因于节点。
第 5 步:重导、改配置、回退和换节点怎么选
| 处理方式 | 适合什么时候用 | 主要风险 |
|---|---|---|
| 重导订阅 | 确认订阅返回完整 sing-box JSON,且生成器已适配当前内核 | 可能覆盖此前可用的手工修改和旧配置 |
| 修改配置 | 日志明确指出旧字段、证书格式、规则顺序或路径错误 | 改错字段可能引入新的解析错误 |
| 回退内核 | 更新前同一配置和节点可用,更新后出现明确解析或迁移问题 | 旧内核可能缺少新字段,不能长期替代迁移 |
| 换节点 | 最小配置能启动,代理端口和 DNS 正常,只有单个出站持续握手失败 | 会掩盖真实的配置兼容问题 |
- 保存当前配置和日志。
- 用
check确认配置能解析。 - 关闭 TUN 和复杂规则,只保留一个入站、一个 DNS 和一个出站。
- 验证本地代理端口,再验证 DNS 和目标网站。
- 最后恢复规则集、TUN 和自动刷新。
每次只改一项,并记录改动前后的版本和结果。这样即使需要回退,也能知道是哪个字段或哪个平台权限导致问题,而不是把“重装后暂时恢复”误认为根因已经解决。
常见问题
sing-box 更新后应该直接重导订阅吗?
不建议。先保存旧配置,确认订阅响应是完整 sing-box JSON,再运行 check。如果只是旧字段不兼容,按 Migration 修改通常比直接覆盖配置更容易定位。
check 通过后为什么仍然打不开网页?
check主要说明配置可以被解析,不代表节点握手、DNS、Route、代理端口或 TUN 已正常。应依次测试启动、代理端口、单节点、DNS、目标网站和 TUN。
legacy strategy 和 match_response 是固定日志报错吗?
不一定。它们更适合作为配置搜索词或迁移关键词。strategy涉及 DNS 规则动作迁移,match_response涉及响应匹配和前置 evaluate,需要结合第一条完整日志和配置位置判断。
failed to parse certificate 应该先换节点吗?
不应先换。先检查 certificate_path 是否指向正确的 PEM 证书或证书链,是否误用了公钥、私钥或 DER 文件,并核对 server_name。问题 #4658 截至 2026-10-25 仍显示 Open,只能作为具体配置核验入口。
更新后 TUN 还能不能保留 stack 字段?
官方文档写明,stack 在 1.15.0 废弃,并计划在 1.17.0 移除。若你的内核属于 1.15.0 系列或测试版本,先备份配置,再按官方 Migration 删除该字段测试;具体版本状态以本机版本和官方 Change Log 为准。
什么时候才值得换节点?
当配置检查通过、最小配置能启动、本地代理端口正常、DNS 可用,而单个出站仍持续握手失败时,再换节点或测试其他出站。否则换节点可能掩盖配置问题。
常见问题
sing-box 更新后应该直接重导订阅吗?
不建议。先保存旧配置,确认订阅响应是完整 sing-box JSON,再运行 check;如果是旧字段不兼容,优先按 Migration 修改。
check 通过后为什么仍然打不开网页?
check 主要验证配置能否解析,不代表节点握手、DNS、Route、代理端口或 TUN 正常,应按启动、端口、单节点、DNS、目标网站、TUN 顺序验证。
legacy strategy 和 match_response 是固定日志报错吗?
不一定,它们更适合作为配置搜索词或迁移关键词。strategy 涉及 DNS 规则动作,match_response 涉及响应匹配和前置 evaluate。
failed to parse certificate 应该先换节点吗?
不应先换。先检查 certificate_path 是否是正确的 PEM 证书或证书链,是否误用了公钥、私钥或 DER 文件,并核对 server_name。
什么时候才值得回退或换节点?
更新前同一配置可用、更新后出现明确解析或迁移错误时,可用旧内核做对照;只有配置和 DNS 正常而单个出站持续握手失败时,才适合换节点。