阶段十:MM 公网 IP 可替换架构整改方案(2026-09-25)
状态:已完成并归档
计划 ID:mm-public-ip-replaceable-architecture
📌 结论摘要
P10 已完成可执行计划、代码、文档、CI 和生产验收收口。公网入口不再以 MM 主机地址作为系统身份,edge.yohan.fun 成为稳定逻辑边界,业务域名通过 CNAME 跟随,Nginx、UFW、Headscale DERP、SSH、Gemini 出口和恢复脚本改为读取受控快照或明确双通道。依据是 P10 原始计划 rev.13、本归档、Git 提交、GitHub Actions、RR 生产容器和公网回读结果。影响是后续换边缘时只需准备新边缘并更新权威地址,不需要逐项追踪散落硬编码。
🧾 计划范围
P10 保留原计划身份和追加式修订记录,没有创建平行 P10 计划。工作包覆盖计划治理、DNS 冻结、端点快照、SSH 双通道、直连与 DERP、拓扑接口、控制台态势、切换回退演练和文档归档。
| 工作包 | 归档结论 | 主要证据 |
|---|---|---|
P10-0 计划与发布治理 |
完成 | 计划状态机、自托管 Runner、四个无状态服务自动发布、公网 Docs 和控制台认证回读 |
P10-1 DNS 与域名清单 |
完成 | 权威 NS、静态 edge A/AAAA、业务 CNAME、证书 SAN、TTL 和例外清单 |
P10-2 端点快照与渲染器 |
完成 | root-only 快照、原子 last-known-good、负向注入、幂等渲染和漂移检测 |
P10-3 SSH 双通道 |
完成 | RR、101、Home 到公网与 Tailnet 路径身份回读;DD、MM 无反向管理权限 |
P10-4 直连、DERP 与 101 路由 |
完成计划可执行范围 | FullCone 后直连复核;MM region 900 可用;DD region 901 需独立 DNS 与证书前置 |
P10-5 拓扑接口与金丝雀 |
完成 | 脱敏只读接口、网络控制路径冷连接告警、恢复事件和敏感字段负向回归 |
P10-6 Console 网络态势 |
完成 | 首页拓扑、Provider 页 ClawBot 状态、桌面与移动端浏览器契约 |
P10-7 边缘切换与回退 |
完成隔离演练 | 候选渲染、非法 Tailnet 地址拒绝、last-known-good 保持和回滚校验 |
P10-8 文档与残余风险 |
完成 | 架构、节点、计划、归档、索引、CI 和重新验证条件同步 |
🌐 已建立的可替换模型
稳定身份与运行时地址已经分层。edge.yohan.fun 是逻辑边缘身份,当前 IPv4、IPv6、网关和健康状态属于运行时数据;业务域名只保存 CNAME,不保存边缘地址。控制面程序需要 IP 规则时,读取 root-only 端点快照或明确 Tailnet 地址,任何解析失败都不得覆盖上一份健康快照。
| 对象 | 归档模型 | 防复发机制 |
|---|---|---|
| DNS | edge 静态 A/AAAA,业务名 CNAME | 换边缘只更新权威地址;硬编码检查阻止地址进入活跃源 |
| Nginx 与 UFW | 读取受控 allow 渲染结果 | 重复渲染一致,错误地址拒绝,漂移检查失败 |
| Headscale DERP | 只保存逻辑主机名,MM 为 region 900 | headscale configtest、真实连接和单区域降级状态 |
| SSH | 公网与 Tailnet 两个显式 Host 块 | 明确用户、端口、IdentityFile 和身份回读 |
| Gemini 出口 | RR 通过受控 SOCKS 出口到当前边缘 | 实测出口与快照一致,unit 不保存固定地址 |
| 恢复脚本 | 解析 edge,失败时使用 last-known-good | 重启路径、私网注入和旧值回滚测试 |
| Console | 后端只返回脱敏真实链路事实 | 前端不推断路径;业务站点红链与整网冷连接告警分离 |
🧪 生产与回归结论
最终验收覆盖本地 CI、严格文档构建、GitHub Actions、P10 自动发布器、RR 生产容器、公网 API、Docs 和控制台浏览器。根因修复不仅替换一次地址,还包含长期门禁:Repository Guardrails 校验计划状态、文档清单、生产部署变量门禁、端点渲染和 MM 地址硬编码。
负向回归至少覆盖旧地址或当前 MM 地址写入活跃源、私网或回环解析、非法 Tailnet 地址、过期快照覆盖 last-known-good、单个业务站点故障触发整网告警、敏感字段进入公开拓扑、未认证控制台计划和自动部署被硬编码禁用。
🔁 回退
代码和文档按 Git 提交回退;端点、Nginx、UFW、DERP、SSH、Gemini 和 DNS 分别保留备份或 last-known-good。回退必须先恢复可用管理通道,再恢复数据面,并重新验证 DNS、TLS、SSH、Tailscale、DERP、SOCKS 出口和业务入口。任何只恢复文件、未重验网络的行为都不能写成回退完成。
⚠️ 残余风险与重新验证
| 风险或前置 | 当前事实 | 触发后的动作 |
|---|---|---|
| 第二生产边缘 | 当前没有第二台具备同等证书、回源、SSH、防火墙和监控的完整边缘 | 条件满足后执行 P10-7 的真实切换、故障注入和回退,不重建计划 |
| DD region 901 | DD 可作为 relay,但缺少独立 DERP 域名和可信证书 | 提供独立入口后部署正式 region,禁止明文或自签绕过 |
| IPv6 | DNS 发布 AAAA,完整 443、DERP 和回源路径仍需独立复核 | 从具备 IPv6 的节点执行端到端验证 |
| Three Dogs | 业务站点不足 20 秒内无响应时,拓扑显示红链但不触发整网冷连接告警 | 独立排查后端、代理和资源瓶颈 |
| 外部漂移 | 边缘地址、Headscale、Tailscale、Nginx、证书、DNS 厂商、路由器固件或云厂商网络变化 | 重新执行端点、SSH、DERP、业务与回退验收 |
⚠️ 未决项 / 需要用户决策
| 事项 | 当前事实 | 下一步 |
|---|---|---|
| 下一阶段需求 | P11 仅建立状态占位,尚未选定主题 | 用户提交新需求后再冻结 P11 工作包 |
| 真实第二边缘切换 | 属于外部资源和维护窗口,不是已完成的现网变更 | 条件具备后按 P10-7 执行 |