你在 sing-box 里导入订阅后,常见现象是:订阅链接能粘贴进去,但节点列表为空,或者提示「invalid subscription」「decode config failed」「parse config: unknown field」;也有人能导入成功,却发现访问国内网站和国外网站都走了同一条线路,分流规则根本没生效。

如果你还遇到「订阅更新失败」「URL 403/404」「EOF」「certificate signed by unknown authority」之类报错,通常不是 sing-box 本身坏了,而是订阅格式、链接权限、DNS/TLS、或配置合并方式出了问题。

先分清是哪种情况

主流协议对比协议加密抗封锁速度推荐度VLESS+RealityAES-256极高★★★★★WireGuardChaCha20最快★★★★☆TrojanTLS 1.3★★★★☆ShadowsocksAES-256★★★☆☆OpenVPNAES-256★★★☆☆

1. 订阅链接本身不可用:链接过期、账号没权限、复制时把空格或换行带进去了,常见报错是 403、404、EOF、invalid URL。

2. 订阅格式不对:你导入的是别的软件订阅,或服务端给的是 JSON/YAML 配置,但客户端按另一种格式解析,常见报错是 decode config failed、unknown field、unsupported scheme。

3. 分流规则没有真正加载:节点能用,但全都直连或全都走代理,多半是规则顺序不对、规则集没更新、默认出口没设好,或者启用了错误的入站/出站。

4. 证书或网络环境问题:更新订阅时解析域名失败、TLS 校验失败、连接被中间设备拦截,这类会表现为 update failed、certificate signed by unknown authority、dial tcp timeout。

分步解决

1. 先确认你导入的到底是什么类型的订阅。

如果是服务商给的链接,通常有两种:一种是直接给客户端用的订阅 URL,另一种是导出为 sing-box 配置文件的 JSON/YAML。

在 Windows/macOS 版 sing-box GUI 里,先看「订阅」「Profiles」「配置文件」页面,确认导入方式是「订阅导入」还是「从文件导入」。

在 Android/iOS 客户端里,通常是“添加配置”或“订阅”入口,不要把“配置文件链接”误填到“节点链接”里。

如果导入时报 unknown field,先怀疑格式用错,不要急着改参数。

2. 检查链接是否真的可访问。

把订阅 URL 复制到浏览器地址栏,或在终端里测试:

Windows PowerShell:curl -I "你的订阅链接"

macOS / Linux 终端:curl -I "你的订阅链接"

看返回是否是 200、302、401、403、404。

如果是 403,通常是账号权限、UA 校验或地区限制;401 说明需要鉴权;404 多半是链接失效;302 是跳转,正常但要继续跟随跳转后再看内容。

如果浏览器能打开但客户端失败,检查链接里有没有被自动断行、空格、中文引号。

3. 校验导入时选择的订阅格式。

如果你拿到的是 sing-box 配置文件,应使用“导入配置文件”而不是“订阅解析”。

如果你拿到的是 Clash、Surge、V2Ray 之类的订阅,不要直接当成 sing-box 原生配置导入,除非服务端明确说明兼容。

常见现象是:

报错 unknown field:配置里有 sing-box 不认识的字段,说明不是当前版本支持的格式。

报错 parse config: expected value:文件内容损坏、编码不对,或复制时带了说明文字。

解决方法是让服务端重新导出 sing-box 格式,或在客户端里选择正确的订阅类型。

4. 修正分流规则顺序。

sing-box 的规则是按顺序匹配的,前面的规则会先命中。

如果你想让国内直连、国外走代理,常见做法是把地理规则放在前面,再放兜底规则。

在配置里检查 route/rules 或 rule_set 相关部分,确认有类似:

geoip: cn 直连

geosite: private 直连

最后一条才是 default outbound 到代理

如果你的规则写成“全部域名走代理”在前面,那后面的国内直连永远不会生效。

GUI 里一般在「路由」「分流」「规则」页面调整顺序,改完记得保存并重载配置。

5. 检查默认出口和 DNS。

很多“分流没生效”不是规则错了,而是 DNS 先走错了。

在 sing-box 配置中,确认 DNS 服务器可用,且 DNS 规则没有把所有请求都送到同一个出口。

如果你用了 fakeip、redir、tun 模式,要确认入站和路由已同时启用,否则系统流量可能绕开 sing-box。

在 Windows 上,管理员权限运行客户端更稳妥;在 macOS 上,确认“网络扩展”已允许;在 Android 上,确认 VPN 权限已授予;在 iOS 上,确认配置文件已安装并在系统 VPN 中启用。

6. 处理证书类报错。

如果更新订阅时报 certificate signed by unknown authority,说明服务器证书链不被系统信任,或中间有代理设备替换证书。

先检查系统时间是否准确,时间偏差会导致 TLS 失败。

再确认你访问的是 HTTPS 链接,不是被改写过的地址。

如果是自建服务,检查服务端证书是否完整,是否缺少中间证书。

临时测试时,也可在浏览器里打开同一地址,看是否同样报证书错误;若浏览器也失败,问题通常不在 sing-box。

验证是否修好

加密强度不记录日志DNS 防泄露断网保护协议混淆连接速度综合安全评分:86/100

导入成功后,先看三件事。

第一,节点列表是否完整显示,名称、延迟、地区是否正常。

第二,打开一个国内网站和一个国外网站,观察日志里是否出现不同的出站名称。

第三,在客户端的连接日志里搜索目标域名或 IP,确认命中了预期规则。

如果是命令行环境,可以运行 sing-box check -c 配置文件路径,或启动时观察日志里是否还有 parse、decode、unknown field 之类错误。

如果你改的是分流规则,重点看访问中国大陆站点是否直连、访问需要代理的站点是否走代理,而不是只看“能不能上网”。

还是不行怎么办

先回退到最小配置:只保留一个可用入站、一个出口、最基础的直连/代理两条规则,确认核心功能正常后再逐步加回 rule_set、DNS、嗅探、TUN。

再做一次“新建空配置导入”,不要在旧配置上反复叠加,避免遗留字段干扰。

如果日志里一直是连接超时、DNS 失败、TLS 握手失败,而你确认订阅地址没问题,就检查当前网络是否限制了对订阅服务器的访问;这类情况下,可以先换一个能正常访问订阅源的网络环境,或临时使用一个可用的代理工具完成首次更新,例如 Roxi。

如果是客户端版本太旧,升级到当前稳定版再试;如果是服务端导出的配置有问题,让对方重新生成 sing-box 格式,并去掉不兼容字段。

最后,把报错原文、导入的文件类型、客户端平台、以及日志中第一条失败信息记下来,通常这四项就足够定位问题。