NS · 演进路线与开发计划
本页汇总 NS 三个部分(账户模式、Quick 模式、应用模式)进行中的计划、延期验收项与已知差距。计划编号对应
ns仓库docs/plan/。
1. 不可放弃的差异点
Section titled “1. 不可放弃的差异点”- 统一节点 —— 一个二进制同时访问与发布。
- 三种数据面共享上层 ——
tun是默认且功能最完整的形态,dns-vip/proxy保留”免 root 也能用”的差异化。 - 链路阶梯可恢复 —— 降级与恢复由健康证据驱动,不新增 NSD / NSGW 协议。
- ACL 全部 fail-closed —— 不存在”偏宽放行”的路径。
- 私钥不出节点 —— 协议级硬约束。
- 本地能力声明是兜底 ——
services.toml/ns subnet绑定不可被 NSD 绕过。 - 账户模式与 Quick 模式并存 —— 账户模式承载团队、策略与运维;Quick 模式让任意两台设备免账户直接配对,两者同一二进制,自 2026-10-12 起作为同一个节点引擎上的平等 membership 同时运行。
2. 进行中的计划
Section titled “2. 进行中的计划”状态以 ns 仓库分支 refactor/nsplane(fbc8ded8,2026-10-13) 的 plan / task 索引为准。
| 计划 | 目标 | 状态 |
|---|---|---|
| PLAN-173 认证的有状态 Node L3 访问控制 | 同 Account 全 L3 保留,跨 Account 新流需显式 Grant,返回流有状态 | 实现与跨账号 live 矩阵已完成;尚需补齐 diff coverage 与威胁模型评审 |
| PLAN-160 统一发布产物编排 | CLI / App 库统一构建目标、同 commit provenance 与发布归档 | 构建编排已完成;仅余 Windows CLI 本地化发布验收 |
| Quick 模式 macOS / Windows 平台支持 | Quick 模式在 macOS(utun)与 Windows(Wintun)上运行,桌面清理可验证 | 实施中;已发布并通过两台物理 Mac 验收,Windows 原生验收未闭合 |
| PLAN-220 测试目标平台可见性 | 恢复 Windows 测试目标编译,不改变运行时行为 | 实施中 |
单引擎(20261003-2200-one-engine) | ns 每个进程一个 nsplane 引擎,只保留业务逻辑与控制面;第 1 阶段(账户模式,M4)、第 2 阶段(Quick v2,M5)与两轮后续已完成,第 3 阶段随 nsplane 的 MG / MT / MD 事项删除剩余的逐报文循环、Windows tun crate 与 acl 执行 | 进行中;见 账户模式 §2.4.1 |
M4 账户模式换引擎(20261003-1300-account-mode-engine) | 账户模式只运行在 nsplane 引擎上,旧数据路径删除;决策 2026-10-03-account-mode-engine-only 及其三次附录 | 已完成(2026-10-03,后续轮 2026-10-04 / 05 / 06) |
M5 Quick v2 上引擎(20261003-2145-quick-v2-on-engine) | Quick 只实现 v2:overlay 的 Quick 来源、记录、relay 与登记表客户端、信箱配对、隧道内控制通道;删除 quick-runtime / quick-wire / quick-pairing | ns 侧已完成(2026-10-04);relay v2 服务端待 nsgw M2 |
M3 覆盖网核心(20261003-0800、20261003-1200) | overlay crate(约 17k 行),账户与 Quick 都在用 | 实现完成,待最终 QA |
nsplane 0.11 采用(20261010-1328-nsplane-0.11-adoption) | Node L3 模型移回 ns(account_engine::wg::node_l3)并编译到 nsplane 通用流网关;来源策略改为 key:<hex> 标签;翻译器改用 EAM 名字 | 已完成(2026-10-10);之后 10-12 升到 v0.12.0、10-13 升到 v0.13.0(Enforce 下原生 N6 判定、Subnet L3 回程身份的运行时准入)与 v0.14.0(重叠 LAN 的本地虚拟网段) |
同时连接多个 NSD(20261010-1542-concurrent-nsd-connections,决策 2026-10-11-node-memberships) | 设备密钥链与按 NSD 加盐的身份;平等的 membership 运行时(每个 NSD 的每个 Network 与 Quick 各为一个 nsplane 本地身份);上报隔离;节点策略权威;路由、名字、出口归节点;新的 CLI / 状态 / FFI 面;不兼容旧 ns | 已完成(campaign 于 2026-10-13 关闭):工作流 A–E 全部合入;多节点互通套件(just multi-node-e2e:进程内 23 通过 / 1 忽略、mock crate、Docker 里真实 ns 守护进程 10 步全部通过);剩余:同一 Node 身份出现在两个 NSD 时只有先绑定者可达(nsplane 0.14 已提供按本地身份的密钥路由,ns 尚未接入);NSD 与 nsgw 的配套未开始 |
| 后续里程碑 | M6 的 ns 侧已随 membership 运行时开始(身份对端、NSD IPv4 删除);NSD / nsgw / relay v2 未开始;M7–M9,见迁移计划 | 待排期 |
Windows ns quick down 间歇 internal_error(PQD,20261006-1130) | 杀死 worker 后的 down 偶发内部错误 | 未闭合 |
| 剩余 Keynet 拼写 | 只剩 v1 存储上下文 keynet/runtime-state/v1(迁移读取用)、配置校验里的 /keynet/v1 回退与未用的 v1 向量 | 基本完成 |
| 应用模式 · 文件发送 | ns send / receive,见 apps.md、file-send.md;依赖单一 nsplane 引擎 | 设计,未排期 |
3. 延期验收项(不阻断开发,阻断对应发布)
Section titled “3. 延期验收项(不阻断开发,阻断对应发布)”| 项 | 说明 |
|---|---|
| Windows native artifact / smoke | 所有计划统一把 Windows native 作为 release gate,不登记 runner gate |
| 单引擎的发布门 | Windows / macOS 原生 TUN smoke(just windows-smoke 已自动化,账户引擎部分通过);tests/live-e2e;吞吐不低于旧基线(嘈杂主机上 −3.7 %,在噪声内,需在安静主机复测);Windows quick0 MTU 65535 待 nsplane MT-3 |
| 子网路由(PLAN-164)与网络互联(PLAN-165)的 macOS / Windows 原生验收 | Linux native 与 Docker live-e2e 已闭合;原生 runner 证据延期到发布 |
| Linux arm64 独立环境的容器 smoke | Linux amd64 与 Colima arm64 已通过 |
| PLAN-213 移动端 App / 真机验收 | Core / FFI / CLI 本机验证已闭合;手机网络观察接入与真机证据留作发布门 |
| Quick 模式 Windows 原生验收 | 编译与本地测试通过;原生运行时验收与 Windows 安装器迁移证据未闭合 |
| production 公钥 / 稳定 fingerprint 与 arm64 / macOS 原生发布证据 | Docker 离线发布链路的发布前置 |
4. 已知差距与后续设计
Section titled “4. 已知差距与后续设计”| 领域 | 差距 | 方向 |
|---|---|---|
| 子网路由 | 首版始终 SNAT;不支持原生 IPv6 LAN;不提供 --virtual-cidr / 关闭 SNAT;移动端不能作子网网关 | 真实源地址保留、原生 IPv6 LAN 另立计划 |
| 网络互联 | 只支持 IPv6 发起终端与静态路由 / 既有默认网关;不自动配置路由器、热点、RA、DHCPv6;只支持 TCP / UDP / ICMP Echo;外部路由只能报告 unverified | 保持首版边界;路由器自动化与 NAT46 不在计划内 |
| 直连 P2P | direct 只在已认证 WG 会话后竞争;无冷启动打洞、无跨网关选择 | 由 NSD PeerCandidates 与 NSGW 反射探测驱动,按需扩展 |
| Gateway Egress | 短名已收敛为 <service>.<gateway-label>.svc;macOS 原生 DNS 失败保留为发布跟进 | 发布前补齐原生验收 |
| Short DNS | 不提供 enrollment 后 Node rename、不提供省略 gateway label 的 <service>.svc 歧义短名、不改公共 DNS zone | 明确非目标 |
| Quick 模式未开放能力 | bridge(IPv4-only 服务桥)、别名快照、身份恢复、本地密钥绑定管理命令隐藏;命名层未实现;自定义 relay 只能一个条目 | 按需开放;多 relay 注册由内置列表提供 |
| Quick 模式能力边界 | 只做设备间 L3;不发布 Service、子网、出口;自 2026-10-12 起可作为节点引擎上的一个 membership 与账户模式同时运行,但不共享对端(跨来源默认拒绝) | 保持;需要这些能力时使用账户模式 |
5. 明确不做的事
Section titled “5. 明确不做的事”| 事项 | 理由 |
|---|---|
| 在 membership 之间转发流量,或按优先级解决 membership 之间的冲突 | 节点从不在 membership 之间转发;所有 membership 平等,冲突由本地决定而不是按排序(决策 2026-10-11-node-memberships) |
| 手工 Noise / QUIC / Envelope pin | 信任材料只来自 WebPKI 认证的发现文档 |
在 auto 之外增加候选顺序 / 阈值 / timeout 的公开配置 | 保持 auto 语义简单 |
6. 跨仓协调点
Section titled “6. 跨仓协调点”| 改造 | NS 侧 | NSD / NSGW 配套 |
|---|---|---|
| Node L3 Grant 执行 | node_l3_acl.v1、enforced 代际 | NSD PLAN-123 统一 Access Grant 与代际标记 |
| pair transport 权威 | 心跳携带异常快照、消费 override | NSD 能力门控的 pair observation;NSGW 无改动 |
| Gateway Exit 撤销 | fenced withdrawal journal | NSD TASK-252 认证 clear API 与 opaque selection identity |
| Short DNS v2 / Gateway Egress 短名 | resolver、平台 scope、FFI catalog | NSD TASK-205 / Egress 投影 |
| 容器 DNS | NS_CONTAINER=1 原生 resolver 管理 | 无 |
| 控制信任发现 | control_trust.v1 消费 | NSD PLAN-137 发布方;NSGW PLAN-132 消费方 |
| 网关 RTT 探测 | relay_gateway_rtt.v1 探测 probe_roster,gateway_rtt.v1 心跳上报分档 RTT | NSD 投影 gateway_config.probe_roster 并确认 gateway_rtt.v1;NSGW 应答反射探测 |
| Quick 模式 relay | 短码目录、/quick/v1 配对客户端、区域成员轮转 | NSGW nsgw-quick-relay 提供 relay(UDP / /keynet/v1 WSS)、/quick/v1 配对服务与区域成员间协议 |
| 身份对端与 membership(2026-10-12) | WgConfig 不再有 ip_address,node_identity 携带身份键;每个 membership 独立登记与控制连接;到网关载体的 IPv4 从本机 carrier4 不经翻译发出 | NSD 投影身份键、停止分配 Node IPv4(迁移计划 §5 的工作包);NSGW 接受已准入客户端的任意 IPv4 源并按对端伪装(D3 修订) |