原以为流量和日志要写 WebSocket 转发,实测不用:内核在没有 WebSocket 升级时把 traffic、memory、logs 退化成分块的 HTTP 流,一行一个 JSON(server.go:380-383)。 现有的透传本来就能流式传,唯一的问题是那个 15 秒超时会每隔一会儿掐断一次, 给这三个路径去掉超时即可。 写操作照旧是白名单,逐条列出:断开连接(DELETE /connections 和 /connections/{id})、 刷新订阅(PUT /providers/proxies/{名字})。两者都只改内核运行状态、不碰配置文件, 所以不走落盘那条保护链路。方法和路径都要匹配才放行,测试里有反例。
之前的面板只做了「这个入站指向哪个出站」,那是改配置文件。但 metacubexd 里点一条线路 改的根本不是入站,是策略组的当前选中——调 PUT /proxies/{组},不写文件、立刻生效。 mixed-port 走规则表,末尾 MATCH,PROXY 把流量交给 PROXY 组,所以换那个组的选中就等于 换了这个端口的出口。这是每天都要点的动作,之前整个漏了。 面板顶部现在显示完整链条(PROXY → AUTO → 某条线路),并让人在最后一个策略组上换选中。 只显示第一层等于没回答「这个端口现在走哪条线」。 透传的白名单里为此开了唯一一个写操作,单独一条路由而不是放开整个转发。
顺序是:检查基准是否过时 → 自己校验 → 临时文件上跑 mihomo -t → 备份 → 写入 → 重载, 最后两步任一失败就从备份还原并让内核载回原样。 自己校验那一步不能省:实测 v1.19.29,入站的 proxy 指向不存在的出站时 mihomo -t 会通过、 重载会成功,直到有流量走到那个入站才在日志里报错。这类错误只有 Patchbay 查得出来。 路径在读环境变量时就转成绝对路径,因为内核的 PUT /configs 拒绝相对路径。