sing-box配置导入失败?先分清 JSON、订阅和节点链接
简答:sing-box配置导入失败,通常是把订阅网址、单个节点链接或 Clash YAML 当成了完整 JSON。先判断格式,再用 sing-box check 校验,随后用系统代理验证连接,最后按需启用 TUN。
定义:sing-box配置是用 JSON 描述日志、DNS、入站、出站和路由的配置文件,远程订阅与单个节点链接并不等同于完整配置。
先看这张表:你拿到的内容能不能直接导入
导入失败多半不是“节点一定不可用”,而是输入类型和导入入口不匹配。先看内容特征,再决定是保存为配置文件、添加远程配置,还是使用节点导入功能。本站是第三方使用指南站,不是 sing-box 项目的官方站点;字段和命令以sing-box 官方配置参考为准。
| 内容类型 | 常见特征 | 正确处理方式 |
|---|---|---|
| 本地 JSON 配置 | 通常以 { 开头,包含 inbounds、outbounds 或 route | 保存为 config.json,先执行 check,再导入或运行 |
| 远程配置或订阅 | 是 HTTP 或 HTTPS 地址,客户端需要联网下载内容 | 在客户端的远程配置入口添加地址,不要把网址粘贴进 JSON 文件 |
| 节点分享链接 | 只描述一个节点或一个出站,通常没有完整入站和路由 | 使用客户端的节点导入功能,或按协议生成对应出站配置 |
| Clash YAML 或其他格式 | 结构和字段不是 sing-box 官方 JSON 配置 | 不能只改扩展名,转换后必须重新检查完整配置 |
最快判断:如果内容不是合法 JSON,或者只有单个节点字段而没有完整配置结构,就不要把它直接当作可运行的 sing-box 配置。
最小 config.json:先验证程序、端口和 JSON 结构
下面的配置只使用本地 mixed 入站和 direct 出站,适合先验证 sing-box 能否读取配置、监听端口并启动。它不会自动提供远程节点,也不会改变出站线路。
{
"$schema": "https://sing-box.sagernet.org/schema.json",
"log": {
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "mixed",
"tag": "mixed-in",
"listen": "127.0.0.1",
"listen_port": 2080
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"final": "direct"
}
}log控制日志;inbounds定义本机如何接收流量;outbounds定义流量从哪里出去;route.final指定没有命中其他规则时使用的出站。mixed入站同时提供 SOCKS 和 HTTP 代理能力,字段说明见官方 mixed 入站文档。
重要:这个模板的 direct 出站只用于验证配置和本地代理入口。若要接入真实服务,需要把它替换为服务方提供的协议出站,并逐项核对服务器地址、端口、UUID 或密码、TLS、传输层和认证参数。
{
"type": "trojan",
"tag": "proxy-out",
"server": "替换为服务方服务器地址",
"server_port": 1080,
"password": "替换为服务方密码",
"tls": {
"enabled": true,
"server_name": "替换为服务方要求的域名"
}
}上面的出站骨架只是字段位置示例,不能凭空运行;服务器地址、端口、密码、TLS 和传输参数必须与服务端配置一致。不要把示例中的 1080 当作通用服务端口。
按平台导入:先系统代理,后 TUN
官方图形客户端页面目前将 Android、Apple 平台、Windows 和 Linux 分开列出;Windows 与 Linux 使用 sing-box for Desktop,Android 使用 sing-box for Android,iOS、macOS 和 Apple tvOS 使用 sing-box for Apple platforms。平台和客户端入口应以官方图形客户端列表及sing-box for Desktop 官方说明为准。
| 平台 | 建议顺序 | 权限与差异 |
|---|---|---|
| Windows | 添加本地或远程配置,先开启系统代理;不遵循系统代理的程序再考虑 TUN | TUN 可能需要服务模式或管理员授权;只允许 sing-box 或一个代理客户端占用目标端口 |
| macOS | 先导入配置并验证系统代理,再启用 TUN | 首次打开下载的应用,可到“系统设置→隐私与安全性”查看放行选项;命令行解除隔离前应确认文件来源,示例为 xattr -dr com.apple.quarantine /Applications/应用名.app |
| Linux | 先用命令行 check 和日志确认,再选择系统代理或 TUN | TUN、路由和网卡操作可能需要权限;systemd 服务应使用专用用户,并确认该用户能读取配置文件和相关密钥 |
| Android | 导入本地或远程配置,先使用系统 VPN 模式 | Android 同一时间只允许一个 VPN 服务生效;无网络时先断开其他 VPN 类应用 |
| iOS | 使用 Apple 平台客户端的配置导入和系统 VPN 授权 | 不能照搬 Windows 或 Linux 的端口、网卡和服务命令,系统权限由客户端申请 |
系统代理更容易验证,适合浏览器和办公软件等遵循系统代理的应用;TUN 能覆盖更多不遵循系统代理的流量,但会增加权限、路由和 DNS 变量。官方 TUN 入站文档说明,TUN 入站支持 Linux、Windows 和 macOS;移动端通常通过图形客户端提供系统 VPN 能力。排查时建议先确认系统代理有效,再开启 TUN。
四步排查顺序:check → 系统代理 → 日志 → TUN
结论框:先验证配置能否读取,再验证本地代理端口,然后看连接日志是否命中正确出站,最后才处理 TUN、DNS、IPv6 和局域网绕过。
- 第一步,校验配置。Windows 执行
sing-box.exe check -c config.json;macOS 在配置目录执行./sing-box check -c config.json;Linux 执行sing-box check -c config.json。需要格式化时,先备份原始文件,再执行对应的format -w -c config.json。命令用途以官方配置参考为准。 - 第二步,检查端口。Windows 执行
netstat -ano | findstr :2080;macOS 执行lsof -nP -iTCP:2080 -sTCP:LISTEN;Linux 执行sudo ss -lntup | grep :2080。如果出现address already in use,关闭占用进程或修改listen_port。若同时运行 Clash 类客户端,其监听端口也可能产生冲突。 - 第三步,使用系统代理验证。让浏览器或测试应用指向
127.0.0.1:2080,观察连接日志是否命中预期的出站标签;只看到客户端“运行中”并不能证明流量已经经过代理。 - 第四步,再启用 TUN。启用后检查虚拟网卡、默认路由、DNS 请求和局域网地址。若 TUN 后无网络,先关闭 TUN 回到系统代理,确认是权限、路由还是 DNS 变化导致。
| 报错或现象 | 常见原因 | 第一步操作 |
|---|---|---|
unknown field | 字段不属于当前内核或拼写、层级错误 | 对照官方当前配置文档,删除或迁移该字段后重新 check |
deprecated | 旧字段仍被识别,但已进入迁移阶段 | 查看官方 Migration 页面,按新字段替换,不要只忽略提示 |
address already in use | 本地入站端口已被占用 | 按平台执行端口检查命令,关闭冲突程序或修改监听端口 |
context deadline exceeded | 连接或 DNS 请求在限定时间内未完成 | 查看日志中的 DNS、出站和路由命中,再分别测试域名解析与服务器连接 |
| 启动成功但没有网络 | 系统代理未生效、出站参数错误、TUN 路由或权限异常 | 先关闭 TUN,确认系统代理和日志命中,再逐项恢复设置 |
版本迁移:先确认内核,再处理弃用字段
截至 2026-10-24,官方容器标签将 v1.14.3 标为 latest;GitHub Releases 页面同时列出 1.15.0-alpha.5 等预发布条目。稳定标签、预发布标签和客户端内置内核不能混为一谈,客户端能否使用某个字段,应以它实际携带的内核和对应文档为准。版本信息可查看官方版本标签页面与官方 Releases。
遇到 unknown field、deprecated 或同一文件在不同设备表现不一致时,按以下顺序处理:
- 在客户端关于页面、启动日志或命令行输出中确认实际内核版本,不要只看客户端名称。
- 在官方 Migration 页面搜索报错字段,确认它是已删除、已合并还是仅被标记弃用。
- 检查 TUN 配置是否仍使用旧字段。例如官方文档说明,
inet4_address、inet6_address已合并到address;旧的stack在 1.15.0 被标记弃用,官方迁移建议移除它以使用 sing-tun 自有 TCP/IP 栈。 - 每次只迁移一组字段,保存备份并重新执行
check,避免同时修改 DNS、路由和出站导致问题无法定位。
详细迁移规则见官方 Migration 文档;TUN 字段及其弃用说明见官方 TUN 入站文档。不要把其他内核的字段名直接复制到 sing-box 配置。
TUN、DNS、IPv6 与局域网:只改有证据的部分
当前官方 TUN 文档确实列出 dns_mode 和 dns_address,二者属于 TUN 入站字段;其中 dns_mode 可为 disabled、native 或 hijack。启用 hijack 时,DNS 流量的处理会结合 TUN 和路由行为;配置地址后,官方文档说明可通过 hijack-dns 路由动作处理发往这些地址的 DNS 流量。不要把这些字段写成顶层 DNS 配置,也不要照搬其他内核的字段结构。字段依据见官方 TUN 文档和官方路由动作文档。
- DNS 失败:如果 IP 连接正常、域名连接失败,先检查 DNS 服务器、DNS 规则和最终 DNS 标签,不要立刻删除整个 DNS 配置。
- IPv6 异常:如果只有部分网站打不开,查看日志是否优先选择 IPv6,再根据当前网络的实际连通性调整地址策略。
- 局域网异常:打印机、路由器管理地址或公司内网无法访问时,检查 TUN 的路由排除和目标地址是否属于局域网。
- TUN 环路:启用
auto_route时,检查路由自动检测、默认接口或出站绑定接口,避免 sing-box 把自身连接再次送回 TUN。
Clash YAML 或通用订阅转换后的安全检查
Clash YAML、通用订阅和 sing-box JSON 的结构不同,不能靠修改文件名直接导入。转换前先保留原始文件或原始订阅地址,转换后至少检查四项:规则集是否丢失、DNS 段是否被替换、出站 tag 与路由引用是否一致、订阅地址中的 token 是否被上传到不必要的第三方服务。
- 在转换工具中尽量使用本地处理或可信来源,避免把带 token 的订阅地址公开提交。
- 转换完成后打开生成的 JSON,确认
inbounds、outbounds、route结构完整。 - 确认
route.final或规则引用的出站 tag 在outbounds中确实存在。 - 检查 DNS 服务器、规则集和远程资源地址是否被替换为陌生地址。
- 运行
sing-box check -c config.json,然后用日志确认实际命中的出站,不要只看转换工具显示“成功”。
如果转换后的配置仍然出现字段错误,优先回到原始格式和服务方提供的适配方式,不要继续叠加第三方字段。
导入前自查清单
- 确认输入是本地 JSON、远程配置还是单个节点链接。
- 备份收到的原始资产;校验对象应是原始下载文件或原始配置内容,不要先格式化再保存为唯一副本。
- 确认
inbounds、outbounds、route中的 tag 和引用一致。 - 确认监听端口没有被其他客户端占用;示例端口可改为
2080,实际使用以客户端设置页为准。 - 先用系统代理验证基础连接,再处理 TUN、DNS 分流、IPv6 或局域网绕过。
- 远程配置更新后重新执行校验,并观察日志中的 DNS、出站和路由命中情况。
- 不同设备无法复用同一配置时,检查实际内核版本、平台权限、文件路径和字段支持。
常见问题
sing-box配置文件应该是什么格式?
官方配置使用 JSON,常见顶层结构包括 log、dns、inbounds、outbounds、route 和 experimental。先保存原始文件,再执行 sing-box check -c config.json。
Clash 配置能直接导入 sing-box 吗?
不能只修改扩展名直接导入。Clash YAML 与 sing-box JSON 的字段和结构不同,转换后要检查规则集、DNS、出站 tag 引用,并重新执行 check。
远程订阅和 sing-box配置文件有什么区别?
远程订阅是客户端需要下载的地址,配置文件是实际 JSON 内容,节点链接通常只描述单个出站。三者不能混用同一个导入入口。
sing-box配置导入后为什么没有网络?
先检查配置校验和监听端口,再关闭 TUN 使用系统代理,观察日志是否命中正确出站。如果域名失败而 IP 正常,再检查 DNS;如果只有局域网失败,检查路由排除。
TUN 模式一定比系统代理好吗?
不一定。系统代理更容易验证,TUN 能覆盖更多不遵循系统代理的流量,但需要额外处理权限、路由和 DNS。排查时建议先验证系统代理,再启用 TUN。
为什么同一个 sing-box配置在不同设备表现不同?
检查客户端实际内核版本、平台权限、TUN 支持、文件路径和字段迁移状态。客户端名称相同,也可能携带不同内核或提供不同平台功能。