跳转至

🧭 代理网络订阅规则与多控制面讨论记录(2026-10-05)

📌 结论摘要

本轮讨论到此结束,不实施任何多控制面、移动端专用订阅或多规则发布层方案。生产侧只执行一项复位:把 RR Master 的 2S-UI subClashExt 恢复为 2026-10-04 冻结快照,移除客户端内部 type: tailscale 代理对象和 100.64.0.0/10 客户端规则。复位后 Android 的 CMFA 继续使用原始 Clash 规则;因此在 Android 系统只允许一个有效 VpnService 的前提下,CMFA 与原生 Tailscale 不能同时运行,手机在使用 CMFA 时无法继续以自身身份进入 Tailnet。2026-10-05 04:17 CST,S20 已完成一次 CMFA 订阅刷新,客户端日志确认关闭旧 AgentMeshOS-tailscale 代理和 Tailscale/WireGuard/DERP 连接;从 RR 和 101 探测 100.64.0.11 均超时。除这一项 Tailnet 能力限制外,普通代理、策略组、订阅更新、节点顺序切换和原有分流规则不受影响。

📚 目录

🧩 背景与目标

讨论起源于一个具体矛盾:Android 上原生 Tailscale 与 CMFA 都需要占用系统 VPN,无法同时运行;此前为了在手机上同时保留 Tailnet 管理能力和 Clash 代理能力,尝试在全局 Clash 订阅中注入 Mihomo 内嵌 Tailscale outbound。该做法虽然能在单一 CMFA VPN 内同时承载代理和 Tailnet,但会把 Tailscale endpoint 分发给所有订阅客户端,造成 Windows、iOS 等平台可能生成额外 Tailscale 身份,配置边界不断扩大。

本轮目标是判断是否存在更简单的架构,例如让五台节点分别成为规则发布者,每个节点生成一套 Clash 订阅,Console 只展示当前对应关系。讨论结论明确为不采用。依据是 2S-UI 的订阅模板、节点同步模型和当前项目控制面边界,均已在本页记录。

📊 当前事实与复位证据

项目 复位前 复位后 依据
RR Master subClashExt 含 AgentMeshOS-tailscale 代理和 IP-CIDR,100.64.0.0/10 规则 无客户端代理对象;规则为 GEOIP,Private,DIRECT、MATCH,Proxy RR s-ui.db 只读回读
冻结快照长度 1161 字节 1161 字节 /var/backups/agentmeshos/proxy-panel-cutover/master-dog-20261004T035521Z/s-ui.db
subClashExt SHA-256 badbb56c369124a01bd4acba98aef43ea36a9b7d2759958a2e4d34340bd5778d 986260c99b73b62460b7147e253dc8e1e9f72e36c5eaa4028e2b934ec0238e41 复位前后只读哈希
客户端 Tailscale 配置 全局订阅存在 不存在 公网订阅回读 tailscale_hits=0
S20 CMFA 客户端配置 运行内嵌 AgentMeshOS-tailscale 已刷新并关闭旧代理;代理页仅保留 PROXY、AUTO 2026-10-05 04:17 CST 客户端日志和界面回读
策略组顺序 MM -> d02 -> dog -> dd -> rr 未改变 Proxy 与 Auto 组读回一致
生产变更范围 仅订阅字段 仅订阅字段 未修改节点、入站、端口、协议和客户端凭据

复位使用的最小写操作是 2S-UI 管理 API 的 object=settings、action=set,只写入 subClashExt 与配套的 subClashNoDefGrp。写入前,RR 上当前值已备份到 /root/.codex/backups/proxy-network-subclash-ext-restore/20261004T195911Z/,目录权限为 0700,文件权限为 0600。执行后从公网订阅读取到原始规则,format=clash 响应中不再出现 tailscale 或 100.64.0.0/10。

🔍 2S-UI 的真实边界

2S-UI 1.8.3 的 subClashExt 是实例级全局字段,同一控制面下的客户端共享这一份 Clash 扩展。用户管理可以选择节点、入站和外部链接,但不能按 Android、Windows、iOS 覆盖全局 YAML。源码依据是 sub/clashService.go 读取 subClashExt 后直接合并到订阅,以及 service/setting.go 将该值保存在设置表中。

因此,“每个节点一套规则”在概念上成立,但准确条件是:每台机器必须是独立控制面实例,并拥有自己的设置、数据库、订阅入口和客户端域。 如果仍然只有 RR 一个 Master,另外四台只是被纳管节点,那么五台机器不会自动产生五套全局规则。

🧱 多控制面方案的冲突

方案 表面收益 实际冲突 结论
五套独立面板,各自只管理自己 规则互不覆盖 每套订阅默认只覆盖本机,跨节点 fallback 和维护一致性下降 可作为独立实验,不进入当前架构
五套面板都管理五个节点 每个平台可拿一套订阅 五套 Master 会争抢同一节点的 @cluster 客户端集合,存在互相删除和覆盖风险 不采用
一套 Master 加规则发布层 单一写权威,多平台输出 需要新增轻量服务,且要处理鉴权、缓存、脱敏、回退和健康检查 本轮不实施
客户端内嵌 Tailscale endpoint Android 单 VPN 可同时访问 Tailnet 全局模板污染,所有平台可能新增身份 已复位并移除

2S-UI 的节点同步代码把 Master 推送的客户端统一标记为 @cluster,每次对账会把节点上“属于 @cluster 但不在当前 Master 期望列表内”的客户端删除。这意味着多套 Master 无隔离地管理同一节点不是受支持的 HA 或分权模型。若要实现多控制面,必须额外定义写权威、数据同步和冲突处理,不能仅靠节点数量推导出规则数量。

📱 Android 复位后的能力边界

能力 复位后状态 说明
Clash/Mihomo 代理与主备切换 保留 继续使用原始 Proxy、Auto 和五节点顺序
订阅更新与节点分流 保留 仍由 https://proxy.yohan.fun/sub/agentmeshos-main?format=clash 提供
CMFA 内部进入 Tailnet 移除 订阅中不再有 type: tailscale endpoint
原生 Tailscale 与 CMFA 同时运行 不支持 Android 同一用户同一时间只能有一个有效系统 VPN
Tailnet 其他节点反向访问 S20 不能依赖 CMFA 需要原生 Tailscale 或另行设计移动端订阅
中国网站直连规则 恢复到冻结快照 当前只有 GEOIP,Private,DIRECT 和 MATCH,Proxy

结论很明确:用户在使用 Clash 时不能同时使用 Android 原生 Tailscale,因此也不能以 S20 自己的 Tailnet 身份访问或接受 Tailnet 流量。这是当前唯一新增的能力损失;普通代理、订阅、规则和故障切换没有被回退影响。若未来必须同时使用两者,只能在 Root 透明代理、独立设备或专门的移动订阅服务三条方向中另行评估,本轮均不执行。

🔧 复位与验证

  1. 从 RR 冻结快照读取原始 subClashExt 和 subClashNoDefGrp。
  2. 将复位前值写入 RR root-only 备份目录,保留精确 YAML 和元数据。
  3. 通过 2S-UI 管理 API 只写这两个设置字段,不重启核心,不修改节点和入站。
  4. 只读回读 s-ui.db,确认哈希与冻结快照一致,proxies=0,规则为原始两条。
  5. 从公网请求 format=clash,确认 tailscale_hits=0,策略组仍为 Proxy 和 Auto。
  6. 在 S20 的 CMFA 中执行一次订阅更新;日志确认 Closing outdated proxy [AgentMeshOS-tailscale]、Client.Shutdown done 和 Device closed。
  7. 从 RR 与 101 分别执行 Tailnet 探测,100.64.0.11 均超时,确认旧客户端身份已不再提供连接。
  8. 删除 RR 上一次性复位脚本,只保留受控备份和本页脱敏记录。

🔁 回退方案

若需要恢复本轮复位前的状态,可使用 RR 上 /root/.codex/backups/proxy-network-subclash-ext-restore/20261004T195911Z/subClashExt.current.yaml。该文件仅用于订阅扩展字段恢复,不能用于恢复整个 2S-UI 数据库。由于本轮没有修改节点、入站、协议、端口或客户端配置,回退不需要重启 s-ui.service,也不应触碰其他面板和证书配置。

⚠️ 风险与未决项

事项 当前事实 影响 下一步
S20 客户端复位 已完成 服务端订阅和 CMFA 本地配置均已移除内嵌 Tailscale endpoint;代理页仅保留原始 PROXY、AUTO 无需继续处理
Headscale 中残留 CMFA 身份 节点 id=22、名称 agentmeshos-android、显示名 andriod-s20-cmfa、地址 100.64.0.11 的记录仍存在,但 RR 与 101 探测均无响应 仅保留一条不再连接的注册记录,不影响当前代理链路 若要求彻底清理,再单独删除该节点记录
多控制面讨论未实施 仅保留本评估文档 没有新增服务、域名、写权威或同步冲突 维持当前单 Master、单全局 Clash 模板

需要用户决策:是否清理此前由 CMFA 内嵌 Tailscale 在 Headscale 中产生的额外节点身份。除此之外,本轮无待实施项。