跳转至

P21 子计划:节点网络路径视图与双节点诊断

计划状态:已实施,代码、发布与生产回读均已完成

所属阶段:P21 并行子计划,不改变当前阶段编号

当前工作包:无(PV-0 至 PV-7 全部完成)

📌 结论摘要

结论:新增独立“路径视图”标签页。 主图用分层结构图,加入可选起点/终点的双节点诊断;同时区分公网 TCP 路径与 Tailnet 隧道内的 TCP。依据是实时分布图负责呈现节点关系,而诊断需要逐层解释来源、协议、路线和证据;影响是用户能看懂“RR 公网 TCP 不通,但经 Edge/Tailnet 访问 RR 内部服务仍可工作”,不会把某一条公网路径误判成整台机器全坏。用户已于 2026-11-01 确认执行,代码、本地验收、镜像发布、DERP 探测安装与生产回读均已完成。

🗂️ 目录

📌 范围与状态

项目 当前结论 影响 / 下一步
本轮动作 已完成代码、测试、镜像发布、DERP 探测安装、生产回读、按节点汇总与控制面韧性评估 PV-0 至 PV-7 全部完成
计划归属 P21 并行子计划 不改变 P21 主阶段编号;未来可独立升级为新阶段
现有网络结构 Edge、DERP、Peer Relay、Tailnet 和 RR 控制面保持不变 先实现可视化与诊断,再评估运行口径修正
用户确认门槛 用户已于 2026-11-01 确认执行 全部工作包已完成,生产回读通过

📊 现状证据

证据对象 当前已确认事实 对计划的影响
RR 公网 TCP 2026-11-01 家庭出口 101 对 RR 公网 TCP 443、47522、80、8888、32118、39120 全部失败;Globalping 深圳、广州对 443、47522 均无回复 路径视图必须把“公网 TCP 路径”单独标红
RR Tailnet 101 到 RR Tailnet 为 UDP 直连,约 177ms 不能把 RR 节点整体标为不可用;应显示隧道内管理路径
控制面入口 mesh.yohan.fun 是 edge.yohan.fun 的别名,当前落到活跃 Edge;Edge 经 Tailnet 回源 RR 不迁移 Headscale 本体,不新增 dog 控制面前置
MM 到 RR 服务 MM nginx 通过 RR Tailnet 地址访问私有回源网关,HTTP 返回 302 证明“隧道内 TCP/HTTP”与“公网 TCP”是两层不同结论
101/102 到 dog NAT 打洞变化可能造成路径随时间改变;最新复测两源都得到直连 双节点诊断必须带观测来源和时间,不能固化单次路径
MM、DD 等节点 101/102 对部分节点只能走 DERP 图形显示实测直连、Peer Relay 或 DERP 路线

🧱 分层模型

四层从下往上:公网 IP、传输协议、节点间路径、服务入口。 下层的故障会在上层表现为不同症状,所以诊断必须按层回答,而不是只给一个颜色。

层 内容 决定什么 当前端口与功能
公网 IP 每台 VPS 的 IPv4 整块 IP 被阻断时上层全部失效 不涉及端口
传输协议 TCP 与 UDP 被封的可能是公网方向的某协议路径,不应误判为本机协议栈停止 TCP 443 承载 Edge 网站与 DERP;UDP 443 承载 DERP 的 QUIC 通道;UDP 39478 承载 STUN 打洞探测;UDP 40000 承载已配置 Peer Relay 的节点;UDP 41641 是 Tailscale 常见直连端口,实际端口可协商
节点间路径 直连、Peer Relay、DERP 两台节点之间当前实际用什么方式传输 直连走 Tailscale UDP;Peer Relay 只在具备并发布中继能力的节点上展示;DERP 依赖合格区域和客户端可达的 TCP 443
服务入口 edge.yohan.fun 到当前 Edge 再到 Origin 用户访问网站走哪台机器 Edge 对外 TCP 443;Origin 回源 TCP 14443

🖼️ 结构图设计

主图用三段横带的分层结构图,不用流程图。 五台节点乘三条路径画成流程图会不可读;分布图只能回答“在哪”,回答不了“为什么不通”。

横带 内容 表达方式
上带 客户端与家庭出口 一台设备图标加出口标识
中带 公网 VPS 节点与内网节点,分组呈现 逐节点显示其实际承担的服务与协议能力;RR 显示控制面、管理隧道,Edge/DERP/Peer Relay 能力按登记和运行事实显示;未配置能力标“不承担/不适用”,不画成失败
下带 服务入口 edge.yohan.fun 到当前 Edge 再到 Origin 链路
线型 含义
实线 直连 UDP 通路
虚线 经 Peer Relay 中转
点线 经 DERP 中转

图右侧固定一个小的判断面板,只放两个自动开关的当前状态:Edge 切换、DERP 资格。判断过程不画进主图,避免主图承担流程职责。图上所有文案只用节点名称与人类可读状态,不出现任何内部编号。状态必须分开表达公网 TCP、Tailnet UDP 路径和节点服务角色,不能让一个协议状态涂红整台节点。

路径视图还要标注一类“已知不可用但可绕过”的事实:例如 RR 的公网 TCP 整段不可用,图上把 RR 的公网 TCP 标记为红色,同时用一条经 Tailnet 的连线表示“运维与管理流量走隧道、SSH 需要跳板”,避免看图的人误以为 RR 整台不可用。

🧭 RR 生产节点的公网与隧道分层

图中必须分开公网 TCP 和隧道内 TCP。 这里不是矛盾,而是目标地址和承载网络不同:公网直连 RR 的 TCP 整段失败;MM 反向代理访问 RR 的 Tailnet 地址,TCP 连接被封装在 Tailnet 的 UDP 数据面里,因此隧道内的 HTTP/TCP 仍然可以正常工作。

链路 实际路径 协议与功能 当前影响
公网直连 RR 中国方向 → RR 公网 IP TCP:443、真实 SSH 端口及其他公网 TCP 整段不可用;不能直接 SSH、不能直接访问 RR 公网服务
MM 访问 RR 控制面 客户端 → mesh.yohan.fun → 当前 Edge → MM Tailnet 反代 → RR Tailnet 网关 外层 UDP:Tailscale 直连;隧道内 TCP:反代与 Headscale/API 服务 当前可用,不经过 RR 公网 TCP
MM 访问 RR 容器服务 MM Tailnet 地址 → RR Tailnet 地址 → RR 私有回源网关 → 容器/服务 外层 UDP:Tailscale;内层 TCP/HTTP:服务端口 当前可用;不能因为 RR 公网 TCP 失败就判断容器 TCP 失败
RR 运维 SSH 101/102 或当前 Edge → Tailnet → RR 的 SSH 真实端口 外层 UDP:Tailnet;内层 TCP:SSH 当前应走跳板,不能从中国直连 RR 公网地址

实测依据:RR Headscale 监听 Tailnet 上的控制端口;MM 的 mesh.yohan.fun vhost 回源到 RR Tailnet 地址;101 到 RR Tailnet 的 tailscale ping 为直连,约 177ms;MM 通过 RR Tailnet 私有回源访问返回 HTTP 302。影响是路径视图必须同时显示“公网 TCP 红色”和“Tailnet 隧道绿色”,不能把 RR 整台机器显示成完全不可用。

SSH 运维规则: RR 从中国方向不能直接连接公网 SSH,必须使用 102 或当前 Edge 作为跳板,经 Tailnet 到 RR;所有写死 RR 公网地址的脚本和探测都必须标记为不可用路径。

🔍 双节点诊断设计

双节点诊断必须明确标注“实测”或“未直接测量”。 当前探针只在 101 和 102 上运行。两端分别能被 101/102 探测,不足以证明两端彼此间的 NAT 打洞或中继路径;不能用传递推理伪装成实际路径。

项目 设计
输入 起点节点、终点节点;当前可用观测源为 101 与 102
输出结论 直连、经 Peer Relay、经 DERP、不可达或“当前无法直接判定”;标注“实测”或“依据快照推导”
逐源明细 101、102 各自实际执行的起点、终点、路线、延迟和时间;不把第三方节点的两段结果拼成一条实测路径
原因链 分开列公网 IP、TCP、UDP、控制面和服务入口的证据,例如“公网 TCP 失败,但 Tailnet UDP 直连成功,故隧道内 TCP 可用”
证据 展示判定依据的时间戳与来源,不展示内部编号与集合名
交互 选择后先返回最近快照;若所选起点不在可执行探针列表,显示“未直接测量”,不猜路线

不新增公开查询接口。 诊断直接消费现有拓扑接口返回的节点网络快照:每个目标已经带有 101 与 102 各自的路线、状态、延迟和检查时间,足以区分“实测”与“未直接测量”。这样少一个公开端点和一套鉴权面,也不会让页面在刷新时出现两份口径不同的数据。

🚦 路径触发条件

直连只依赖 UDP,TCP 不参与数据面。 Tailscale 的点对点数据走 WireGuard over UDP(默认 UDP 41641,也可用 STUN 协商后的任意端口);TCP 443 只用于控制面 API、DERP 中继和网站入口。因此“TCP 被封”不等于这台机器不能做节点间直连。

路径 何时使用 前置条件 失效表现
直连 两端 NAT 打洞成功 双方 UDP 出站可用,NAT 映射稳定 tailscale ping 直接显示对端地址与延迟
Peer Relay 直连失败,且某台节点发布了 relay 服务 该节点开启 UDP 40000,客户端选中它作为中继 延迟高于直连,路径里出现中继节点
DERP 直连与 relay 都不可用 该区域在 DERP Map 中,且客户端到该区域 TCP 443 可达 延迟最高,路径显示经某台 DERP 节点

实测补充:当前四台 Edge 都已发布 relay 服务,但会话数为 0,说明“已发布”只是具备能力,并不代表正在承载流量。

🔐 443 硬门槛的保留与改进

结论:443 硬门槛保留,但要把判据做得更准,而不是去掉。 设定它的原因是一次真实事故:dog 的 TCP 与 UDP 从中国方向同时失效,而当时的 DERP 选择只看主控面到节点的延迟,结果中国方向全部流量被导向 dog,整个网络瘫痪。443 是“中国方向能不能连上这台机器”的最低成本代理指标,去掉它等于把这个故障模式重新打开。

可以改进的是判据质量,不是判据本身:

现状问题 影响 改进方向
只看 TCP 443,不看 UDP 不能代表任一观测源的 UDP 打洞结果 保留中国方向 TCP 443 为 DERP 硬门槛;逐源 UDP 结果单独展示,不替代该门槛
数据新鲜度错配 常规探测改成 2 小时一轮后,资格判据多数时间只能 hold 优先让每个 DERP 候选在门槛有效期内有独立、错峰的新鲜 TCP 443 结果;不放宽硬门槛或旧数据门槛
判据是全局而非逐源 某个来源可达、另一个不可达时无法体现 资格仍用中国方向整体结果,逐源差异只用于展示

另一个本轮发现的证据:RR 从 Globalping 三个城市看是 TCP 443 不可达(ICMP 25/25 成功、TCP 0/15 失败),说明 ICMP 可达不等于 TCP 可达,判据必须同时区分协议和来源。

新增探测的频率与探针数必须先做额度测算。初步选项是四个 DERP 候选错峰轮转:每 15 分钟检查一台、每轮最多 5 个 Globalping 探针,目标是每个候选 60 分钟内至少有一份新鲜 TCP 443 结果;按此估算约新增 20 tests/小时。这是计划估算,不是已经实施的调度;执行前必须与当前自动用量和 120 tests 人工储备一起核算,超出预算则先设计复用现有 Edge 检查的方案。

🧭 控制面位置评估

控制面已经有前置入口,RR 公网 443 被封不影响它。 实际链路是:客户端连接 mesh.yohan.fun,该域名是 edge.yohan.fun 的别名,落到当前活跃 Edge(现在是 MM);Edge 再把请求回源到 RR 的 Tailnet 地址,Headscale 只监听 Tailnet,不监听公网。客户端从不直连 RR 的公网 443。

方案 收益 风险 结论
保持现状:Edge 前置 + Headscale 在 RR 已实现,客户端无感 依赖单一活跃 Edge 保持
整体迁到 dog 中国方向可达性更好 全部客户端要重连、状态与密钥迁移、dog 同时承担 Edge 与中继 不采用
在 dog 另建前置入口 与现有 Edge 入口重复 多一套证书、认证和故障面 不采用
102 只读热备 可承接已有 Console/Auth/API 的只读备用投影 不是 Headscale 热备,也不能直接作为公网入口 保持既有范围;Headscale 热备另行设计

PV-6 结论:控制面继续留在 RR,不迁移

结论:控制面保持现状,不迁移。 继续由 Headscale 在 RR 承担写权威、Edge 做前置入口、102 做只读备用;迁到 dog 或 102 都不会消除当前已证实的断点,反而增加状态迁移、客户端重连和回退风险。

评估维度 保持现状(RR 写权威 + Edge 前置) 迁到 dog 迁到 102
中国方向可达性 用户只连 Edge 的 TCP 443,不依赖 RR 公网 TCP dog 当前可达,但会把控制面单点从 RR 换成 dog 102 没有公网入口,仍必须依赖 Edge 或反向代理
故障域 RR 整机故障时控制面写入中断,102 只读备用可降级 未消除单点,只是换了一台机器 与 RR 同属生产域,没有增加独立故障域
状态同步 没有同步成本 需要迁移 Headscale 数据库、密钥、ACL 和节点登记,并处理双写与回滚 需要新建 Headscale 数据复制与选主,工作量最大
客户端重连 不需要 全部客户端需要重新连接控制面或更新入口 同 dog,且 102 没有公网入口
回退 已有 Edge 回退与 102 只读备用 回退需要再次迁移状态 回退需要拆除复制与选主
结论 保持 不采用 不采用

只有出现下列情况才重新评估迁移: RR 无法恢复写能力、Tailnet 到 RR 的直连长期不可用,或 RR 整机需要长期下线。届时优先选择一台有稳定公网可达性、且能形成独立故障域的节点,并单独立项做状态迁移、双写校验和客户端重连演练;不在本计划内直接操作。

证据来源: P16 只读备用验收、当前路径视图的 RR 公网/隧道分层、RR 公网 TCP 多端口实测。本轮是只读评估,没有改 Headscale、Edge 切换或 DNS。

RR 的 TCP 是被整段阻断,不只是 443

RR 公网 TCP 整段不可用,不只是 443。 这是 2026-11-01 双来源复测的结论:同一天同一台机器,UDP 路径正常、TCP 路径全失败,所以不能把结论写成“只有 443 被封”。

来源 测试对象 结果
家庭出口 101 RR 公网 TCP 443、47522(SSH 真实端口)、80、8888、32118、39120 六个端口全部连接失败
Globalping 深圳、广州 RR 公网 TCP 443、47522 原始输出均为 No reply ... tcp_conn=1/2/3,连接失败
家庭出口 101 RR 的 Tailnet 地址,UDP 41641 直连成功,177ms

由此确定的使用约束:RR 的 SSH 不能从中国直接连,必须走跳板,跳板用 102 或当前 Edge,经 Tailnet 到 RR;任何写死 RR 公网地址的脚本、探测和运维动作都要按“不可达”处理。

不受影响的路径仍然成立:网站入口、控制面登录与注册、节点间直连、DERP、Peer Relay 全部走 Edge 或 Tailnet,不经过 RR 的公网 TCP。

仍然存在的单点不是 RR 的 443,而是“同一时刻只有一个活跃 Edge”:它故障时控制面入口会跟着切换,切换本身依赖 DNS 与 Edge 切换控制器正常工作。

RR 的公网 TCP 与隧道内 TCP

连接段 实际链路 协议层 结果与含义
中国用户到 RR 公网地址 用户 → RR 公网 IP 公网 TCP(测试的 443、真实 SSH 端口及其他常用端口) 当前已测端口均失败;运维不能把公网直连当可用路径
用户到控制面 用户 → mesh.yohan.fun → edge.yohan.fun 当前 Edge 用户到 Edge 为 TCP 443 不经过 RR 公网 IP
Edge 回源到 RR MM → RR Tailnet 地址上的私有回源网关 外层 Tailnet 常见为 UDP 41641 直连,也可能按实测路径经中继;隧道内 39200/TCP 承载 RR 私有回源网关 实测 Tailnet 直连约 1ms,私有网关 HTTP 返回 302、约 15ms
RR 私有网关到 Headscale RR 私有回源网关 → Headscale Tailnet 监听地址 39088/TCP,仅在 RR 内部/Tailnet 服务路径使用 不要求 RR 公网 TCP 可达
RR 运维 SSH 101/102 或当前 Edge → Tailnet → RR 的 SSH 真实端口 外层 Tailnet UDP;隧道内 47522/TCP 承载 SSH 可用于管理;从公网直接 SSH 失败时应使用 Tailnet 管理或跳板

RR 公网 TCP 故障不等于 RR 所有 TCP 服务都停了。 “整段不可达”指公网入站路径;MM 反向代理与 RR 服务之间的 TCP 连接被封装在 Tailnet UDP 数据面内,二者不矛盾。路径视图必须把两段分别画出,不能用一个“RR TCP 红灯”覆盖隧道内服务状态。

当前 Headscale 权威仍在 RR;102 现有“只读热备”具体覆盖 Console/Auth/API 投影,不是 Headscale 数据与控制面的热备。不建议因为 RR 公网 TCP 被封就迁移 Headscale 到 dog:客户端访问已有 Edge 前置,Edge 经 Tailnet 到 RR;迁移会增加状态/密钥迁移和节点重连风险,但没有解决已证实的业务断点。PV-6 只做只读容灾评估,不迁移、不切流。

本计划采用的运行口径是“RR 中国方向公网 TCP 整体不可达”,依据为两来源的多端口失败样本;这不是穷测全部端口的数学证明。新视图必须保留观测来源、时间和具体测试项目,避免把“公网入口不可达”错误解释成“主机 TCP 栈被关闭”。

2026-11-01 调度修正:每小时全量检查

结论:例行检查改为每小时五台全量。 同时把 10 分钟一次的活动 Edge 结果写回对应节点卡片。

问题 修正 影响
五台轮转一次约 10 小时,卡片最久 8–9 小时不更新 每小时一次全量扫描,五台同一时间更新 主机与公网入口时间对齐
活动 Edge 每 10 分钟探测,但结果只进顶部面板 将结果写回对应节点的入口时间和入口证据 活动 Edge 卡片保持新鲜,不伪造主机检查时间
页面只显示时间,不显示年龄 增加“X 分钟前”和数据延迟/过期标识 旧结果不会再看起来像实时
额度预测只按单目标计算 按五台全量重新计算 每小时约 100 tests,约 20% 小时额度

额度: 五台全量约 50 tests/小时,活动 Edge 约 30 tests/小时,DERP 约 20 tests/小时,合计约 100 tests/小时;保留 120 tests 人工储备,低于阈值时自动跳过例行全量。

数据边界: 按节点汇总和节点路径视图继续复用同一份快照,不新增探测。

🛠️ 工作包

工作包 内容 关键改动 退出条件
PV-0 只读基线冻结 逐项回读来源、目标、协议、数据时间和消费者 冻结服务/路径/资格数据契约与“实测、推导、未知”标签 RR 公网与隧道内链路、控制面入口、Edge/DERP/Relay 状态均能指向真实证据
PV-1 DERP 资格新鲜度 资格要求新鲜 TCP 443,当前采样节奏可能使状态长期 hold 443 保持硬门槛;先算配额,再选独立错峰检查或复用现有检查 所有区域按新鲜证据判定;过期时保留 last-known-good,不误删或误加
PV-2 Peer Relay 三态 只要“已发布”就判健康,实际会话为 0 改为已发布、有会话、未发布三态,页面分别显示 页面能区分“可用但没人用”和“真在用”
PV-3 路径视图与结构图 新增标签页与分层结构图 Console 新增标签、结构图渲染、图例 桌面与移动端可读,无内部编号,端口带协议
PV-4 双节点诊断 新增查询接口与界面 API 增加按节点对查询,前端加选择器与原因链 只有探针确实从所选起点执行到终点才标实测;其他组合标“未直接测量”,不得用两段观测推导出实际路线
PV-5 按节点汇总 三张卡缺少一台机器的完整画像 按节点一行显示主机、直连、入口三条结果 单节点可一屏看完三条路径
PV-6 控制面韧性评估 只读比较现有 Edge 前置、整体迁移 Headscale、102 热备的影响 评估可达性、故障域、状态同步、客户端重连、回退;不改控制面 输出有证据的方案比较;若需要变更,另立实施工作包并待用户确认
PV-7 文档与发布 计划、架构说明、验收记录 文档更新、提交、镜像发布、生产回读 精确提交、工作流全绿、生产回读通过

推荐顺序: PV-0 → PV-1 → PV-2 → PV-3 与 PV-4 → PV-5 → PV-6 → PV-7。PV-1/2 先修判据,PV-3/4 共用冻结后的路径数据,PV-5 基于最终字段整理单节点视图,PV-6 只形成控制面建议,不含迁移。

实施记录(2026-11-01)

工作包 状态 落地内容
PV-0 数据契约冻结 完成 路径视图直接复用现有拓扑快照与双源节点网络快照,不新增公开接口;每来源保留状态、路线、延迟、检查时间和数据年龄。
PV-1 DERP 资格新鲜度 完成(代码) 新增独立的 DERP 候选 TCP 443 探测:每 15 分钟检查一台,四台候选各约 60 分钟一轮,额度低于 120 tests 时自动跳过;资格脚本改读独立快照,单目标 75 分钟内有效。
PV-2 Peer Relay 三态 完成 节点、链路和检查结果都投影“已发布且有会话 / 已发布但无会话 / 未发布 / 状态未知”,页面不再把“已发布”直接等同于“健康”。
PV-3 路径视图 完成 Console 新增独立“节点路径视图”标签页,按观测来源、VPS 与内网节点、服务入口三段展示;VPS 固定按 RR → MM → d02 → DD → DOG 排列。
PV-4 双节点诊断 完成 诊断只对 101/102 真实执行过的来源到终点组合标“实测”;其他组合明确显示“未直接测量”,不把两段观测拼成一条实际路线。
PV-5 按节点汇总 完成 可达性页新增按节点汇总表:VPS 固定 RR → MM → d02 → DD → DOG,一行对照主机可达性、101/102 实测路径、公网入口 TCP 443 和最近检查;三个状态各自独立,不合并成整机判定。
PV-6 控制面韧性评估 完成(只读评估) 结论为保持 Headscale 在 RR、Edge 做前置入口、102 做只读备用;迁 dog 或 102 不消除单点,反而增加状态迁移与客户端重连风险。未改控制面。
PV-7 文档与发布 完成 文档、静态契约、浏览器契约与单元测试通过;提交、推送、镜像发布和生产回读完成,详见下方生产回读。
追加修正(2026-11-01) 完成 例行检查改为每小时五台全量;活动 Edge 结果写回节点卡片;页面增加数据年龄与数据延迟/过期标识。

生产回读(2026-11-01)

检查项 结论 证据
GitHub 工作流 通过 提交 8159789f 的 API 网关、Console、文档站与 Repository Guardrails 全部成功,post_push_verify=pass。
Console 路径视图 已上线 生产 app.js 含 45 处 networkPath;RR 容器内 index.html 含“节点路径视图”标签与诊断表单。
后续 Console 提交 兼容 8ce85e17 只修移动端嵌入页布局,基于 8159789f,工作流成功,Console 继续运行该提交。
Peer Relay 三态 生产生效 生产拓扑投影中 d02、DD、MM、dog 均为“已发布,当前无会话”;RR、101、102 等不承担节点为 null。
DERP TCP 443 探测 已安装并运行 首次探测 MM 返回健康、3 个探针;探测 timer 与原有采集 timer 均为 active。
DERP 资格控制器 已切换到独立快照 安装后四个区域计划状态为 ok;资格脚本改读 derp-eligibility-reachability-v1.json。

发布注意: 首次回读期间执行过一次同提交 Console 重部署,原因是并行部署任务在 RR 上重建了容器;重建后的 8ce85e17 仍包含本计划的路径视图代码,因此不需要再回退或重复发布。

🔜 推荐执行顺序

批次 内容 进入条件 退出条件
第 0 批 只读事实刷新与数据模型确认 用户确认本计划;现有双源快照可读 每字段标出来源、观测时间、证据等级;确认公网/隧道分层
第 1 批 DERP 资格新鲜度 第 0 批完成;保持 TCP 443 硬门槛 配额在预算内;资格只由新鲜中国方向 TCP 443 决定
第 2 批 Peer Relay 三态 第 0 批完成 能区分已发布、实际有会话、未发布
第 3 批 路径视图结构图 路径数据契约冻结 桌面/移动端无溢出,节点能力按登记区分,不把不适用画成故障
第 4 批 双节点链路诊断 探针执行源与目标边界已明确 只对真实执行的起终点对报告实测;其他组合显示未直接测量
第 5 批 按节点汇总视图 第 3、4 批完成 一台节点一行对照主机、TCP、UDP、Tailnet 路径和公网入口
第 6 批 控制面韧性只读评估 现有前置链路和 102 备用职责核实 给出是否需后续实施的方案与回退,不操作服务
第 7 批 发布、回退和用户验收 前六批测试通过且用户确认实施范围 生产回读、浏览器验收、回退材料齐全

每一批都必须先完成本地测试和只读回读,再进入下一批。未获得用户确认前,计划停在第 0 批之前,不执行生产动作。

✅ 验收标准

编号 要求
A1 结构图与诊断结果中不出现任何内部编号、集合名或状态码
A2 所有端口一律写成“协议加端口加功能”,不出现孤立数字
A3 双节点诊断明确标注实测或推断,推断不得伪装成实测
A4 Peer Relay 能区分已发布、有会话、未发布三种状态
A5 DERP 资格在常规探测节奏下仍能产出新鲜判定,不再长期 hold
A6 桌面与移动端结构图不出现文字遮挡与横向溢出
A7 RR 的公网 TCP 整段不可用与 Tailnet 隧道内 TCP 可用必须分开显示
A8 RR SSH 入口显示“需跳板”,不能提供公网直连作为推荐路径
A9 双节点诊断原因链必须说明“公网路径”或“隧道路径”,不能只给“TCP/UDP 不通”
A10 未直接测量的节点组合不能输出伪造的直连、Peer Relay 或 DERP 路线

🔁 回退方案

层 回退动作
界面 下线新标签页,保留实时分布图原状
接口 回退 API Gateway 上一完整镜像
判断口径 恢复原阈值与原 Peer Relay 判定,保留快照回读能力

⚠️ 未决项

未决项 现状 待确认
计划归属 本计划挂在 P21 下作为并行子计划 是否需要独立阶段编号
独立 443 检查频率 已按每 15 分钟一台、四台候选各约 60 分钟一轮实施,约新增 20 tests/小时 生产观察一个周期后复核额度与故障切换时延
内网节点是否做中转 目前只有四台 Edge 提供中转 是否在 102 上开启中转端口
控制面前置入口 已由 Edge 承担(mesh.yohan.fun 别名到 edge.yohan.fun) 不再新增 dog 入口,只评估 102 只读热备
RR 公网 TCP影响 公网 TCP 整段不可用,但 Tailnet 隧道内 TCP 正常 路径视图必须分开显示公网与隧道两条链路
计划启动 用户已于 2026-11-01 确认执行;代码、发布与生产回读完成 无
按节点统一汇总 已完成,见“按节点汇总”表 无