ZeZe

sing-box 客户端配置与使用指南:导入失败、启动无网怎么排查

更新于 2026-10-25 · allzezecloud.xyz

简答:拿到订阅却导入失败、启动后没网或部分 App 不通,先按“确认格式—选择客户端—导入配置—检查 JSON—排查 TUN、DNS 和路由”处理。判定标准是配置能通过 check、节点标签存在、权限已授予且 DNS 与默认出口都能正常工作。

定义:sing-box 是使用 JSON 配置的网络连接工具,核心负责解析配置和处理流量,图形客户端负责配置管理、系统代理、TUN 或平台 VPN 权限。

30 秒速查:先看你手里的内容是什么

本文是第三方使用指南,不是官方页面。sing-box 使用 JSON 配置,官方图形客户端负责管理本地或远程配置;如果你把不匹配的订阅格式直接导入,最常见结果就是空白配置、解析失败或启动后没有有效出站。

手里的内容能否直接当作 sing-box 配置最快处理方式
完整 sing-box JSON可以先检查保存为 config.json,运行 sing-box check -c config.json
Clash YAML不能直接当作 sing-box JSON使用兼容转换方式或重新生成 sing-box 格式,转换后仍要检查字段
Base64 编码节点文本不是完整 JSON 配置先确认提供方是否有 sing-box 专用远程配置
单条节点链接通常不是完整配置确认客户端是否支持该链接类型,或手动补成 outbound
远程配置 URL取决于返回内容确认 URL 返回的是 sing-box JSON,而不是 HTML、YAML 或错误页

三个最常用的命令如下。format -w 会直接写回文件,执行前建议复制一份原配置;配置中的占位符必须替换后才能检查。

sing-box check -c config.json
sing-box format -w -c config.json
sing-box run -c config.json

官方配置总览说明 sing-box 使用 JSON,并列出 check、format 等命令;字段结构可参考官方 Configuration Introduction。

先选对客户端:核心、图形客户端和第三方客户端不是一回事

核心程序负责读取 JSON、建立入站和出站、执行 DNS 与路由;图形客户端负责配置导入、启动服务以及 Windows、Linux、Android 或 Apple 平台所需的系统代理和 VPN 能力。官方客户端列表只列出项目维护的图形客户端,其他声称使用 sing-box 内核的项目需要单独核验,不能仅凭名称判断归属。

平台官方页面列出的方向首次使用建议核验入口
Windowssing-box for Desktop先导入远程或本地配置,再决定是否启用 TUNDesktop 页面
Linuxsing-box for Desktop 或命令行核心先用 check 检查,再用 run 启动;桌面客户端与命令行不要同时接管同一配置Desktop 页面
Androidsing-box for Android安装后导入配置,启动 Android VPN 授权;应用分流问题再检查 TUNAndroid 页面
iOS、macOS、Apple tvOSsing-box for Apple platforms按系统提示允许 VPN 或网络扩展,再导入本地或远程配置Apple platforms 页面

官方客户端总览明确列出 Android、Apple 平台、Windows 和 Linux 的对应客户端;Desktop 页面也列出 Windows 和 Linux 的系统要求。下载入口、系统版本和文件名以官方页面及 Releases 页面实时显示为准。

按平台导入配置:路径以所用版本界面为准

Windows 和 Linux Desktop

  1. 打开 sing-box for Desktop,进入配置文件或 Profiles 管理区域。
  2. 选择新增本地配置或新增远程配置;远程配置填写完整 URL,本地配置选择 JSON 文件。
  3. 保存后在配置列表中选中该配置,再进入 Dashboard 或运行控制区域启动。
  4. 首次启用 TUN 时,按系统提示授予管理员或网络权限;如果只是验证节点,先用系统代理模式测试。

Desktop 官方页面确认其用途是管理并运行本地或远程配置,并提供 TUN 等平台能力。具体按钮名称可能随版本变化,因此以当前界面中的配置管理、Dashboard 和运行控制入口为准。

Linux 命令行

  1. 把配置保存为当前目录下的 config.json。
  2. 运行检查命令,先处理 JSON 语法、未知字段、标签不存在等错误。
  3. 需要格式化时备份文件,再运行 format;确认配置内容无误后再 run。
sing-box check -c config.json
sing-box format -w -c config.json
sing-box run -c config.json

Android

  1. 从官方 Android 页面列出的分发入口核对应用。
  2. 在应用的配置或 Profiles 页面新增本地配置,或新增 Remote Profile 并填写配置 URL。
  3. 保存后选中该配置,在 Dashboard 或运行控制区域启动。
  4. 系统弹出 VPN 授权时选择允许;如果只有部分应用不通,再检查应用排除列表、分流规则和 DNS。

iOS 和 macOS

  1. 从官方 Apple platforms 页面核对应用来源和系统要求。
  2. 进入配置或 Profiles 页面,新增本地配置或 Remote Profile,填写 URL 后保存。
  3. 在 Dashboard 或运行控制区域选中配置并启动,按系统提示允许 VPN 或网络扩展。
  4. 如果 macOS 更新后配置或设置没有继承,先备份现有数据,再查看官方迁移说明,不要直接删除旧目录。

可替换配置模板:代理、分组、TUN、DNS 和 rule-set 一起检查

下面是用于学习和改写的示例,不包含真实节点。把所有尖括号占位符替换为实际值后,才可以运行 sing-box check。示例使用 SOCKS 代理作为占位 outbound;如果你的节点是 VLESS、VMess、Trojan、WireGuard 或其他类型,只替换对应 outbound,不能只改标签名。

{
  "log": {
    "level": "info"
  },
  "dns": {
    "servers": [
      {
        "type": "local",
        "tag": "local"
      }
    ],
    "final": "local"
  },
  "http_clients": [
    {
      "tag": "rule-http",
      "detour": "direct",
      "domain_resolver": "local"
    }
  ],
  "inbounds": [
    {
      "type": "tun",
      "tag": "tun-in",
      "address": [
        "172.19.0.1/30"
      ],
      "auto_route": true,
      "strict_route": true
    },
    {
      "type": "mixed",
      "tag": "mixed-in",
      "listen": "127.0.0.1",
      "listen_port": 2080
    }
  ],
  "outbounds": [
    {
      "type": "socks",
      "tag": "proxy-a",
      "server": "<节点服务器域名或地址>",
      "server_port": <端口>,
      "version": 5,
      "username": "<用户名>",
      "password": "<密码>",
      "domain_resolver": "local"
    },
    {
      "type": "socks",
      "tag": "proxy-b",
      "server": "<第二节点服务器域名或地址>",
      "server_port": <端口>,
      "version": 5,
      "username": "<用户名>",
      "password": "<密码>",
      "domain_resolver": "local"
    },
    {
      "type": "selector",
      "tag": "proxy-select",
      "outbounds": [
        "auto",
        "proxy-a",
        "proxy-b",
        "direct"
      ],
      "default": "auto"
    },
    {
      "type": "urltest",
      "tag": "auto",
      "outbounds": [
        "proxy-a",
        "proxy-b"
      ],
      "url": "https://www.gstatic.com/generate_204",
      "interval": "3m",
      "tolerance": 50
    },
    {
      "type": "direct",
      "tag": "direct"
    }
  ],
  "route": {
    "rule_set": [
      {
        "type": "remote",
        "tag": "example-rules",
        "format": "source",
        "url": "https://<规则集地址>",
        "update_interval": "1d",
        "http_client": "rule-http"
      }
    ],
    "rules": [
      {
        "action": "sniff"
      },
      {
        "protocol": "dns",
        "action": "hijack-dns"
      },
      {
        "ip_is_private": true,
        "action": "route",
        "outbound": "direct"
      },
      {
        "rule_set": [
          "example-rules"
        ],
        "action": "route",
        "outbound": "proxy-select"
      },
      {
        "protocol": "stun",
        "action": "reject"
      }
    ],
    "default_domain_resolver": "local",
    "default_http_client": "rule-http",
    "auto_detect_interface": true,
    "final": "proxy-select"
  }
}

这个示例不能直接执行,因为 <节点服务器域名或地址>、<端口>、用户名、密码和规则集地址都是占位符。替换后,先检查 JSON,再确认节点类型和认证字段与实际订阅一致。

字段用途修改时注意
mixed同时提供 SOCKS 和 HTTP 入站示例监听地址只用于本机;端口以配置和系统占用情况为准
selector手动在分组出口间切换outbounds 中的标签必须真实存在
urltest按测试 URL 和间隔选择候选出口不能把 DIRECT 放进 urltest 候选;测试结果只代表该测试地址下的连接表现
rule_set引用远程规则集进行分流远程 URL、格式和标签必须匹配;更新间隔按使用场景调整
http_client指定下载远程规则集使用的 HTTP Client新配置优先使用该字段,不要继续新增已废弃的 download_detour
default_domain_resolver为需要解析域名的出站提供默认解析器节点服务器是域名时,保留它或在对应 outbound 中配置 domain_resolver
route.final未命中规则时的兜底出口它是 route 对象的字段,放在 JSON 中的位置不影响行为;真正要注意的是 rules 数组顺序
action: reject拒绝匹配到的连接不要再用 block 或 dns 特殊出站代替规则动作

官方文档说明了 TUN 下的 sniff、DNS 劫持、私有地址直连、默认域名解析器和自动识别网卡等配置思路,可参考Client、Rule Action、Route 和Tun 文档。

TUN、系统代理和 Mixed:按问题选择,不要同时开启多个接管工具

系统代理依赖应用主动遵循 HTTP 或 SOCKS 设置,部分非 HTTP 应用、UDP 和 ICMP 流量可能不会经过系统代理。TUN 通过虚拟网络接口接管更多流量,但通常需要系统权限,并可能与其他 VPN、WireGuard、企业安全软件或另一个 TUN 客户端争抢默认路由。Mixed 是本地代理入口,适合给支持 HTTP 或 SOCKS 的应用使用,本身不等于 TUN。

场景优先选择判断标准
只想验证节点和网页连接系统代理或 Mixed先减少接管范围,确认节点、认证和 DNS 基础功能
部分应用不遵循系统代理TUN确认系统 VPN 权限,并检查应用分流和排除列表
已经运行其他 VPN 或 WireGuard先停掉其他接管工具一次只保留一个主要 VPN/TUN 接管者,再逐个恢复
规则集经常变化远程 rule-set + http_client设置合理更新间隔,更新失败时保留本地初始文件或检查网络

远程配置和远程规则集的自动更新间隔不要设置得过短。更新失败时,先确认 URL 返回的是预期格式,再检查 DNS、默认出站、HTTP Client 和网络权限;不要把完整订阅 URL 提交给不可信的转换服务。

按现象排查:导入失败、启动无网、规则不生效和 DNS 异常

现象先查什么处理步骤
配置导入失败返回内容和格式确认不是 HTML、Clash YAML、Base64 或空响应;保存为本地 JSON 后运行 sing-box check -c config.json
check 报未知字段或标签不存在配置版本和引用关系检查字段所在版本文档,核对 route 引用的 outbound、DNS server、rule-set 和 HTTP Client 标签
启动后完全无网TUN 权限、final、出站和路由循环先关闭 TUN 改用系统代理;确认 route.final 指向存在的 outbound,并保留 auto_detect_interface 或按平台配置默认网卡
只有域名打不开DNS 劫持和域名解析器确认 sniff 和 hijack-dns 在前,DNS server 标签存在,节点域名有 domain_resolver 或默认解析器
规则集下载失败URL、HTTP Client 和更新缓存浏览器或命令行核对 URL 返回内容,再检查 http_client、default_http_client 和 detour;新配置不要新增 download_detour
部分 App 不走连接系统代理覆盖范围改用 TUN 测试,并检查 Android 或 Apple 的应用分流、排除列表和 VPN 权限
UDP、实时通信或音视频异常节点 UDP 能力和 STUN 规则示例中的 protocol: stun 加 action: reject 会拒绝 STUN,请按需删除或改写;不要在需要 WebRTC 或 NAT 穿透时直接照抄
DNS 泄漏疑虑系统 DNS、TUN 和 DNS 劫持先关闭客户端记录一次 DNS 检测结果,再启用 TUN 和 hijack-dns 重测;对比解析服务器是否变化,并检查系统 DNS 是否仍被其他 VPN 接管

DNS 泄漏检测只能说明检测时观察到的解析路径,不能替代对配置、系统 VPN 和应用行为的检查。可以继续参考站内的DNS 泄漏是什么?30 秒在线检测与按设备排查。

如果规则顺序需要调整,先保留 sniff 和 DNS 劫持,再处理私有地址、rule-set 和最终出口。官方路由规则说明规则按列表顺序匹配;route.final 只是没有其他规则匹配时使用的默认出口。

特殊出站的迁移、域名解析器设置以及 macOS 数据迁移,应以官方 Migration 文档为准;版本变化较快时,不要依据旧教程恢复已废弃字段。

完成配置后的自查清单

  1. 客户端来源能否在官方客户端列表或对应平台页面核对。
  2. 手里的订阅是完整 sing-box JSON,还是 Clash YAML、Base64、单节点链接或远程 URL。
  3. 占位符是否全部替换,配置是否通过 sing-box check。
  4. selector、urltest、proxy 出站和 direct 标签是否全部存在。
  5. urltest 候选中是否没有 DIRECT,且测试地址、间隔与实际用途匹配。
  6. rules 是否先执行 sniff 和 DNS 劫持,再执行私有地址、rule-set 和其他分流。
  7. 节点服务器是域名时,是否设置了 domain_resolver 或 route.default_domain_resolver。
  8. rule-set 是否通过 http_client 下载,是否仍误用了已废弃的 download_detour。
  9. TUN、Mixed、系统代理是否只开启了需要的模式,其他 VPN 或 WireGuard 是否已经停止。
  10. 启用 TUN 前后是否分别做过 DNS 检测,并记录系统 DNS 和客户端 DNS 的变化。
  11. 远程订阅是否只在可信客户端中使用,泄露后是否按提供方流程撤销或重新生成。

常见问题

sing-box 可以直接导入 Clash YAML 吗?

不能把 Clash YAML 直接当作 sing-box JSON 使用。两者字段结构不同,应使用兼容转换方式或重新生成 sing-box 配置,导入后再运行 sing-box check。

sing-box 导入配置后启动但无法联网怎么办?

先关闭 TUN,改用系统代理或 Mixed 测试;然后检查 route.final、outbound 标签、DNS server 标签、节点域名解析器和系统权限。若同时运行其他 VPN 或 WireGuard,先停掉其他接管工具。

sing-box 的 TUN、系统代理和 Mixed 有什么区别?

系统代理依赖应用主动遵循代理设置;TUN 通过虚拟网络接口接管更多流量,但需要系统权限;Mixed 提供 HTTP 和 SOCKS 本地入口,适合支持代理设置的应用,不等于 TUN。

selector 和 urltest 应该怎么选?

selector 适合手动选择出口,urltest 适合在候选节点中按测试地址和间隔自动选择。urltest 只放可测试的代理出站,不要把 DIRECT 放进候选列表。

rule-set 下载失败要检查什么?

先确认 URL 返回的是规则集内容,再检查 route.rule_set 的标签、format、更新间隔、http_client 和其 detour。新配置应使用 http_client,不要继续新增已废弃的 download_detour。

为什么配置里要有 sniff 和 hijack-dns?

sniff 用于协议识别,hijack-dns 把 DNS 请求交给 sing-box 的 DNS 模块。启用 TUN 或域名分流时,缺少这些规则可能导致域名识别和 DNS 处理不符合预期,规则顺序也需要保留。

配置检查命令怎么写?

在配置文件所在目录运行 sing-box check -c config.json;需要格式化时先备份,再运行 sing-box format -w -c config.json;检查通过不代表节点、权限、DNS 或远程规则集一定可用。

相关阅读

参考资料

  1. Graphical Clients - sing-box
  2. sing-box for Desktop - sing-box
  3. sing-box for Android - sing-box
  4. sing-box for Apple platforms - sing-box
  5. Configuration Introduction - sing-box
  6. Client - sing-box
  7. Mixed - sing-box
  8. Tun - sing-box
  9. Route - sing-box
  10. Rule Action - sing-box
  11. Rule-set - sing-box
  12. HTTP Client - sing-box