DESIGN PROPOSAL · v2.0

OpsMesh

去中心化网络的属地运维监控系统 —— 每个节点自组网、自采集、可被接入;
任意节点皆可作为运维入口。没有中心,任何一片仍连通的子网都是完整可运维的。

OpsMesh — a decentralized ops & monitoring mesh for fragmented networks.

01 / PROBLEM

为什么需要 OpsMesh

目标环境是一类网络条件受限、拓扑分散、无中心化运维通道的部署现场。传统"中心服务器 + Agent 上报"的监控架构在这里有三个致命缺陷:

PAIN-01

Agent 穿不进去

属地之间没有直连路由,内网机器只能经跳板机逐级深入;集中式 Agent 的上报通道根本无法建立。

PAIN-02

中心即单点

中心故障则全网失明;网络一旦分裂,远端属地彻底失管——而那恰恰是最需要运维的时刻。

PAIN-03

现场无人运维

任何"依赖专人或中心在线"的方案都不可靠。部署、升级、故障恢复必须由系统自己完成。

OpsMesh 的回答:让每个节点自己具备组网、采集与被接入的能力(opsmesh-agent),让任意节点都能成为运维入口(opsmesh-panel),两者通过组网内广播解耦——没有中心,任何一片仍连通的子网都能被独立观测与管控。
02 / ARCHITECTURE

双角色架构:AGENT 与 CONTROL PANEL

角色由能力定义,而非由部署指定。AGENT 是组网的根;CONTROL PANEL 是无状态的对等汇聚器——一个组网内可以同时存在多个,彼此平等、互不感知、视图独立。

every node · required

◈ opsmesh-agent / 每节点必跑

常驻守护进程,单二进制,常驻内存 < 30MB。

  • 创建 TUN 虚拟网卡,参与去中心化组网(打洞 / 中继 / 发现)
  • 向组网广播自身元信息与链路状态(gossip)
  • 本地监控采集:资源指标 / 服务探测 / Web 门户截图巡检
  • 内嵌 SSH 服务,仅绑定虚拟网卡,接受授权后的接入
opsmesh-agentopsmeshd
any node · optional · multiple

◉ opsmesh-panel / 可选 · 可多个

无状态对等汇聚器,只消费广播流,不做全局裁决。

  • 汇聚子网内广播的 AGENT 信息(去重 / 时序合并 / 失联判定)
  • 依据 AGENT 链路状态重建组网拓扑(本地视角)
  • 监控展示:实时面板 / 历史曲线 / 阈值告警
  • SSH 控制入口:Web 终端直达任意已授权 AGENT
opsmesh-panel

◇广播解耦一切

AGENT 与 PANEL 之间没有注册、没有点对点长连接依赖。AGENT 只管广播,PANEL 只管订阅——二者可以互不在线。

◇每个分区自洽

所有状态以"本地收到过的广播"为准,数据单写者可合并,不依赖全局一致视图。

◇链路即拓扑

组网拓扑不靠人工录入,由各 AGENT 实测的链路状态(直连/中继/质量)在 PANEL 端聚合重建。

03 / LIVE DEMO

组网拓扑 · 分区容错演示

每个圆点是一个运行 opsmesh-agent 的节点,连线是实测链路(实线 = P2P 直连,虚线 = 中继)。
点击按钮模拟网络分裂与重连合并——观察两个 CONTROL PANEL 如何各自控制所在子网。

opsmesh-panel console — $ watch topology
CONTROL PANEL 节点 AGENT 节点 失联节点(本地视角) P2P 直连 中继链路 state: FULL_MESH
04 / MECHANISM

四项核心机制

从数据包到拓扑图,OpsMesh 的每个环节都可以独立说清楚。

▣数据平面:TUN 虚拟网卡

AGENT 创建 TUN 设备绑定虚拟 IP,业务对隧道零感知。一个数据包的旅程:内核路由 → TUN 读出 → 查虚拟路由表 → 封装加密 → UDP 直发对端 → 对端解密写入 TUN。转发路径仅一次加解密,跨公网全程密文。

⇄NAT 穿透:UDP 打洞

NAT 类型探测先行(cone / symmetric 分类),双方秒级周期向预测地址互发探测包"同时开放";多地址穷举覆盖同网段捷径;周期发包同时保活映射。穿透结果映射为 natType / tunnelProto 可观测字段。

≋元信息广播协议

AGENT 与 PANEL 之间唯一的契约。四类消息:HELLO(身份/元信息)、METRICS(指标/截图巡检)、LINK_STATE(链路状态)、EVENT(离散事件)。周期全量 + 事件增量,gossip 传播,(origin, seq) 去重——PANEL 可与 AGENT 互不在线。

⤫分区容错与合并

组网分裂时广播只在连通分量内传播,分量内 PANEL 独立展示、告警、SSH 控制各自子网。重连后 gossip 反熵补齐错过消息,指标按时间戳合并无缺口——单写者模型,合并没有冲突。

05 / SECURITY

安全设计:默认拒绝 + 授权链

安全基线是一条铁律:默认拒绝(Default Deny)。虚拟网卡上的入站业务流量,只有被节点明确"共享"的服务才可达;可达性必须经过显式授权链——短时效、可审计、可撤销。

⛔TUN 入站隔离(未开启共享 · 默认态)

启动配置 ssh_shared: false 时,节点是组网内"只说不听"的哑终端:

  • 出站广播 / 隧道流量全部放行;入站业务流量(TCP/UDP/ICMP)静默丢弃
  • 不回 RST——不暴露端口存在性
  • 三层纵深:AGENT 用户态过滤 → 宿主 nftables 兜底 → sshd 根本不创建监听
  • 同网攻击者也无法触达其任何 TCP 服务

🔓SSH 共享:双重验证授权链

开启共享 ≠ 开端口就能连。可达性始终依附授权链,无任何旁路:

  • PANEL 二次验证:会话有效 ≠ 终端授权,执行 SSH 强制重新确认操作者身份
  • 短时效访问票据:Ed25519 签名,≤5 分钟有效,一次性 nonce 防重放
  • AGENT 独立裁决:验签 + 授权名单 + 失败限速,保留拒绝权
  • PANEL 离线 → 无新票据 → 节点自动回到"仅广播"隔离态

登录 PANEL

用户完成会话认证

USER → PANEL

发起终端请求

点击"打开节点终端"

USER → PANEL

二次验证

重新确认操作者身份(密码/OTP),防会话劫持直达终端

USER → PANEL

签发授权请求

PANEL 身份签名 + 用户 ID,经 gossip 控制面传递

PANEL → AGENT

签发访问票据

验签名 / 授权名单 / 一次性 nonce,≤5 分钟时效

AGENT → PANEL

建立终端会话

票据作一次性认证,绑定源虚拟 IP;全步骤审计广播

USER → PANEL → AGENT
LAYER安全机制
节点身份密钥对派生节点 ID,握手互验身份公钥;新节点入网需信任确认,防伪造节点
传输加密组网隧道、gossip 广播、SSH 全链路加密;会话密钥周期轮换;中继节点仅见密文
广播完整性每条消息 origin 私钥签名,转发节点无法篡改他节点数据;序列号单调防重放
暴露面Web 面板与 sshd 仅绑定虚拟网卡,物理网络不暴露任何端口
审计SSH 会话与授权链每一步(含拒绝)作为 EVENT 广播,各 PANEL 留存审计副本,单点篡改无效
06 / ROADMAP

演进路线

从拓扑到闭环,五个里程碑。

MILESTONE 1

组网与广播

AGENT 组网子系统 + HELLO / LINK_STATE gossip;PANEL 拓扑页重建

MILESTONE 2

监控闭环

METRICS 指标采集与展示、阈值告警、失联判定

MILESTONE 3

控制闭环

TUN 入站隔离(默认拒绝)、内嵌 sshd、二次验证 + 访问票据授权链

MILESTONE 4

分区与合并

反熵补齐、AGENT 本地缓存回放、分裂/合并端到端演练

MILESTONE 5

增强采集

Web 门户截图巡检、自定义脚本探针、告警外呼(Webhook / IM)