先确认自己要的是 GUI 配置还是核心配置

官方站内指南标题为 v1.9.0,描述的是 GUI 管理订阅、配置,再生成 sing-box 运行文件的流程。它与 SFA 的 Remote Profile 不同。菜单和支持字段要与实际安装版核对;不能只因都用 sing-box 就照搬另一客户端的导入按钮。

从个人配置中取得节点,保留原文件

先登录 Roxi 账户复制自己的第三方订阅链接。下文路径只替换原链接中的 /sub/ 部分一次,保留域名、个人标识及全部查询参数;不要把“个人标识”当真值,也不要把官网首页或登录页当订阅。已有对应格式的专用链接时直接使用。

Roxi 的 /sub/singbox/个人标识 返回完整 JSON,包含入站、出站和路由;官方 GUI 指南中的节点订阅示例则是出站对象数组。本文用本地文件做明确对照:将个人 JSON 保存为 downloaded.json,保留原件,在自己的电脑上提取支持的独立节点。

macOS / Linux:在单独目录中用 Python 3 执行;新文件仅供自己读取
umask 077
python3 - <<'PYCODE'
import json
from pathlib import Path
source = json.loads(Path("downloaded.json").read_text(encoding="utf-8"))
allowed = {"shadowsocks", "vmess", "vless", "trojan", "hysteria2", "tuic"}
nodes = [x for x in source.get("outbounds", [])
         if x.get("type") in allowed and x.get("server") and not x.get("detour")]
if not nodes:
    raise SystemExit("没有可独立导入的节点;请核对格式和出站依赖")
# x 模式避免覆盖已有文件;本命令只读取本地文件,不请求订阅网址。
with Path("gui-nodes.json").open("x", encoding="utf-8") as output:
    json.dump(nodes, output, ensure_ascii=False, indent=2)
print("导出节点数:", len(nodes))
PYCODE

输出数量为零必须停止并排查,不能把空文件当成功。Windows 用户可把 Python 部分保存为脚本后用已安装的 Python 3 运行,并将目录保存在本人账户下。若文件已存在,先备份或换输出名称,不盲目覆盖。

在 GUI 中建立订阅与配置

  1. 添加本地订阅,选择 gui-nodes.json 的实际路径并更新;确认列表里的节点与刚导出的数量和协议相符。路径字段随版本变化,以本地文件入口为准。
  2. 新建一份配置,用向导或编辑入口建立代理组,并把该本地订阅关联进去;预览生成的 JSON,核对最终代理组引用。
  3. 先配置一个只监听 127.0.0.1 的 Mixed 入站,选择未占用的高位端口;启动核心并开启系统代理。TUN 在完成这个对照后再单独测试。

更新和报错如何处理

情况处理
JSON 对象被当作节点数组确认导入的是 gui-nodes.json,而不是 downloaded.json
节点存在但组内无可选项检查配置关联和组引用,再重新生成
提示字段或版本不支持记录 GUI/核心版本和字段,按官方迁移说明核对;不要降低版本约束凑通过
远程订阅已变、本地列表没变本流程不会自动同步;重新下载到新文件、提取、核验后再替换本地订阅

确认流量与回退

  1. 固定一个节点,访问实际需要的网站,同时在日志或连接列表核对目标、命中规则和最终出口。VPN 图标、端口监听和延迟数字都不能单独证明目标访问成功。
  2. 再访问一个平时可直连的网站,记录是否受影响;停止接管后重试,确认正常网络恢复。一次只改一项,记录客户端与核心版本、网络和错误发生时间。

修改前保留旧的本地订阅和 GUI 配置。失败时关闭系统代理,恢复上一份完整配置;不要让旧核心读取新版本升级后的数据目录。

只分享脱敏后的失败阶段、字段名和日志摘要。订阅 URL、二维码、节点认证信息和导出的配置都可能包含凭据,不要发送到公开群或公共转换网站。本文依据官方资料与项目接口整理,未进行真机连接实测。