跳转至

🎯 AgentMeshOS 代理网络生产架构(2S-UI + sing-box,2026-10-04)

📌 结论摘要

新的自用代理网络已经完成部署并通过真实流量验收:rr 作为 2S-UI Master,统一管理 MM、d02、dog、dd 和本机 rr 共五个真实出口;客户端按 MM -> d02 -> dog -> dd -> rr 顺序主备。P17-7 已为五台节点补齐 VLESS + REALITY 的 24443/tcp 入口,并逐台通过真实 Mihomo 连接、ICMP 和吞吐验证;旧 Hysteria2、SS2022、Trojan Inbound 暂时保留,等待离线客户端迁移后再删除。P17 又为四个远程节点增加了 panel-mm、panel-d02、panel-dog、panel-dd 独立面板域名、独立 ECC 证书和 Console 统一架构入口;管理员可以从 https://proxy.yohan.fun/ 管理全局,也可以从 Console #proxyNetwork 直达任一节点面板。Home 和 OfficeSummer 已刷新五节点订阅;360T7 已建立 MM 主 Balancing 和四节点后备 Balancing,但新 Xray 全局透明代理未通过 GitHub 控制面稳定性验收,Global node 已回滚旧路径。Summer、S20、Magic2 当前离线,Android/iOS 真机未完成,因此 P17 尚未关闭。

Mihomo/Stash 的 fallback 只保证健康接替,不保证自动回切。 当前健康备用在 MM 恢复后可能继续保持;2S-UI 的 format=json 订阅可以正常返回五个 outbound,但 sing-box urltest 不具备同等优先级语义,因此正式客户端口径继续以 Clash/Mihomo 兼容订阅为主;严格回切行为由 360T7 的 Xray 主 Balancing + 后备 Balancing 承担。新旧链路并存,原 ss-rust、360T7 旧 HAProxy 路径和原订阅回退材料仍保留。

📚 目录

🧩 架构与角色

AgentMeshOS 代理网络生产架构

权威源图:proxy-network-final.d2

层级 组件 已部署职责 依据
客户端 Windows / Android / iOS 消费同一份 Clash 订阅,执行本地健康检查和顺序主备 Clash 订阅中 Auto 为 fallback,成员顺序为五台 Reality;自动回切仅作尽力而为
控制面 rr / 2S-UI Master 管理节点、客户端、订阅和节点入站 /usr/local/s-ui/sui -v 返回 S-UI Panel 1.8.3
控制面 五节点 2S-UI Node API 节点心跳和 inbound 纳管 Master 幂等执行回读四个 replica 均为 unchanged
控制面入口 proxy.yohan.fun/ 直接进入 2S-UI 自身登录;订阅保持同一域名的 /sub/ MM 回源 RR Tailnet 100.64.0.1:2095 和 2096
节点面板入口 panel-mm/d02/dog/dd.yohan.fun/app/ 每个节点独立证书、独立登录和本机 inbound 管理 四域名 CNAME 到 edge.yohan.fun,由健康 Edge 承接后回源 RR 私有网关
Console 导航 console.yohan.fun/#proxyNetwork 展示统一架构,提供 Master 与四个节点面板直达链接 页面代码契约与桌面、390x844 浏览器测试通过,不嵌入 iframe
数据面 MM、d02、dog、dd、rr 提供五条 VLESS + REALITY 出口,正常时只使用首个健康节点 五条真实代理链路均返回目标节点公网 IP
旧链路 ss-rust / 360T7 保持原有服务、端口、密码和订阅 本轮未修改旧链路配置或进程

2S-UI 1.8.3 的可执行文件内嵌了 github.com/sagernet/sing-box v1.14.1,没有独立 sing-box systemd 服务。五台节点的 s-ui.service 均为 active、enabled,进程重启策略为 Restart=on-failure。这意味着核心版本随 2S-UI 二进制升级,不能再把“单独升级 sing-box”当作独立步骤。

📊 数据面与协议

顺序 节点 协议 公网入口 故障域
1 MM VLESS + REALITY mm-proxy.yohan.fun:24443/tcp 主节点,独立固定 A 记录
2 d02 VLESS + REALITY d02.yohan.fun:24443/tcp 备用 1
3 dog VLESS + REALITY dog-proxy.yohan.fun:24443/tcp 备用 2
4 dd VLESS + REALITY dd.yohan.fun:24443/tcp 备用 3
5 rr VLESS + REALITY rr-proxy.yohan.fun:24443/tcp 末位备用,同时承载控制面

当前迁移阶段五台节点只对外启用一条 VLESS + REALITY 主链路,旧 Hysteria2、SS2022、Trojan Inbound 仅作为尚未刷新客户端的临时回退材料,不进入 Auto 主备组。每台节点使用独立的 REALITY 私钥、Short ID、SNI 和伪装目标;客户端 UUID 由用户明确接受为五台共享。

mm-proxy.yohan.fun 是 MM 代理出口的稳定 CNAME,指向唯一节点身份 mm.yohan.fun,不参与 P15 的 edge.yohan.fun 自动切流。proxy.yohan.fun 同时作为 2S-UI 控制面和订阅入口;把两者分开后,Edge DNS 切换不会改变订阅中 MM 节点的物理身份。

🧩 订阅与控制面

订阅形式 地址 结果 适用性
裸订阅 https://proxy.yohan.fun/sub/agentmeshos-main HTTP 200,Base64 节点链接 通用客户端导入
Clash https://proxy.yohan.fun/sub/agentmeshos-main?format=clash HTTP 200,含 Auto: fallback Windows、Android、Stash
JSON https://proxy.yohan.fun/sub/agentmeshos-main?format=json HTTP 200,返回五个 outbound sing-box 可解析,但无严格优先级保证

Master 的 subClashExt 已写入以下策略组:

项目 当前值 验证
Proxy select,首项为 Auto 配置解析通过
Auto fallback 配置解析通过;严格自动回切不承诺
顺序 MM,d02,dog,dd,rr 与五条真实节点标签逐项一致
健康检查 http://www.gstatic.com/generate_204 现场组探测均返回延迟
周期 interval=180、lazy=false 客户端持续探测,不等待首次使用

2026-10-12 Master subClashExt 当前规则为 DOMAIN-SUFFIX,agentrouter.org,Proxy、DOMAIN-SUFFIX,vidhub2.top,DIRECT、GEOIP,LAN,DIRECT、GEOIP,Ads,REJECT、GEOIP,CN,DIRECT、MATCH,Proxy。自定义域名规则统一放在 GEOIP 之前,按第一条命中执行;强制代理使用 DOMAIN-SUFFIX,<域名>,Proxy,强制直连使用 DOMAIN-SUFFIX,<域名>,DIRECT。Ads-Block 必须在 China-Direct 前面,避免中国广告 IP 被直连放行。Private-Direct 已移除,局域网覆盖改由 LAN-Direct 承担。该规则只影响 Clash 客户端,不改变 360T7 PassWall;360T7 当前仍使用旧 Balance 路径,Xray 主备配置保留但未切换为全局入口。

控制面只监听各节点 Tailnet 地址的 2095。管理员入口固定为 https://proxy.yohan.fun/:MM 公网 443 将根路径规范化到 /app/,并直接回源 RR Tailnet 100.64.0.1:2095;2S-UI 使用自身账户完成唯一一层登录。订阅入口保持 https://proxy.yohan.fun/sub/,由同一域名的 MM vhost 回源 100.64.0.1:2096。旧 console.yohan.fun/app/ 只保留到新域名的兼容跳转,不再经过 A-Auth 或 RR 私有回源网关。以 rr 作为独立观测点,五台节点的公网 2095 均为 blocked;从 101 观察到的 d02 异常 SYN 已完成二次验证,确认不是面板公网暴露。Master 与 topology 在 rr 上的 SHA-256 分别为 a656122de35f10c6cb0c9fc255d8af98277d656fe1082984f09ffd0ba620372b 和 79e957f680de1ebba175f992d0e5ff48ef002eacfb39358a449efbcbdbaf481f,与仓库一致。

RR Master 的面板身份固定为 webDomain=proxy.yohan.fun、webURI=https://proxy.yohan.fun/app/;订阅身份保持 subDomain=proxy.yohan.fun、subURI=https://proxy.yohan.fun/sub/。四个远程节点的 webDomain/webURI 分别绑定自己的 panel-*.yohan.fun/app/,subDomain/subURI 保持为空,因为订阅只由 Master 生成。依据是 2S-UI 1.8.3 同时执行 Host 与 Origin 同源校验;面板与订阅共用独立域名,但与 Console A-Auth 认证完全解耦。

🧩 P17 面板入口与生产回读

P17 采用“健康 Edge 终止公网 TLS、RR 私有网关按 Host 转发、节点只监听 Tailnet”的三层路径。每台 Edge 通过 DNS-01 签发同时覆盖 proxy 和四个 panel-* 的 ECC 证书;proxy 回源 RR 2095/2096,面板经 100.64.0.1:39200 回源,RR 再按 Host 把请求转到对应的 100.64.0.x:2095。这样浏览器只访问公网 HTTPS,节点 2095/2096 仍不开放公网,2S-UI 看到的 Host 与浏览器地址也保持一致。

回读项 当前结果 依据
DNS proxy 与四个 panel-* 均为 CNAME edge.yohan.fun,TTL 600 AliDNS 权威配置;223.5.5.5 与 1.1.1.1 双解析点回读
证书 四张独立证书 SAN 均只有自己的面板域名,有效期至 2027-01-02 公网 openssl s_client 回读
HTTP 根路径 302 到 /app/,/app/ 返回 307 到各自 /app/login 从 101 公网请求四个域名
WebSocket 认证态 https://proxy.yohan.fun/app/ws 返回 HTTP/1.1 101 Switching Protocols 2S-UI 管理员会话经公网 HTTPS 完成真实 Upgrade
Master 拨号 四个节点 base_url 均为 http://panel-<node>.yohan.fun:2095,dirty=0 RR 只读查询 s-ui.db
节点健康 认证后 api/load 返回 MM、d02、dog、dd 全部 online,dog 延迟约 81 ms 2S-UI Master 实时 nodesStatus,不以 SQLite last_seen 单列代替健康判断
端口边界 MM、d02、dog、dd 的公网 2095 和 2096 均超时 从 101 发起 TCP/HTTP 探测
回退快照 dog、MM、d02、dd 节点和 RR Master 均有独立数据库快照 /var/backups/agentmeshos/proxy-panel-cutover/

RR 的 /etc/hosts 受控区块只登记四个面板域名到 Tailnet IPv4,不改变公网 DNS 或系统主机解析的其他条目。proxy.yohan.fun 的 Master 入口与 /sub/ 订阅保持原路径;proxy 和 panel-* 的公网入口通过 CNAME 跟随 edge.yohan.fun,不再绑定 MM 公网 IP。MM、d02、dd、dog 等 Edge 必须同时具备对应证书、Nginx vhost 和到 RR 2095/2096/39200 的回源能力,控制器才会把该节点判定为健康。旧 console.yohan.fun/app/ 继续只做 308 兼容跳转。

🧪 客户端选型

平台 推荐 依据与边界
Windows Clash Verge Rev v2.5.7 官方项目说明其内置 Mihomo 内核;Home 与 OfficeSummer 已刷新五节点 Reality profile
Android Clash Meta for Android v2.11.35 MetaCubeX 官方 Android GUI,直接复用 Mihomo/Clash 配置
iOS / iPadOS Stash v3.4.1 官方文档支持 fallback,发布说明确认支持 VLESS-TCP-REALITY、Hysteria2 和 SS2022

不存在一个同时覆盖 Windows、Android 和 iOS 且由同一团队维护的客户端,因此“统一客户端”在当前生态中只能落为统一订阅语义、统一策略组和统一节点排序。Windows 与 Android 推荐均使用 Mihomo 核心;iOS 无法运行 Mihomo 官方核心,Stash 是当前配置兼容度和协议覆盖最合适的方案。

P17 真机验收当前口径为:Home 与 OfficeSummer 已完成五节点 Reality 订阅刷新和五台节点回读;Home 当前 Auto 回读为 MM,OfficeSummer 通过本机代理返回 204。Windows 仍未按新五节点订阅完成逐台阻断、切到后备和严格回切验收,因此不能沿用旧协议时代的 12 步结果替代。Android Little 的 S20+ 已建立 Termux、Termius 和 TermRover 对九个在线节点的移动 SSH 管理通道;Honor Magic2 已通过 Home USB ADB 纳管为第二台 Android 移动管理与观测节点,Tailnet 100.64.0.13。两台 Android 与 Summer 当前离线,Clash Meta 的新五节点订阅刷新/切换未执行;iOS 当前没有在线设备。自启恢复与 Clash 真机验收不能用管理通道存在、资料哈希或 Linux Mihomo 测试替代。

官方依据:

🧪 真实流量与故障验证

验证使用官方 Mihomo v1.19.32 临时二进制;发布包 SHA-256 为 8451100836c9eda194331c2babfad490b2faf30cebc1a04b0e76fd8ac2d35d10。测试配置关闭 TUN、DNS 和 LAN 暴露,只监听 127.0.0.1:17890,不会接管 101 的系统路由。

节点 出口 IP 稳定性 代表吞吐 结论
MM mm-proxy.yohan.fun 固定 A 记录 10/10 0.5174 MiB/s 24443/tcp REALITY 可用
d02 107.172.186.4 10/10 0.5796 MiB/s 24443/tcp REALITY 可用
dog 173.249.205.221 10/10 0.5287 MiB/s 24443/tcp REALITY 可用
dd 192.227.170.39 10/10 0.4446 MiB/s 24443/tcp REALITY 可用
rr 96.44.133.235 10/10 0.4382 MiB/s 24443/tcp REALITY 可用

当前五节点 Reality 结果来自 P17-7 的 20 秒隔离回归,证据位于 temp/p17-7-<node>-test.json 和 temp/p17-8-<node>-test.json;每台均为 10/10 成功、ICMP 0% 丢包。历史 soak-20261003T1133.json 的 600 秒结果属于旧异构协议阶段,不能替代新 Reality 的长期观察。吞吐数据来自 101 当前线路的 1 MiB 抽样,只用于确认协议和链路可工作,不代表中国移动端、家庭宽带或 360T7 的最终质量。

故障阶段 初始节点 阻断后节点 恢复后节点 实测结果
逐台阻断 MM d02 仍为 d02 第一次切换成功
逐台阻断 d02 dog 仍为 dog 第二次切换成功
逐台阻断 dog dd 仍为 dd 第三次切换成功
逐台阻断 dd rr 仍为 rr 末位兜底成功
单台恢复 rr rr dd 高优先节点恢复后自动回切
全部恢复 dd dd MM 最终回到主节点

单次健康检查失败就会改变当前选择,下一次成功检查会回到更高优先节点;该实现没有 rise/fall 连续失败阈值。短于 180 秒且没有跨过健康检查的抖动不会被组状态感知,跨过一次检查的中断则会立即切换。

已有连接不会迁移。 测试中在 MM 上建立慢速下载后阻断 MM,Auto 已切到 d02,但原连接仍在旧出站等待并最终超时,18 秒仅收到约 1.79 MiB。因此该架构的正确表述是“新连接有序主备”,不是会话无损迁移。

🔁 回退与恢复

五台节点已用 2S-UI 自带 backup 生成数据库快照,路径为 /root/.codex/backups/proxy-network-2s-ui/,权限均为 0600 root:root。这些快照只用于恢复节点面板、客户端和订阅元数据,不包含旧 ss-rust 数据。

对象 回退方式 当前限制
2S-UI 配置 恢复对应节点数据库快照 需要先停止 s-ui,恢复后再启动并回读服务
2S-UI 二进制 使用固定 release 1.8.3 重新安装 只有 d02 存在 sui.last-known-good;其余四台为首次安装
客户端 删除新订阅,继续使用旧 ss-rust 订阅 新旧链路并行,无强制切换
控制面 保留 rr 上 root-only topology、凭据和节点 token 丢失控制面不影响已导入客户端的现有策略组

⚠️ 风险与未决项

风险或未决项 当前事实 下一步
中国客户端侧验收 Home 与 OfficeSummer 已刷新五节点 Reality;Windows 新订阅的逐台故障切换尚未执行;Android/iOS 当前无在线可控入口 Windows 继续按新订阅做故障切换和稳定性观察;Android/iOS 上线后执行同口径验收
三端 P17 真机验收 新五节点订阅已发布,但 Summer、S20、Magic2 当前离线;iOS 无在线设备 客户端上线后完成订阅刷新、切换和回切;在闭环前 P17 不归档
iOS 实机验证 Stash 官方能力已确认,但尚未在真实 iPhone/iPad 导入五节点 Reality 订阅 首台 iOS 设备导入后确认 fallback 和 REALITY 的实际表现
现有连接中断 切换不会迁移旧连接 长连接业务需依赖客户端重连,不能承诺连接级无缝
抖动阈值 没有连续失败计数 若误切明显,评估更换策略组或增加客户端侧脚本,不在当前版本猜改
rr 同时承载控制面和末位出口 rr 故障会同时影响订阅更新和末位兜底 若控制面必须独立,再增一台小 VPS;当前接受该风险
协议安全评估 五台 REALITY 已实际连通;旧异构协议暂时保留但已退出订阅主组 P17-10 全部客户端迁移后再删除旧 Inbound,并继续按真实网络观测评估
360T7 已建立 MM 主组和 d02/dog/DD/RR 后备组;但新 Xray 全局透明代理在 GitHub 控制面出现连接重置,Global node 已回滚到旧 f9Re2U27 先修复 Xray 全局路径稳定性,再重新切换;不清理旧路径

⚠️ 需要用户决策

决策项 推荐 理由
正式客户端 三端使用不同实现、同一订阅语义 Windows 用 Clash Verge Rev,Android 用 Clash Meta for Android,iOS 用 Stash;三者均消费同一份 Clash 配置
主节点验收 从实际使用网络完成端到端测试后再固定 MM 101 测速不能代表中国移动网络和路由器环境
控制面独立性 先接受 rr 同机,后按故障影响再决定是否独立 当前五台资源可直接运行,独立控制面会增加维护和成本
旧链路下线 由你保留一个自定回退周期 新旧链路已隔离,不会互相覆盖
P17 客户端窗口 Windows 真机已通过,Android/iOS 仍待验收 Android 需启用 USB 调试并连接可管理主机,或提供已授权的无线 ADB;iOS 需提供在线真机;P17 保持进行中