回收 411 MB(470 M → 58.8 M),全部经回收站,可恢复: - 待清理/(146.2 M,含 relay 分片 128 M 与 42 项过程目录) - tmp/(32.4 M,按接续棒命名的过程临时区) - .workbuddy/tmp/(39.5 M) - 4 份 workbuddy.db 冗余副本(101 M,09-23 事故的坏副本 / 抢救产物) - tmp/im16/gw/centrifugo 二进制(63.9 M,可重下)+ 缓存残留 入库范围:常驻规则(CODEBUDDY.md / README.md / state.py)、在途接续入口与 接续包、docs/、交付物/、交接单/、归档/、scripts/、.codebuddy/、 .workbuddy/memory/;共 398 件,其中 >60 KB 的 26 件全为文档。 排除(.gitignore):tmp/、待清理/、运行态日志与缓存、*.db 与 DB 备份整目录、 打包二进制(*.tar.gz / *.tgz)、记忆修复前备份。
281 lines
22 KiB
Markdown
281 lines
22 KiB
Markdown
# 覆盖网络 · 功能整体完成情况报告
|
||
|
||
> **报告日期**:2026-09-18 08:2x | **性质**:整体完成度 + 全景说明(背景目标 / 技术路线 / 架构 / 功能特性 / 应用场景 / 性能与安全评估 / 潜在风险)
|
||
> **单一来源**:工作区根 `接续入口_覆盖网络线_20260916.md`(唯一入口)+ `参数表_覆盖网络_20260917.md`(唯一参数表)+ 各序交接单
|
||
> ⚠️ **引用的都是实测值**;凡未实测的一律标"未验证",⛔ 不编数。
|
||
|
||
---
|
||
|
||
## 0. 完成度判定(先给结论)
|
||
|
||
| 维度 | 判定 | 证据 |
|
||
|---|---|---|
|
||
| **功能主体** | ✅ **全部开发完成并落地生产** | 序 ①–㉛ 全收官(含单 A「退出路径不杀实例」、单 B「组密钥加密」) |
|
||
| **在册红项** | ✅ **0** | 探针 `OBS-01..23` ⇒ **23 PASS / 0 SKIP / 0 FAIL(rc=0)** |
|
||
| **待测项** | ✅ **0 项** | 参数表 §7(与表内 `待测` 单元格一一对应) |
|
||
| **待拍板项** | ✅ **空** | 入口 §4(2026-09-17 20:2x 三项全拍板;23:3x 又一轮三问全答复) |
|
||
| **部署形态** | ✅ 两机生产运行 | 47(Manager + `w-47`)/106(`w-106`),relay 各一台(只绑回环 `20080`) |
|
||
|
||
**⇒ 一句话**:**覆盖网络线的功能开发已全部完成并落地生产**,线内**在册红项为零**、**无待拍板项**,当前处于 **⏸️ 线内可停**状态(待真实信号再启)。
|
||
|
||
**⚠️ 三项"不算未完成"的如实说明**(避免被误读为缺口):
|
||
|
||
1. **C 档「systemd scope 单一真相源」** —— 用户 2026-09-17 23:3x **明令"登记为架构目标、本阶段不进执行"** ⇒ 属**有意延后**,非缺口。
|
||
2. **§10-5 `Ed25519→X25519` 派生预研** —— 服务对象是回头条件 7「规模上来了要自动分发组密钥」⇒ **触发条件 = 规模上来**,⛔ 不是当前执行项;本条**本轮未测**(不在写死主题内)。
|
||
3. **档案 112「只做三件事」的第三件「游戏服放 L1」** —— 属**部署形态建议**,未见落地记录;前两件(presence、块级内容寻址)✅ 均已完成。
|
||
|
||
> ⚠️ **取证提示**:`dsh-server-docs/BRIEF.md` 最后人工核对 = **2026-09-16 10:5x**,其中「归档编号至 112」「覆盖网络线后续待排期」等行**已过期**(现核归档号 **130**)⇒ 涉及覆盖网络线的现行事实**以入口文件为准**。
|
||
|
||
---
|
||
|
||
## 1. 背景目标
|
||
|
||
### 1.1 要解决的问题
|
||
|
||
多租户 DSH 平台的用户设备散落在**服务器 / 家宽 / 共享 IP / 移动网 / 企业网 / VPN** 等异构网络里。需求 = 让**同一个人的多台设备**、以及**被授权的他人设备**能够互通,且**全球可接入**、**规模化时不产生流量风暴**。
|
||
|
||
### 1.2 目标形态(定性)
|
||
|
||
- 任何用户在任何网络里的设备,都能与自己的其他设备、以及授权的他人设备互通;
|
||
- **全球可接入**;
|
||
- 规模上去后**网络不产生风暴**(这是本线最核心的非功能目标)。
|
||
|
||
### 1.3 已锁定的边界与口径(用户拍板,⛔ 不许再上抛)
|
||
|
||
| # | 口径 | 含义 |
|
||
|---|---|---|
|
||
| 1 | **方案只做技术实现** | 跨境数据合规由使用者自行考虑 ⇒ 选型不为合规让路、跨境不设限、⛔ 不把合规当前置 |
|
||
| 2 | **单机自用 ≠ 不需要互联** | 「单机用也要互联,这正是建立覆盖网络的目的」⇒ **租户维度收窄 ≠ 网络维度收窄** |
|
||
| 3 | **按异构设计** | 中继按 **45% 设计 / 55% 留余量**(⛔ 不是同构假设的 15%);**必须补 443/TCP 兜底**;有公网 IP 者升格为**中继候选** |
|
||
| 4 | **权威状态单点** | 归属 / 租约 / 骨干资格**只能控制面写**;会合 / 中继**可多实例** |
|
||
| 5 | **形态默认** | **单机自用为默认**;"当服务器给他人用"的多人维度**已放弃** |
|
||
| 6 | **游戏重点** | **MMORPG(2D/2.5D)/ MUD / 传奇类** ⇒ 判定上修为"最匹配",⛔ 非 3D 强实时竞技 |
|
||
|
||
---
|
||
|
||
## 2. 技术路线
|
||
|
||
### 2.1 总路线:照抄成熟做法,不自创
|
||
|
||
> 判定原话:**「有完整可循的工程路径 —— 这套东西在 Tailscale / ZeroTier / Nebula / libp2p / BitTorrent 上已被反复验证,关键是照抄它们踩过的坑,而不是自己发明。」**
|
||
|
||
### 2.2 优先级:先"只做三件事",再铺开
|
||
|
||
| 序 | 三件事 | 状态 |
|
||
|---|---|---|
|
||
| 1 | **presence(节点在线态)** | ✅ 已完成(序⑲ 落地,`OBS-13..16` 四判据) |
|
||
| 2 | **块级内容寻址** | ✅ 已完成(序㉔ 落地,`OBS-17`) |
|
||
| 3 | **游戏服放 L1** | ⚠️ 属部署形态建议,未落地 |
|
||
|
||
### 2.3 关键实现取向(已定,非选型题)
|
||
|
||
- **自研 relay**(⛔ 不走第三方选型)⇒ 两台:47 + 106,**只绑回环 `20080`**;
|
||
- **⛔ 不做打洞实现**(打洞失败直接降级中继;不反复重试);
|
||
- **worker 永远只拨出**(106 入站 = 0)⇒ 不新增公网监听口;
|
||
- **内容源优先级链**:`local → peer → edge → region → origin`,**唯一解密点**在链的统一返回点;
|
||
- **块 id 口径 β′**:`sha256(密文)` 前 32 hex(组内稳定、组外不可预测);
|
||
- **加密档位**:**C 组密钥加密**(同一 `(network, group)` 共享一把 AES-256-GCM 对称密钥);
|
||
- **确定性(收敛)加密**:`iv = HMAC(key,"iv"‖plain)` 前 12 B、`k = HMAC(key,"k"‖iv)`、`AAD = "<groupKey>|<epoch>"` ⇒ **同组同明文密文逐字节相同** ⇒ 序㉔ 的"按哈希共享块"**不退化**。
|
||
|
||
---
|
||
|
||
## 3. 架构
|
||
|
||
### 3.1 五层架构(设计基线)
|
||
|
||
| 层 | 职责 | 关键要求 |
|
||
|---|---|---|
|
||
| **控制面** | 身份、授权、归属/租约、网络地图(netmap)分发 | **承载几乎零流量**;**挂了不影响已建立的数据面**(节点内存缓存状态) |
|
||
| **会合层** | 交换候选地址、协助打洞、签发骨干目录 | 多区域、多实例、可缓存 |
|
||
| **骨干 / 中继层** | 打洞失败时转发密文;可选做区域汇聚 | **限额资源**(预约制 + TTL + 配额),**不可无限使用** |
|
||
| **数据面** | 端到端加密的节点间直连/中继传输 | 直连优先;**空闲不建连**;扇出设上限 |
|
||
| **观测层** | 路径类型(直连/中继)、时延、重连次数、带宽 | 没有它,容量规划与排障只能靠猜 |
|
||
|
||
### 3.2 本平台的实际落地形态
|
||
|
||
```
|
||
┌───────────────────────────────┐
|
||
│ 控制面 = 47 的 Manager(dshs) │ ← 权威状态单点
|
||
│ PG13 127.0.0.1:15432 │ 归属/租约/骨干资格
|
||
└────────────┬──────────────────┘
|
||
│ 拨出式(Manager 拨号通道,周期重解析)
|
||
┌────────────▼──────────────────┐
|
||
│ 会合/目录:/dshs-overlay/ │ ← 签名目录(可信签名者 1)
|
||
│ bootstrap(只绑回环 3080) │ 候选链 3 条
|
||
└────────────┬──────────────────┘
|
||
│
|
||
┌────────────────────────┼────────────────────────┐
|
||
│ │ │
|
||
┌───────▼────────┐ ┌────────▼───────┐ ┌────────▼───────┐
|
||
│ relay@47 │ │ relay@106 │ │ 443/TCP 兜底 │
|
||
│ 只绑回环 20080 │ │ 只绑回环 20080 │ │ (nginx 反代) │
|
||
└───────┬────────┘ └────────┬───────┘ └────────────────┘
|
||
│ 转发密文(中继不解密) │
|
||
┌───────▼────────────────────────▼───────────────────────────────┐
|
||
│ 数据面:w-47(19100) │ w-106(19000) │ 用户实例 20000 / 21000 │
|
||
│ 内容面:local → peer → edge → region → origin(唯一解密点) │
|
||
└────────────────────────────────────────────────────────────────┘
|
||
│
|
||
┌────────────▼──────────────────┐
|
||
│ 观测层 = scripts/overlay-probe.cjs │
|
||
│ OBS-01..23(唯一取数来源=参数表) │
|
||
└───────────────────────────────┘
|
||
```
|
||
|
||
**形态要点**:47 = Manager(单元 `dshs`)**兼**本地 Worker `w-47`;106 = Worker `w-106`。⚠️ 47 兼作 Worker 是**有意设计**。⚠️ 106 入站 = **0**(worker 永远只拨出)。⚠️ nginx 归**宝塔面板**托管 ⇒ `is-active nginx` = `inactive` **是正常态**,⛔ 别拿它判死活。
|
||
|
||
### 3.3 密钥模型(四层)
|
||
|
||
```
|
||
离线根 ──► 47 在线签名者 ──► 每机节点密钥 ──► 会话
|
||
/etc/dshs/overlay-signer-key.pem
|
||
公钥 bad464dfd53048efe7b8531029b3030eda49bc12930703d3a2a8f60e3a7daddf
|
||
```
|
||
|
||
**组密钥凭据** = 签 `(network, group, epoch, keyId)` 四元组,⛔ **载荷不含密钥本体**。组密钥铺两机 `0600 root:root`。**双 epoch 过渡窗口** `CONTENT_EPOCH_GRACE_MS`(缺省 24 h)⇒ `previous[]` **只解不写**,超窗 ⇒ `epochExpired +1` + `decryptRejected +1`。
|
||
|
||
---
|
||
|
||
## 4. 功能特性
|
||
|
||
### 4.1 十二项内建特性 × 落地对账
|
||
|
||
| # | 特性(设计基线) | 落地状态 |
|
||
|---|---|---|
|
||
| 1 | 控制面 / 数据面彻底分离 | ✅ 控制面挂 → 已建连接不断(`LeasedSpawner` 远端实例寿命长于任何单个 Manager 副本) |
|
||
| 2 | 先中继、再升级直连 | ✅ relay 中继可用;直连升级属"打洞未做"范围(→ 特性 3) |
|
||
| 3 | 直连成功率作为一等指标 | ⛔ **不做打洞实现**(用户拍板范围外 ⇒ 判死直接降级中继) |
|
||
| 4 | 空闲不建连(懒建连) | ✅ 空闲会话不建连;`idle-reap` 间隔 60 s / TTL 7 天 / 每 host 上限 4 |
|
||
| 5 | 中继是稀缺资源,要准入 | ✅ **45% 设计 / 55% 余量** + 软门 `utilMaxPct=70` + `utilRefused` 计数 |
|
||
| 6 | 失败要能"判死" | ✅ 终态早退(`waitUpOnStatus`)+ `RELAY_FAILOVER_DEADLINE_MS` 内侧 |
|
||
| 7 | 端到端加密 + 中继不解密 | ✅ **组密钥 GCM**:中继只见元数据(谁连谁、量多大) |
|
||
| 8 | 一机一身份 + 可吊销 | ✅ `identityRequired=true` / `trustedSigners=1` / `revokedHosts` 清单 |
|
||
| 9 | 自报网络画像 | 🟡 部分(路径类型/在线态/端口已入观测;NAT 类型 / VPN 检测见特性 12 口径) |
|
||
| 10 | 内容寻址 + 分级缓存 | ✅ `local → peer → edge → region → origin` 五档链 + 块级寻址 `β′` |
|
||
| 11 | 统一限流与退避参数表 | ✅ **参数表 `参数表_覆盖网络_20260917.md` = 唯一取数来源**(探针脚本内零魔数) |
|
||
| 12 | 可见性默认最小 | ✅ 接入 ≠ 可见;⚠️ VPN/代理**检测即降级不重试** |
|
||
|
||
### 4.2 已落地的功能清单(按序)
|
||
|
||
| 序 | 功能 | 关键判据 |
|
||
|---|---|---|
|
||
| ①–⑥ | 可行性评估 / 架构复盘 / 瓶颈落地 / 骨干层 / 百台·千台推演 / 游戏专项 | 10 份规划文档(归档 **103–112**) |
|
||
| R0–R5 | relay 最小闭环 → 韧性选点 → 常驻 + 443 暴露 → Manager 拨号通道 | `OBS-01..12` |
|
||
| ⑦–⑩ | 失败切流(候选集不再退化单点)+ 冷却语义拆分(一跳豁免 / 终态早退) | 演练幕 `--scene 4/4b/4c`;`[relay-switch]` 行数 ≡ `switches` |
|
||
| ⑲ | **presence(节点在线态)**:首帧即全量、稳态零帧率、在线态不撒谎 | `OBS-13..16` |
|
||
| ㉑–㉒ | 观测口径与在册缺陷(P-1 门翻转 / P-2b 三级候选链) | `OBS-09` |
|
||
| ㉔ | **块级内容寻址**:五档源链 + 块级 store + 唯一解密点 | `OBS-17` |
|
||
| ㉕–㉚ | **实例逐步拉起**(启动认领 + TCP 探活判孤儿) | `OBS-18` |
|
||
| ㉖–㉚ | **骨干稳定选路与 jitter 选路** | `OBS-19`、`OBS-20` |
|
||
| ㉗ | **每连接候选数 ≥ 2**(E3 路径多样性) | `OBS-21`(两路径 `count=3`) |
|
||
| ㉘ 单 A | **退出路径不杀实例**(三处 `teardown()` 同改) | `OBS-22`(静态守卫 + 认领面自洽) |
|
||
| ㉘ 单 B | **组密钥加密**(GCM 确定性) | `OBS-23`(确定性 / 共享 / 明文不出现 / 权限=600) |
|
||
|
||
### 4.3 观测面(23 条判据 = 功能可断言面)
|
||
|
||
`OBS-01..23` 覆盖:容量与在册(01/02/20)|身份与授权(03/04/05/07)|判别器三件套(06)|端点表与实例面(08/09)|门户与暴露面(10/11)|relay 内存(12)|presence(13–16)|内容分发(17)|逐步拉起(18)|抖动选路(19)|候选数(21)|退出不杀实例(22)|组密钥加密(23)。
|
||
|
||
---
|
||
|
||
## 5. 应用场景
|
||
|
||
| 场景 | 匹配度 | 说明 |
|
||
|---|---|---|
|
||
| **MMORPG(2D/2.5D)/ MUD / 传奇类** | ⭐ **最匹配** | 核心简化:**玩家之间不需要互联,中继按"服数"算**;带宽 每玩家 **2–20 KB/s**、jitter **< 20 ms** |
|
||
| **群聊 + agent** | ⭐⭐ 高 | 扇出**按预算定义**分档(⛔ 不按人数拍脑袋) |
|
||
| **静态资源分发(首屏包)** | ⭐⭐ 高 | 块级寻址 + 五档链 ⇒ **同一份资源全网只取一次**(实测首屏包 11,363,655 B / 11 块) |
|
||
| **备份 / 迁移提速** | ⭐⭐ 高 | 主备份用对象存储;跨机搬运走内容面 |
|
||
| **多机分布式观测 / 远程运维** | ⭐⭐ 高 | presence + 端点表 + 探针 23 判据 |
|
||
| **跨异构网络接入**(家宽 / 移动 / 企业网 / VPN) | ⭐⭐ 高 | 拨出式设计 ⇒ 无需公网入口 |
|
||
| ⛔ 3D 强实时竞技 | 低 | 明确**不在**本线目标内 |
|
||
|
||
---
|
||
|
||
## 6. 性能与安全评估
|
||
|
||
### 6.1 性能(全部为本机 / 真机实测,附口径)
|
||
|
||
| 项 | 实测读数 | 口径 / 备注 |
|
||
|---|---|---|
|
||
| **加密开销** | 总墙钟 p50 **22.636 → 42.782 ms**、p95 **23.020 → 43.599 ms**(**1.890× / 1.894×**);吞吐 **502.02 → 265.62 MB/s**;密文 **+28 B/块** | 11,363,655 B / 11 块、n=11、单核、页缓存全热、两臂零回源 ⇒ **加密层自身成本**,⛔ 非端到端承诺 |
|
||
| **轮换代价** | 冷启动回源 **21,021,572 B = 4.0001 × 包 = 1 × 包/组**;轮换后首轮同值、次轮 **0**;对照腿 **0** | 4 组 × 4 节点夹具 ⇒ 轮换 = **一次完整冷启动** |
|
||
| **换址墙钟** | 总 **30.7–34.1 s → 20.9–23.9 s**(检测 15.0–16.6 s + 首试 0.3–5.0 s + 白等 **12.02 → 0.09 s** + 建连 2.7–5.2 s) | 真机 n=5+n=5;`RELAY_FAILOVER_DEADLINE_MS` 30000 内侧 **5/5** |
|
||
| **候选路径数** | 两条路径各 **count=3 / hosts=3**(判据 ≥ 2) | `OBS-21` |
|
||
| **容量** | `max=7515` / `used=2` / `free=7513` / **利用率 0%**(软门 70%) | `OBS-02` / `OBS-20` |
|
||
| **资源占用** | relay RSS **65,432 KB**(阈值 ≤ 800,000 KB);`MEM_PER_HOST_MB = 0.06`(空闲会话斜率) | `OBS-12`;⚠️ **带流量时未测** |
|
||
| **presence 帧率** | 稳态 `Δpushed = 0`、在线态陈旧 p95 **11,993 ms**(阈值 ≤ 15,000) | `OBS-13` / `OBS-15` |
|
||
| **零回归三件套** | `npm test` **201/200/0/1** | 演练 **12 PASS / 0 FAIL** | 探针 **23 PASS / 0 SKIP / 0 FAIL** | 2026-09-18 08:0x 复核 |
|
||
|
||
### 6.2 安全
|
||
|
||
| 项 | 状态 | 证据 |
|
||
|---|---|---|
|
||
| **中继看不到明文载荷** | ✅ 成立 | 组密钥 GCM;中继只见元数据(谁连谁、量多大) |
|
||
| **内容不可推断** | ⚠️ **不成立** | 收敛加密对低熵必然泄露**相等性**(10,000 块 / 100 值域 ⇒ 仅 100 种密文);⛔ **不写"很安全"** |
|
||
| **身份强制** | ✅ | `identityRequired=true` / `trustedSigners=1` / 可吊销清单 |
|
||
| **密钥不经网络 / 不经 relay** | ✅ | 只走 `0600` 落文件 + `scp`;凭据 **274 B**、逐字核**不含密钥本体** |
|
||
| **签名固化** | ✅ | `sign-group-key` 已落 47 **两处正式路径**(⛔ 不靠临时投放脚本);篡改 epoch ⇒ `signature-mismatch rc=1` |
|
||
| **明文不出现** | ✅ | `plainScans=1` / `plainLeaks=0`(`OBS-23`) |
|
||
| **暴露面零新增** | ✅ | 仅新增回环口;`nft` 多出 **0**;`OBS-11` 多出 **0** |
|
||
| **权限只收窄** | ✅ | 全程零 `nft` / `nginx` 命令;密钥文件权限 `47=600 106=600`(错则**失败关闭**) |
|
||
| **失败关闭** | ✅ | 组密钥装载六原因码具名:`no-file` / `bad-perms` / `parse-error` / `group-mismatch` / `bad-key` / `bad-epoch` |
|
||
| **跨组隔离** | ✅ | 跨组在**认证阶段被拒** + `decryptRejected +1`;`crossGroupDenied` 语义未放松 |
|
||
|
||
---
|
||
|
||
## 7. 潜在风险
|
||
|
||
### 7.1 技术风险(已登记,附回头条件)
|
||
|
||
| # | 风险 | 影响 | 当前处置 |
|
||
|---|---|---|---|
|
||
| 1 | **低熵明文的相等性泄露** | 中继可观测内容重复率(非明文) | 已定性量化;⛔ 不声称"很安全";如需更强,须换非确定性加密(**代价 = 放弃块共享**) |
|
||
| 2 | **轮换 = 一次全量回源 + 存储翻倍** | 旧 epoch 密文**不自清**(`storeBytes` 5,255,393 → 10,510,786) | 回头条件 8:**轮换必须约在发布窗口**;旧块逐出时延**未量化** |
|
||
| 3 | **relay 无 `MemoryMax`** | 只有软口径 `--max-hosts`;极端情况无 cgroup 硬顶 | **有意不动**(加 cgroup ⇒ 新失败模式 OOM-kill,命中 R11);`--max-hosts` 现为 7515、实测非绑定约束 |
|
||
| 4 | **孤儿端点条目不幂等自愈** | 重启 worker 后 `OBS-08`/`OBS-09` **必红**,靠"重新登记同端口"覆盖 | 已留档;⛔ 不是"跑一会儿就好" |
|
||
| 5 | **引导链缓存有 ≤ 300 s 收敛期** | 切兜底时最长 300 s 延迟 | 已把 300 s 收进参数表;⛔ 不改缓存结构 |
|
||
| 6 | **106 引导链不吃目录(agent 面)** | `DSHS_RENDEZVOUS_URL` 被当 relay URL 直接用 | 只记录、⛔ 不顺手撤(撤掉 = 生产回归) |
|
||
| 7 | **带流量内存开销未测** | `MEM_PER_HOST_MB = 0.06` 只是空闲斜率;带流每条流最多 1 MB 缓冲 | 回头条件:`--max-hosts` 若重新收紧,**必须先有本数** |
|
||
| 8 | **规模上来要自动分发组密钥** | 需新增 `x25519` 或 Ed25519→X25519 派生 ⇒ **属新增密钥类型** | 回头条件 7:**停下报告、另立单**;§10-5 预研**未做** |
|
||
|
||
### 7.2 运维风险
|
||
|
||
| # | 风险 | 说明 |
|
||
|---|---|---|
|
||
| 1 | **密钥文件属主被改** | 本线有"属主被改 ⇒ 实例全崩"先例(R10);密钥/用户目录权限须严格保持 |
|
||
| 2 | **106 nginx 归宝塔托管** | 若面板**重建站点**,需复查 `nginx -T | grep dshs-relay`(已写进 conf 头部注释) |
|
||
| 3 | **bwrap 版本异构** | **47 = 0.4.0 / 106 = 0.11.0** ⇒ `--perms` 属 0.5+,47 上用了 ⇒ **沙箱起不来 = 所有实例全挂**;要权限**用 `--tmpfs`** |
|
||
| 4 | **`--max-hosts` 的 env 陷阱** | CLI 压 env ⇒ 只设 `Environment=` 会被**静默忽略** ⇒ 必须 drop-in 重写 `ExecStart`(现 7515) |
|
||
| 5 | **参数表值格必须纯数字** | 夹注 ⇒ `NaN` ⇒ **假红**;探针 `cleanValue()` 会剥 `*` ⇒ 白名单值 ⛔ 别写 `*:443` |
|
||
| 6 | **"没装"与"没采到"必须可分** | `journalctl` 原文字节数 **0 = 读取失败**,⛔ 不等于"确无该行" |
|
||
| 7 | **持久禁令** | ⛔ 不调 `RELAY_FAILOVER_DEADLINE_MS`|⛔ 不动 `HB_SEC` / burst|🔴 **⛔ 禁用 `COOLDOWN_MS=0`**(实测 121–123 s 无切换) |
|
||
|
||
### 7.3 安全边界(明确的能力上限,⛔ 不得越界声称)
|
||
|
||
- **组内成员互信**:同一 `(network, group)` 的成员共享一把密钥 ⇒ 组内**互相可见**是设计前提;跨组隔离成立;
|
||
- **中继侧只减不增**:中继只见元数据、不见明文;**但可见性 ≠ 保密性**(相等性泄露见 7.1-1);
|
||
- **打洞未做**:所有跨机流量在打洞失败后走中继 ⇒ **中继是可用性单点**(已有 443 兜底 + 3 条候选链缓解);
|
||
- **跨境不设限**:按用户口径,**不做**地域封禁 / 数据落地约束(合规由使用者自担)。
|
||
|
||
### 7.4 规模风险
|
||
|
||
- 中继按 **45% 设计**;百台画像推演:**L1 10 / L2 30 / L3 需中继 40–55**;对比全互联 4,950 条 vs 星型 100 条;
|
||
- 千台 × 11 场景推演中,**瓶颈排序第一 = presence**(已由序⑲ 落地验证);
|
||
- ⚠️ 上述为**推演值**,⛔ 非实测;真实规模数据待上线后回归。
|
||
|
||
---
|
||
|
||
## 8. 附:证据与单一来源
|
||
|
||
| 项 | 位置 |
|
||
|---|---|
|
||
| 唯一入口(状态 / 下一步 / 关键决定 / 回滚点) | 工作区根 `接续入口_覆盖网络线_20260916.md` |
|
||
| 唯一参数表(输入参数 / 常量 / 观测阈值 / 待测 / 权限影响) | 工作区根 `参数表_覆盖网络_20260917.md`(§10 指纹 `52e59df229102d5afa8c8bf01a960398`) |
|
||
| 十份规划文档(归档 103–112) | `dsh-server-docs/04-调整方案/` |
|
||
| 各序交接单(含执行回报 §8 全节) | 工作区根 `交接单_*.md` + `dsh-server-docs/交接单/覆盖网络-序NN-*.md` |
|
||
| 观测探针(一条命令) | `scripts/overlay-probe.cjs --table "<参数表路径>"` ⇒ 23 判据 / 退出码 0-1-2 |
|
||
| 故障演练 | `scripts/overlay-failover-drill.cjs --scene all --table "<参数表路径>"` |
|
||
| 代码仓 | `https://cnb.cool/maogeigei/dsh-shenxian`(镜像原仓 `work.alotbuy.com:maogeigei/dsh_shenxian.git`),HEAD **`09ce76f`** |
|
||
|
||
> ⚠️ **报告生成时的核对基线**:HEAD `09ce76f` | 探针 **23P/0S/0F** | 归档号现核 **130** | 工作区日志 `.workbuddy/memory/2026-09-18.md`。
|