sing-box 导入订阅配置失败?先查格式,再按设备排查

更新于 2026-10-24 · uziport.shop

简答:sing-box 导入订阅失败,先看服务端实际返回内容和 User-Agent 是否匹配,再创建 Remote 配置。导入后必须回到 Dashboard 选中当前配置、更新并授权 VPN 或 TUN;仍无法连接时按日志、DNS、路由和权限顺序排查。

定义:sing-box 远程订阅配置,是通过 URL 获取并可在客户端更新、查看和运行的 JSON 配置文件,不等同于 Clash YAML、Surge 配置或 Base64 节点文本。

先试这一步:确认订阅返回的是 sing-box JSON

导入失败时,先不要反复点击更新,也不要仅凭浏览器能否打开链接来判断兼容性。sing-box 配置文件使用 JSON,官方结构中常见有 inbounds、outbounds、dns 和 route 等字段。浏览器、命令行和客户端发出的请求可能带有不同的 User-Agent、登录状态或请求头,因此同一个 URL 可能返回 JSON、Clash YAML、Base64 文本、登录页或错误页。

导入前格式速查
返回内容判断处理方式
以 { 开头,能看到 inbounds、outbounds 或 route更接近 sing-box JSON创建 Remote 配置,导入后查看预览并执行 check 或客户端校验
出现 proxies:、proxy-groups: 和缩进键值更像 Clash YAML优先向提供方索取原生 sing-box JSON,不要直接当作 JSON 导入
是一长串字母、数字和符号,解码后才有节点可能是 Base64 节点订阅优先索取原生 sing-box 链接;确需转换时使用可信的本地转换工具,转换后执行 check
出现 HTML、登录页、403、404 或空白链接、权限、请求头或服务端响应异常核对链接有效期、访问权限和 User-Agent,不要把错误页导入客户端

可先查看 sing-box 官方配置文件说明,其中列出了 JSON 结构和 sing-box check 命令。不同客户端的 Profile、Remote 和 Dashboard 入口,可对照 官方图形客户端通用说明。

安全查看返回内容

  1. 优先在客户端新建 Remote 配置,导入后打开配置预览或编辑器,先确认内容不是 HTML、Base64 或错误信息,再启动。
  2. 桌面系统可以在本机终端查看前几行,下面命令只用于排查,不要把完整输出公开:
curl -L --user-agent "服务商或客户端实际使用的 User-Agent" "订阅链接" | head -n 20

User-Agent 不应机械填写为 sing-box。有些服务端会按客户端名称、平台和版本前缀返回不同格式,应以提供方说明或客户端实际请求为准。若浏览器看到 Base64、登录页或错误页,而客户端能正常获得 JSON,不能据此判定订阅不兼容。

订阅 URL 可能包含 token,命令会进入 shell 历史。查看后应删除包含完整链接的历史记录,并检查终端回滚、临时文件和日志;不要把完整订阅链接粘贴到公共网站或在线转换页面。

统一流程:创建 Remote 后,必须选择当前配置再启动

无论使用哪种平台,都按这条顺序操作:复制原生 sing-box 订阅链接 → 新建 Remote 配置 → 填写名称和 URL → 保存或 Create → 回到 Dashboard 选择当前配置 → Update 或刷新 → 启动并授权系统网络权限。

  1. 在提供方页面寻找明确标注为 sing-box、JSON 或原生配置的链接。Clash、Surge、Base64 或“通用订阅”不要默认兼容。
  2. 打开客户端的 Profiles 或配置页面,选择 New Profile,类型选择 Remote,填写名称和 URL,点击 Create 或保存。
  3. 返回 Dashboard,点选刚创建的配置,使其成为当前配置。只导入而没有选中时,客户端可能仍运行旧 Profile。
  4. 执行 Update、刷新或重新加载,等待远程内容下载完成,再查看配置预览、日志和 Groups。
  5. 启动服务。移动端通常需要允许系统 VPN;桌面端使用 TUN 时,可能需要管理员、系统扩展或其他系统权限。
  6. 打开网页并查看连接日志,确认请求命中了预期出站或策略;仅看到“运行中”不能证明流量已经进入 sing-box。

Remote Profile 的内容来自远程 URL,下一次更新可能覆盖本地修改。需要调试时,先复制配置建立 Local Profile,保留原始 Remote Profile 用于继续更新。

客户端具体按钮名称会随平台和版本变化;官方通用文档明确区分 Profile、Remote、Dashboard、Status、Mode 和 Groups,实际界面以当前客户端显示为准。

五个平台怎么导入:入口和权限对照

Android、iOS、Windows、macOS、Linux 导入差异
平台入口或方式主要权限常见卡点
AndroidProfiles → New Profile → Remote → URL → Create,再回到 Dashboard 选择并更新系统 VPN;TUN 使用 Android VpnServiceVPN 未授权、电池优化、后台限制
iOS进入 Profiles,新建 Remote,保存后回到 Dashboard 选择并更新系统 VPN 配置授权旧 VPN 冲突、系统授权未完成、应用版本差异
Windows使用 sing-box for Desktop 管理本地或远程配置;界面文字以实际版本为准TUN 或系统网络接管可能需要管理员权限旧配置仍被选中、服务权限、TUN 未启动
macOS使用 Desktop 客户端新建 Remote,保存后在 Dashboard 选择并更新VPN、网络扩展或系统扩展授权“隐私与安全性”中的放行提示、扩展未加载
Linux图形客户端按 Desktop 流程;命令行先下载 JSON,再 check 和 runsystemd 服务用户、配置文件权限;TUN 或路由功能可能需要提升权限check 的文件与 systemd 实际读取的文件不一致

官方客户端列表显示,Android 使用 sing-box for Android,iOS 和 macOS 使用 sing-box for Apple platforms,Windows 和 Linux 使用 sing-box for Desktop;桌面客户端用于管理本地或远程配置,并提供平台相关的 TUN 功能,可查看 官方图形客户端列表 和 sing-box for Desktop 说明。

Android 与 iOS

  1. 进入 Profiles,选择 New Profile。
  2. 类型选择 Remote,填写名称和订阅 URL,点击 Create 或保存。
  3. 回到 Dashboard,选择刚创建的 Profile,执行更新。
  4. 启动时允许系统添加或使用 VPN 配置;Android 若启动后停止,再检查电池优化和后台限制。

官方 Android 文档说明,客户端可通过 Android VpnService 提供非特权 TUN 实现,相关限制以 Android 功能说明 为准。

Windows 与 macOS

  1. 打开 Desktop 客户端的 Profile 或配置管理入口,创建 Remote 配置并填入 URL。
  2. 保存后返回 Dashboard,明确选择刚创建的配置,再执行更新。
  3. 先用普通模式确认配置能运行,再按需要开启 TUN 或系统网络接管。
  4. Windows 遇到权限提示时使用管理员权限;macOS 遇到网络扩展或系统扩展提示时,进入“系统设置”的“隐私与安全性”完成放行。

Linux 命令行

如果不使用图形客户端,可按下面流程保存、校验和运行配置。sing-box check 的对象是下载到本机的原始 JSON 文件:

curl -L --user-agent "服务商或客户端实际使用的 User-Agent" "订阅链接" -o /tmp/sing-box-config.json
sing-box check -c /tmp/sing-box-config.json
sing-box run -c /tmp/sing-box-config.json

使用 systemd 时,先确认服务文件实际读取的路径,不要直接假定是当前目录下的 ./config.json:

systemctl cat sing-box
sudo systemctl status sing-box
sudo journalctl -u sing-box --output cat -e

官方包管理文档提供了 systemd 的启停和日志命令;容器示例使用 /etc/sing-box/ 作为配置目录,但本机服务最终读取哪里,应以 systemctl cat sing-box 显示的服务参数为准。可查看 官方包管理与服务管理说明 以及 官方容器配置说明。

导入后没有节点、Groups 为空或无法更新

现象→最可能原因→第一步操作
现象优先怀疑第一步操作
没有节点返回内容不是原生 JSON、远程内容为空或 URL 已失效打开配置预览,确认有 outbounds,并重新 Update
Groups 为空配置没有可展示的分组出站,或客户端展示能力受版本和功能限制检查 outbounds 是否声明 Selector、URLTest 等分组,并以客户端文档为准
JSON parse errorHTML、YAML、Base64、截断内容或 JSON 语法错误用客户端预览或 curl 查看前 20 行,再执行 sing-box check
HTTP 403 或 404链接权限、路径、token、有效期或请求头不匹配重新复制订阅 URL,确认 User-Agent 要求和链接状态
启动后网页打不开当前 Profile 未选中、VPN/TUN 未接管、DNS 或路由未命中查看日志中命中的出站和策略,再检查权限与 DNS
  1. 先确认 Dashboard 当前选中的是新导入的 Profile,而不是旧配置。
  2. 打开配置预览,确认 JSON 中存在有效的 outbounds;只有单个出站时,不一定会出现可切换的 Groups。
  3. 如果配置服务有自动更新,确认 URL 没被截断、空格或转义,并重新执行 Update。
  4. 遇到 403 或 404 时,重新确认订阅有效期、访问权限、路径和 User-Agent,不要把错误页面保存为配置。
  5. 如果日志提示字段不存在或类型错误,记录第一条报错,再对照官方迁移指南,不要在远程配置上反复手工删字段。

Windows、Linux 和版本兼容:先校验,再启动 TUN

命令行配置应先校验,再运行。官方配置文档给出的基本检查形式是:

sing-box check -c config.json

Windows 可在包含 sing-box.exe 的目录执行同样的 check;需要启动本地文件时使用:

sing-box.exe check -c config.json
sing-box.exe run -c config.json

如果 TUN 或系统流量接管需要提升权限,应按 Windows 的权限提示运行;Linux systemd 则要同时检查服务用户、配置文件可读权限和服务实际读取路径。check 通过只代表配置结构和字段校验通过,不代表节点、DNS、路由或系统权限已经正常。

升级前先保留旧配置、旧日志和当前可运行的安装包,再对照 官方迁移指南 与 官方变更记录 检查字段变化。重点关注 DNS 规则、GeoIP/Geosite 到 rule-set 的迁移,以及已经标记为弃用的字段;官方文档明确说明 GeoIP 和 Geosite 已迁移到 rule-set,部分 DNS 旧字段也有弃用或移除时间表。

截至 2026-10-24,Releases 页面当前的 Latest 标记应作为稳定版本核对入口,预发布渠道需单独看其标签,不要只根据客户端或容器页面的版本文字判断兼容性。可查看 官方 GitHub Releases。

启动成功但网页打不开:按日志、DNS、路由和权限排查

  1. 看当前配置。在 Dashboard 再次确认选中的 Profile,并查看运行日志。
  2. 看策略命中。确认连接日志命中了预期出站或策略;如果请求全部走 direct,优先检查 route 和模式,而不是先更换节点。
  3. 查 DNS。如果域名打不开但直接访问 IP 有响应,检查 DNS server、DNS rules、final 和系统私人 DNS。不要把其他内核的字段直接复制到 sing-box。
  4. 查 VPN 或 TUN。移动端确认 VPN 开关仍在运行;Windows、macOS 和 Linux 检查 TUN、网络扩展、服务权限及系统代理是否真正接管流量。
  5. 查端口。sing-box 没有固定的 HTTP、SOCKS 或 mixed 默认端口,实际端口由 JSON 中对应 inbound 的 listen_port 决定。Windows 可用 netstat -ano,Linux 使用 sudo ss -lntup,macOS 使用 lsof -nP -iTCP -sTCP:LISTEN。
  6. 做出口对比。查看连接日志中的策略命中,或在系统代理开启和关闭时对比出口 IP;不要仅凭客户端显示“运行中”判断流量已经接管。

如果只有部分网站失败,再分别检查 MTU、IPv4/IPv6、DNS 响应和目标出站协议。每次只改一个变量,并保留能复现问题的日志。

订阅安全与远程更新:避免凭据泄露和修改丢失

如果 Clash YAML 或 Base64 订阅没有原生 sing-box 链接,优先向提供方索取原生格式。确需转换时,使用来源和构建过程可核验的本地工具,转换后执行 sing-box check,不要把完整凭据交给不明在线服务。

参考资料与相关阅读

本文关于 JSON 配置、Remote Profile、Dashboard、平台客户端、systemd、迁移和版本核对的事实,均以 sing-box 项目公开资料为准。

常见问题

sing-box 可以直接导入 Clash YAML 或 Base64 订阅吗?

不能默认认为可以。sing-box 官方配置使用 JSON;Clash YAML、Base64 节点文本和通用订阅需要原生格式或可信的本地转换流程。转换后应执行 sing-box check。

为什么浏览器打开订阅不是 JSON,但 sing-box 仍然可以导入?

服务端可能按 User-Agent、登录状态或请求头返回不同内容。浏览器与客户端请求不一定相同,应在客户端查看预览,或使用以服务商说明为准的 User-Agent 查看返回前几行。

Android 或 iOS 导入后为什么还不能联网?

导入不等于已经接管流量。请回到 Dashboard 选择当前配置,执行更新并启动,允许系统 VPN;仍无法联网时检查日志中的策略命中、DNS、后台限制和 TUN 状态。

为什么导入成功后 Groups 是空的?

Groups 取决于配置中的分组出站。若 JSON 只有单个出站,或客户端对相关分组展示能力有限,可能没有可切换项目。先检查 outbounds,并以当前客户端文档为准。

Linux 上 sing-box check 通过,但 systemd 启动仍失败怎么办?

check 的文件可能不是 systemd 实际读取的文件。先用 systemctl cat sing-box 查看服务参数,再检查配置文件权限、运行用户和 sudo journalctl -u sing-box --output cat -e 的第一条错误。

远程订阅更新后,本地修改为什么消失了?

Remote Profile 的内容来自 URL 更新,本地修改可能被覆盖。调试时先复制配置建立 Local Profile,同时保留原始 Remote Profile 作为更新来源。

相关阅读

参考资料

  1. Introduction - sing-box
  2. 通用 - sing-box
  3. Graphical Clients - sing-box
  4. sing-box for Desktop - sing-box
  5. Features - sing-box for Android
  6. Package Manager - sing-box
  7. Docker - sing-box
  8. Migration - sing-box
  9. Change Log - sing-box
  10. Releases - SagerNet/sing-box