fobe 0.1.1
fobe 0.1.1 — sing-box 配置的所有权交还操作员,附一个 GeoIP 国旗修复。
升级方式不变:
docker compose pull && docker compose up -d(或改image:钉ghcr.io/fonlan/fobe:0.1.1)。数据库 schema 10 → 11,纯增量迁移,启动前自动快照。
sing-box:config.json 成为唯一真相(§9.3 实现修订 2026-09-17b)
上一版让 fobe「接管一次、之后整份重写」,代价落在操作员身上:他继续用 one-sing.sh 的 jq 加入站,下一次收敛(最多 60s)就把它抹掉。本版把这个代价去掉:
- 探针盘上的
/etc/one-sing/config.json是唯一真相:agent 每轮(60s + 启动 + 面板刷新命令)只读扫描,文件变了就上报原文;服务端解析后经Cryptor加密存档,不再按模板整份重写。 - 编辑 = 读-合并-写:
PUT /api/nodes/{id}/singbox/config带reported_hash,对不上回409 config_changed;只改被编辑的字段,未建模的选项(sniff、padding_scheme等)原样保留,缺省凭据继承文件里的值。 - 手工
jq加的入站立刻可见:订阅直接按最近上报的文件渲染;新增POST /api/nodes/{id}/singbox/refresh,不必等下一轮扫描。anytls 证书内容由 agent 按端口上报(文件里只写certificate_path,客户端要的是 PEM)。 - 面板:节点编辑页的入站表格可改端口 / tag / 凭据,可新增与删除;原「接管」退化成一次凭据留空的编辑(服务端写入面板自己的全局密码)。
sing-box:发现并接管 one-sing.sh 装好的实例(§9.3 实现修订 2026-09-17)
纯 one-sing.sh 的探针在面板上一直是「未安装」——State.Singbox 只在声明过期望版本后才上报;而一点安装就整份重写配置,脚本加的 anytls / VLESS / SS / Socks 入站当场消失。
- 识别:探针每轮只读扫描本机布局(二进制 / 配置 / 单元 / 进程),把
config.json原文随 state 帧上报,不受期望状态开关限制;面板显示运行版本、入站与端口,凭据不出库(面板只拿摘要,快照加密落库)。 - 接管
POST /api/nodes/{id}/singbox/adopt:脚本的 anytls 端口成为面板入站端口(用全局密码),其余入站作为extra_inbounds与模板一起下发;订阅为每台被接管节点展开多条出站,各用自己凭据,REALITY 公钥由私钥现场推导(crypto/ecdh);版本优先用探针正在跑的,缓存里没有则拒绝接管且不写任何东西。 - 白名单是硬约束:只有
allowedInboundKeys/allowedTLSKeys/allowedRealityKeys里的键能进config.json—— 闸门①(sing-box check)是 live 探针上唯一的防线,真机上踩过两次服务级事故。
修复
- 国旗真正跟随主 IP(§14 实现修订 2026-09-16b):国别判定原本只存在于「重新指认主 IP」那一个分支,于是 hello 路径从不解析国别(新探针一辈子一个灰点)、手动主 IP 只改地址不重算、「查不到就保留旧值」叠加成内网主 IP 留着上一个地址的旗子。现在 hello 与 state 共用一段逻辑,判定顺序 = 主 IP → 上报集里的公网地址(IPv4 优先);手动主 IP 与「清空国家」立刻重算。
- 编辑页不再把自动识别的国别静默钉成手动:此前保存任何其它字段都会提交
country_code并置country_manual=1,自动识别就此失效。只在操作者真的动过国家输入框时才提交;已被钉住的节点在编辑页点「清空国家」即可恢复自动。
升级注意
- 存量探针会自动跟随到 0.1.1(§5.5:两端注入同一个版本号,探针下载 → sha256 → 旁路自检 → 原地换入)。曾在
Detect()误判期装过的探针(caps 报systemd=false,fallback=true)必须人工重装一次才进入自动跟随,此后的版本都不用手动。 - 镜像仍只发 linux/amd64(agent 产物与 sing-box 缓存按设计就是这个平台)。compose 里
image: ...:latest若本地已有同名旧镜像不会自动拉,换版后先docker compose pull。
镜像
docker pull ghcr.io/fonlan/fobe:0.1.1
三个 tag 0.1.1 / v0.1.1 / latest 指向同一 manifest,仓库公开 ⇒ 匿名即可拉取。
自 v0.1.0 的完整变更
feat(singbox): 配置改为编辑器模型——探针的config.json是唯一真相,与one-sing.sh共存feat(singbox): 发现并接管one-sing.sh装的本机 sing-box(入站 / 端口 / 凭据原样保留)fix(geoip): 国旗真正跟随主 IP——hello 也判国别、内网主 IP 退回公网地址chore(release): web 包版本号对齐 0.1.1
发布前本地预检全绿:gofmt(空)、go vet ./...、go test ./...、cd web && npm run build,以及本地 linux/amd64 镜像构建与容器烟测。