sing-box 订阅导入失败?先确认格式、Remote 和 VPN 启动
简答:先确认服务商提供的是 sing-box 远程配置 URL 或原生 JSON,再添加 Remote 配置并启动 VPN;Clash YAML、Base64 和普通节点链接不能默认直接当作 sing-box 配置使用。
定义:sing-box 订阅通常是服务商提供的远程配置 URL,客户端按 URL 下载并更新 JSON 配置,而不是把任意节点链接直接当作原生配置。
30 秒判断卡:你拿到的内容能不能直接导入
先看内容类型,再决定导入方式。sing-box 官方文档明确说明,配置文件使用 JSON 格式;图形客户端的 Remote Profile 则以 URL 作为远程配置更新来源。可参考sing-box 配置文件引言和图形客户端通用功能说明。
| 你手里的内容 | 能否直接作为原生配置 | 正确做法 | 正常判定 |
|---|---|---|---|
| 服务商明确标注的 sing-box 远程配置 URL | 通常可以尝试 | 客户端新增 Remote Profile,粘贴 URL 后更新 | 能下载配置,显示更新时间或配置内容 |
| 本地 sing-box JSON 文件 | 可以尝试 | 选择 Local Profile 导入文件 | 检查命令成功,且配置包含有效节点或出站 |
| Clash 或 Mihomo YAML | 不能默认直接使用 | 向服务商索取 sing-box 格式,或仅使用其明确支持的转换方式 | 客户端能解析,而不是只有文件能下载 |
| Base64 文本或普通节点链接 | 不能默认直接使用 | 回到服务商页面选择 sing-box 订阅类型 | 以服务商适配说明和客户端实际更新结果为准 |
- 在你购买服务的服务商用户中心、订阅页面或客服提供的页面获取链接,入口以服务商官方说明为准。
- 优先复制明确标注为 sing-box 的订阅链接,不要只根据文件后缀或网页能否打开来判断。
- 把完整订阅 URL 当作账号凭据,不要发到群聊、截图、Issue 或公共文档中。
- 不要把完整 URL 直接写进命令参数,因为它可能进入 Shell 或 PowerShell 历史记录。
本文与 sing-box 项目及其开发者无隶属关系;客户端名称、下载入口和功能以sing-box 官方图形客户端列表为准。官方列表区分 Android、Apple 平台和 Desktop,也提示部分声称使用 sing-box 的第三方项目并不在官方列表中。
手机端怎么导入:Android、iPhone 和 iPad
Android 官方客户端可以管理并运行本地或远程 sing-box 配置,也提供 TUN 透明代理功能;官方页面列出的系统要求为 Android 5.0 及以上,下载入口包括 Play Store、GitHub Releases 和 F-Droid。具体应用入口和版本以官方页面为准,参考sing-box for Android 官方说明。
- 从官方客户端页面进入对应下载入口,注意辨别同名第三方应用。
- 打开应用,进入 Profiles、配置或类似名称的配置管理页面。
- 选择新增 Remote Profile,填写配置名称和服务商提供的 sing-box URL。
- 保存后手动更新一次,确认能下载配置并显示更新时间或配置内容。
- 回到 Dashboard 或运行页面,选择节点或分组,启动 VPN,并完成系统授权。
- 确认客户端显示运行中,再测试网页、DNS 和实际业务连接。
Apple 平台官方页面说明,SFI、SFM、SFT 可管理并运行本地或远程配置,覆盖 iOS、macOS 和 Apple tvOS;页面列出的要求为 iOS 15.0+、macOS 13.0+ 和 Apple tvOS 17.0+,并要求使用中国大陆以外的 Apple 账号。下载入口和应用名称可能随版本变化,应以sing-box for Apple platforms 官方说明为准。
- 打开官方页面确认当前平台对应的应用名称和下载方式。
- 进入 Profiles 或配置管理页面,新增 Remote Profile。
- 粘贴订阅 URL,保存并执行更新。
- 选择可用节点或分组,开启连接并完成系统 VPN 授权。
- 如果在 App Store 或 TestFlight 找不到应用,先核对 Apple 账号地区和官方页面,不要随意安装同名第三方应用。
Windows、Linux 和 macOS:Remote 与本地 JSON 怎么选
官方 Desktop 客户端可以管理并运行本地或远程 sing-box 配置,并提供平台相关的 TUN 功能;官方页面列出的桌面系统包括 Windows 10+ 和 Linux。macOS 使用 Apple 平台客户端或其独立版本,入口以官方页面为准,参考sing-box for Desktop 官方说明和sing-box for Apple platforms 官方说明。
| 平台 | 导入方式 | 启动前检查 | 验收重点 |
|---|---|---|---|
| Windows | 图形客户端新增 Remote 或 Local Profile | 启用 TUN、虚拟网卡或修改系统网络时,按提示以管理员身份运行;先退出其他 VPN、代理和 TUN 工具 | 检查客户端运行状态、TUN 或系统代理状态,以及 DNS 是否正常 |
| Linux | 图形客户端 Remote,或命令行运行本地 JSON | 涉及 TUN、路由或 DNS 接管时,可能需要更高权限;确认已安装 sing-box | 查看日志、路由和 DNS,确认配置确实在转发流量 |
| macOS | Apple 平台客户端或官方独立版本 | 首次启用系统网络扩展或 VPN 时按提示授权;不要同时运行多个网络接管工具 | 确认 VPN 状态、节点可选、DNS 查询和目标业务连接 |
官方客户端列表使用 SFA、SFI、SFM、SFT 和 Desktop 等名称。它们并不是所有平台的同一个应用,下载前应以官方客户端列表核对平台、名称和入口,不要仅凭第三方页面的简称安装。
如果你拿到的是本地 JSON,可在配置目录中运行官方文档列出的检查和格式化命令。命令是否可用取决于已安装的 sing-box 版本,先用帮助命令确认:
sing-box --help:查看当前版本支持的命令和参数。sing-box check:检查当前配置结构。sing-box format -w -c config.json -D config_directory:按实际文件名和配置目录替换后格式化。sing-box merge output.json -c config.json -D config_directory:按需合并配置文件。
上述命令来自sing-box 配置文件引言。正常标准不是“命令没有输出”,而是进程成功结束、没有 JSON 解析错误,并且配置中存在可用的出站或节点分组。
用 sing-box User-Agent 检查订阅,避免把返回格式判断错
订阅服务可能根据 User-Agent、请求头或授权状态返回不同内容,因此浏览器、curl 默认请求和客户端实际拉取的结果可能不一致。下面的命令只作辅助检查,最终以带 sing-box User-Agent 的请求或客户端实际更新结果为准;如果服务商要求额外请求头,应以服务商说明为准。
Linux 或 macOS 需要已安装 curl 和 Python 3。命令通过交互方式读取 URL,不把完整地址直接写进命令参数;输入内容仍可能出现在屏幕或终端记录中,因此不要在公共环境执行。
read -r -s -p "订阅 URL: " SUB_URL; echocurl -A "sing-box" -fsSL "$SUB_URL" -o /tmp/sing-box-subscription.jsonpython3 -m json.tool /tmp/sing-box-subscription.json > /dev/null && echo "看起来是可解析 JSON" || echo "不是可直接解析的 JSON"rm -f /tmp/sing-box-subscription.json
如果 Python 3 能解析,说明当前请求条件下返回内容具备 JSON 结构;如果失败,不要立即断定订阅失效,也可能是 YAML、Base64、登录页、错误页或需要额外请求头。检查结束后删除临时文件,因为返回内容可能包含节点凭据。
Windows PowerShell 5.1 建议使用 -UseBasicParsing。下面的输入使用安全字符串,避免直接回显 URL;它只降低屏幕显示风险,不等于订阅凭据已经安全。
$secure = Read-Host "订阅 URL" -AsSecureString$ptr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)try { $subUrl = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr) } finally { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ptr) }$outFile = Join-Path $env:TEMP "sing-box-subscription.json"Invoke-WebRequest -UseBasicParsing -Headers @{ "User-Agent" = "sing-box" } -Uri $subUrl -OutFile $outFiletry { Get-Content $outFile -Raw | ConvertFrom-Json -ErrorAction Stop | Out-Null; Write-Host "可解析 JSON" } catch { Write-Host "不是可直接解析的 JSON" }Remove-Item $outFile -Force -ErrorAction SilentlyContinue
PowerShell 的 try/catch 会在 JSON 解析失败时输出明确结果,不会误报为成功。若之前把完整 URL 直接输入过命令行,可按需清理历史:PowerShell 执行 Clear-History 只清当前会话;若要删除 PSReadLine 保存的历史,可先执行 $historyPath = (Get-PSReadLineOption).HistorySavePath,再执行 Remove-Item $historyPath -Force。后一个命令会删除该历史文件,执行前确认不需要保留其他记录。
bash 中如果 URL 曾出现在某条历史命令里,先用 history 找到行号,再执行 history -d 行号,最后执行 history -w 写回历史文件;也可以用 history -c 清除当前会话历史。无论使用哪种方法,最稳妥的处理仍是回服务商页面撤销、重置或重新生成订阅凭据。
导入成功后的验收与报错排查
- 配置验收:Remote Profile 能完成更新,更新时间发生变化,日志没有 JSON 解析、认证或下载超时错误。
- 节点验收:能看到服务商提供的节点或分组。如果只有 direct、列表为空或没有可选分组,先检查订阅格式和服务商适配范围。
- 连接验收:客户端显示运行中,手机已完成 VPN 授权;Windows 使用 TUN 或虚拟网卡时已按提示以管理员身份运行。
- DNS 验收:先打开普通网页,再检查目标业务是否能解析和建立连接。网页能打开但特定应用不通时,继续检查 DNS、规则和应用自身代理设置。
- 日志验收:JSON、parse、timeout、authentication、no such host 等关键词只能作为经验性线索,不是官方一一对应的错误分类,最终应结合完整日志和复现步骤判断。
| 现象 | 先检查 | 处理方式 |
|---|---|---|
| JSON 解析失败 | 返回内容、User-Agent、是否拿到网页错误页 | 重新获取 sing-box 专用链接,不要只把 YAML 或 Base64 改名为 JSON |
| 下载失败或超时 | URL 是否过期、网络是否可访问、是否需要额外请求头 | 按服务商说明更新凭据,并在客户端日志中确认失败阶段 |
| 配置导入但节点为空 | 配置是否真正更新、服务商是否限制客户端类型 | 确认服务商提供的是 sing-box 适配配置,而不是其他客户端格式 |
| 字段弃用或启动失败 | 配置使用的核心版本和报错字段 | 查看sing-box 迁移指南和官方更新日志,让服务商提供适配当前版本的配置;不要自行猜测替代字段 |
| 启动后无法联网 | VPN 权限、TUN 状态、其他代理、DNS 和完整日志 | 先关闭冲突的 VPN、代理和 TUN 工具,再逐项恢复配置 |
官方迁移指南显示,某些旧字段会被标记为 deprecated,后续版本可能移除或要求改用新结构。例如 TUN 的 stack 在官方迁移页面中已有版本迁移说明。因此,遇到“字段不存在”“启动拒绝”或类似报错时,先核对核心版本与配置来源,再让服务商重新生成适配配置,不要凭经验混用不同版本字段。
如果使用第三方订阅转换服务,完整订阅 URL 通常会交给该服务处理,存在凭据暴露风险。除非服务商明确要求并确认可信来源,否则不要把订阅 URL 粘贴到陌生转换站;如果已经使用,应按订阅泄露处理,删除相关配置并在服务商页面撤销、重置或重新生成凭据。
常见问题
Clash YAML 可以直接导入 sing-box 吗?
不能默认直接导入。sing-box 原生配置使用 JSON,Clash YAML 需要服务商提供 sing-box 格式,或使用服务商明确支持的转换方式;不要只把扩展名改成 .json。
为什么 curl 返回的内容和客户端看到的不一样?
订阅服务可能根据 User-Agent、请求头或授权状态返回不同格式。可以使用 User-Agent 为 sing-box 的请求辅助检查,但最终应以客户端实际更新结果和完整日志为准。
PowerShell 检查订阅时为什么总是显示成功?
如果没有使用 try/catch 和 -ErrorAction Stop,ConvertFrom-Json 失败后脚本可能继续执行。应使用带异常处理的写法,并在检查结束后删除临时文件。
导入成功但节点列表为空怎么办?
先确认 Remote Profile 是否真的更新成功,再检查返回格式、订阅有效性和服务商是否限制客户端类型。必要时重新获取明确适配 sing-box 的配置。
Windows 启动 sing-box 后没有网络怎么办?
先以管理员身份运行需要 TUN 或虚拟网卡权限的客户端,关闭其他 VPN、代理和 TUN 工具,再检查 VPN 授权、DNS、系统代理和完整日志。
第三方订阅转换服务用过后需要做什么?
第三方服务可能接触完整订阅 URL,应把它按凭据泄露处理。删除相关配置,并根据服务商提供的功能撤销、重置或重新生成订阅链接。