feat(guanghu-os): add authenticated native public projection

This commit is contained in:
冰朔 2026-08-15 20:02:58 +08:00
commit 2e076c4d5e
14 changed files with 780 additions and 4 deletions

View file

@ -0,0 +1,50 @@
---
type: ADR
id: "0180"
title: "Authenticated native public projection before boot cutover"
status: accepted
date: 2026-08-15
depends_on:
- "0179"
---
# 原生公网投影先于启动切换
## 为什么来到这里
ADR-0179 已经在 JD-FD-PRIMARY 的隔离 QEMU 中证明原生只读锚点和代码发现面能够运行,
但这不等于公网能够在原生驻留时继续工作。当前 BS-GZ-006 公网入口经 SSH 隧道回到
JD Linux一旦切换成光湖原生驻留Linux 和隧道端点同时退出,公网会变成 502。
因此,下一步不能直接改启动项。必须先建立一个不依赖 JD Linux 的认证状态通道,并在
BS-GZ-006 上以影子方式完成回读。
## 为什么不是把原文塞进心跳
原生心跳只回答“这个候选现在是否活着并处于规定状态”。它不承担知识、源码、命令或
公网内容传输。这样既保持现有中继的最小权限,也避免把一次存活信号误当成内容来源或
授权。
公网锚点和只读代码发现面的字节来自固定的 REPO-012 main 快照;心跳只决定这些固定字节
当前能否被读出。这保留了两条互不冒充的因果链:内容由源码提交证明,在线状态由短时效
认证状态证明。
## 决定
采用单向三节点投影JD-FD-PRIMARY 的既有六序列原生心跳到 BS-SG-003BS-SG-003 只把
`ready``dormant` 通过专用 SSH 身份和强制命令投影到 BS-GZ-006BS-GZ-006 只在状态
绑定完全匹配且未过期时,从回环地址提供固定只读快照。
任何缺失、格式错误、绑定不符、休眠、未来时间或过期状态都返回 503。中继不能提供或
修改公网内容。代码发现面明确不是 Forgejo 等价物。
## 为什么先影子部署
接收端先监听 BS-GZ-006 回环影子端口,不修改 nginx不改变当前公网路径也不修改
JD 启动、磁盘或默认启动项。只有接收端、认证投影器、真实新鲜度和公网回读分别取得独立
回执后,才能另行决定是否切公网;公网通过后仍不能自动推出物理启动切换。
## 当前结论
协议源码和隔离整链测试为 100。BS-GZ 接收端部署、BS-SG 认证投影器部署、真实原生新鲜度、
nginx 切换、原生公网等价、完整 Forgejo 等价和生产启动切换均保持 0。