范围:先验证一个节点,不接管整机
本文面向 Linux/macOS 终端,要求已按官方入口安装 sing-box,并可运行 Python 3 与 curl。先运行 sing-box version 和 sing-box --help 记录版本与参数;不要直接以管理员权限运行从网上取得的未知配置。
完整订阅不应未经检查就启动
先登录 Roxi 账户复制自己的第三方订阅链接。下文路径只替换原链接中的 /sub/ 部分一次,保留域名、个人标识及全部查询参数;不要把“个人标识”当真值,也不要把官网首页或登录页当订阅。已有对应格式的专用链接时直接使用。
将 /sub/singbox/个人标识 的 JSON 保存为 downloaded.json。项目完整配置可能含 TUN、DNS、规则集和旧版核心字段;JSON 能被解析不代表当前核心接受全部字段。下面只从本地文件选一个普通节点,生成独立、仅监听回环地址的测试配置。
选择节点并生成本地测试文件
在 downloaded.json 的 outbounds 中找到要测试的普通节点 tag,将脚本中的占位文字替换为完全相同的 tag。不要选 selector、urltest、direct 或 dns 一类逻辑出站;保留节点的认证和传输字段,不打印或截图这些字段。
umask 077
python3 - <<'PYCODE'
import json
from pathlib import Path
source = json.loads(Path("downloaded.json").read_text(encoding="utf-8"))
node_tag = "替换为要测试的节点tag"
allowed = {"shadowsocks", "vmess", "vless", "trojan", "hysteria2", "tuic"}
matches = [x for x in source.get("outbounds", []) if x.get("tag") == node_tag]
if len(matches) != 1:
raise SystemExit("节点 tag 不存在或不唯一")
node = matches[0]
if node.get("type") not in allowed or not node.get("server") or node.get("detour"):
raise SystemExit("请选择无 detour 依赖的普通节点;本示例不处理代理链")
config = {
"log": {"level": "info"},
"inbounds": [{"type": "mixed", "tag": "local-test",
"listen": "127.0.0.1", "listen_port": 17891,
"set_system_proxy": False}],
"outbounds": [node],
"route": {"final": node_tag}
}
with Path("local-test.json").open("x", encoding="utf-8") as output:
json.dump(config, output, ensure_ascii=False, indent=2)
print("已生成本地测试配置;下一步仍需核心 check")
PYCODEcheck 通过才允许前台运行
sing-box check -c "$PWD/local-test.json" && \
sing-box run -c "$PWD/local-test.json"若出现不认识的字段,记录核心版本与字段路径,对照迁移说明处理;不要删掉 TLS 校验或随意改协议。若错误涉及域名解析器、传输或其他依赖,说明该节点还不适用于这个最小示例,先改用无这些依赖的兼容节点,或按官方文档补齐明确需要的配置。
请求与预期结果
curl --noproxy "" --proxy http://127.0.0.1:17891 \
--connect-timeout 10 --max-time 30 --output /dev/null \
--write-out "HTTP %{http_code}\n" https://example.com/| 结果 | 能说明什么 | 下一步 |
|---|---|---|
| check 通过 | 核心接受这个配置结构 | 仍需启动并发起请求 |
| 本地端口拒绝连接 | 核心未监听或端口不一致 | 查看前台错误和端口占用 |
| 目标返回 HTTP 响应 | 请求完成到目标的某个阶段 | 判读状态/内容,结合日志确认节点出口 |
| 超时或握手错误 | 此轮节点链路未完成 | 固定网络和目标,换兼容节点作对照 |
停止、更新和迁移边界
测试后在核心终端按 Ctrl+C;本例关闭自动系统代理且不含 TUN。更新时重新下载到新文件并生成新的测试副本,不会自动跟随原订阅刷新。只有单节点对照成功,再逐项恢复完整配置中的 DNS 和规则,最后单独验证 TUN;不要把本例通过写成完整订阅或全机接管已通过。
只分享脱敏后的失败阶段、字段名和日志摘要。订阅 URL、二维码、节点认证信息和导出的配置都可能包含凭据,不要发送到公开群或公共转换网站。本文依据官方资料与项目接口整理,未进行真机连接实测。