NSIO Docs
NSIO Docs
首页
总体架构

NSN · 站点节点

NSN · 站点节点
NSN · 架构与功能设计
NSN · 演进路线与开发计划

NSC · 用户客户端

NSC · 用户客户端
NSC · 架构与功能设计
NSC · 演进路线与开发计划

NSD · 控制中心

NSD · 控制中心
NSD · 架构与功能设计
NSD · 演进路线与开发计划

NSGW · 数据网关

NSGW · 数据网关
NSGW · 架构与功能设计
NSGW · WireGuard Peer Relay 协议层
NSGW · 演进路线与开发计划

Last Updated: 2026/5/8 08:44:39

Previous PageNSN · 架构与功能设计
Next PageNSC · 用户客户端

#NSN · 演进路线与开发计划

本页融合 NSN 的设计差距、改造主题与生产化扩展方向,作为路线规划的输入。架构概念见 architecture.md。

#1. 不可放弃的差异点

NSN 的演进必须保留以下差异化语义,否则失去产品定位:

  1. 多 NSD 并行 —— 同一 NSN 可同时向多个 NSD 注册,策略按 resource_id 合并去重。
  2. 协议可插拔的控制面 —— SSE / Noise / QUIC 三套传输共用一个事件解析器,无需 bootstrap 切换。
  3. 代理即 NAT —— 站点侧不改 IP 头,只做端口→服务查找,语义简单、合规友好。
  4. ACL 仅允许语义 —— 默认拒绝,白名单模型,合规审计友好。
  5. 三种数据面共享上层 —— TUN / 用户态 / WSS 共享同一份服务路由 / ACL / proxy 逻辑;userspace 模式不需要 root,使 NSN 可跑在容器、笔记本、CI runner、移动沙箱等多形态宿主上。
  6. 私钥不出节点 —— 协议级硬约束,WgConfig 故意不含 private_key 字段。

#2. 开放差距(按主题)

下面是仍然开放的改造项,已剔除近期已修复的 P0(ACL fail-closed、conntrack TTL/cap、spawn_supervised 等)。

#2.1 ACL / Policy(主题 A)

ID现状目标
A.1 ACL 合并语义多 NSD 合并已具备 sentinel 区分(空 ≠ 失败)+ 显式 policy_version 字段;rollback / 灰度
A.2 启动期 ACL 等待等待初始 ACL 加载完成后再开 WSS+ 配置项 startup.acl_required = true 默认 true
A.3 出站 ACL当前仅入站维度,出站方向未实现+ 出站策略求值(NSC 对称项,NSN 对应远端 NSN 方向)
A.4 ACL 模拟与回放未实现+ /api/acl/simulate?subject=X&target=Y + 历史日志重放
A.5 跨配置一致性校验services.toml 与 AclConfig 各自独立校验+ 启动后做交叉校验(services 引用的 wg 隧道在 WgConfig 中存在等)

#2.2 控制面安全(主题 B)

ID现状目标
B.1 to_http_base() 改写仍把 noise:// / quic:// 写为 http://(明文)+ 改 https:// + reqwest TLS 校验 + auth.allow_plaintext_for_legacy 过渡开关
B.2 控制面 HTTP API 收敛register/auth/heartbeat 4 个 API 仍走 to_http_base,绕过 Noise / QUIC transport+ 全部封装进 ControlTransport,加密信封统一
B.3 challenge-responseauthenticate 签名仅含本地时间戳,无 server nonce → 重放窗口+ NSD 增加 /api/v1/machine/auth/challenge,签名嵌入 nsd_url + server nonce
B.4 私钥保护machinekey.json 明文 hex JSON 落盘+ AEAD(chacha20poly1305)包裹,密钥来自 NSN_KEY_ENC_KEY 或 OS keyring
B.5 token 脱敏Bearer token 多处 format!() 拼接,可能进日志+ secrecy::SecretString 包裹,tracing field 强制脱敏
B.6 WSS Open frame 范围缺地址范围限制,有 SSRF 跳板风险+ 限制目标地址在白名单段内
B.7 WSS Open frame 身份缺 source identity 字段+ 新增 source TLV,NSGW 填入 NSC 身份
B.8 QUIC 公钥治理信任完全基于 SHA-256 fingerprint pinning,无法轮换吊销+ Machine PKI 路径(F1.1)

#2.3 可观测性栈统一(主题 C)

ID现状目标
C.1 业务 instrument 普及OTel pipeline 已注册并启用,关键路径已埋部分指标+ 端到端覆盖:WSS Open / ACL is_allowed / ServiceRouter::resolve / SSE dispatch / wg encrypt-decrypt 全部 histogram
C.2 mpsc 占用率缺 nsn_channel_pending / nsn_channel_dropped_total+ 封装 MeteredSender<T>,所有 mpsc 用它包裹
C.3 tracing span缺 root span / 无 trace_id / 无跨调用上下文传播+ 入口 task 创建 root span,绑定 gateway_id / connection_id / frame_seq
C.4 SLI/SLO 文档未定义+ 4 个核心 SLI(可用性 / p50 / p99 / 错误率)文档化
C.5 NAT miss 可见反向查找 miss 静默丢包+ nsn_nat_miss_total counter + sample log
C.6 ACL deny 计数deny 事件仅 VecDeque,/api/metrics 不暴露+ nsn_acl_denials_total{reason} + nsn_acl_allows_total
C.7 日志滚动tracing file appender 按日滚动,无大小上限 / 无压缩 / 无清理+ 改按大小+保留窗口滚动
C.8 /api/metrics 拼写部分指标走手写字符串拼接+ 全部改为 OTel instrument

#2.4 数据面健壮性(主题 D)

ID现状目标
D.1 NSGW 健康探活NSGW connector 已有基础探活路径+ 主动验证探活报告进入 metric;Failed gateway 进入指数退避重连
D.2 WSS upgrade 切换UDP 升级时 abort 中断所有 WSS 流+ 先 draining,完成 in-flight 后再切
D.3 单 TCP HOL单 WSS TCP 是吞吐天花板 + 所有流共享+ N 路 TCP(N=cpus 或可配),streams 哈希分散
D.4 relay idle timeout中继路径慢响应缺统一 idle timeout+ idle timeout(默认 5 min)
D.5 proxy_done 容量当前 1,WSS proxy 异常退出后不重连+ 调到 4,异常退出触发 connector 重建
D.6 conntrack 进阶TTL/cap 已实现+ 跨进程持久化 / 慢路径热点采样

#2.5 入口拆分与解耦(主题 F)

ID现状目标
F.1 connector 选路与 tunnel-ws 强耦合选路策略假设单条 TCP socket+ 选路抽象与单 TCP 解耦,扩多 TCP 不需协议改造

#2.6 性能优化(主题 G)

ID现状目标
G.1 ACL 热路径每帧 Open 走读写锁+ ArcSwap snapshot,无锁读
G.2 WSS data 帧零拷贝中继路径多次 Vec 拷贝+ bytes::Bytes 引用计数零拷贝
G.3 services hostname DNS 缓存严格模式每次 WSS Open 都 DNS resolve+ TTL 30s cache
G.4 monitor JSON 缓存状态端点高频序列化无 cache+ 写后 invalidate 的 string cache
G.5 选路时间复杂度多网关管理器选路 O(N)+ 维持 sorted set,O(log N)
G.6 用户态 WG 多核加解密单线程加解密+ per-CPU pinned worker
G.7 read bufferTCP relay 读缓冲固定较小+ 调大或与 NSGW MTU 协商

#2.7 半成品收尾(主题 E)

项目改动时机
services_ack 写入 AppState/api/services 增加三态字段顺手做
心跳 local_ips 动态采集网卡 IP 变化运行期感知顺手做
audit 事件流独立审计模块,统一 SecurityEvent 类型 + syslog / file sink与 B 主题一起

#3. 阶段排期(以 NSN 为主线)

缺陷修复主线                       生产化扩展主线
─────────────────                  ───────────────
Phase 1 · 控制面安全 (B 主题)       MVP · 数据中心 NSN
Phase 2 · 可观测性栈 (C 主题)      ─┐
Phase 3 · 数据面健壮性 (D 主题)    ─┼─→ GA · 多区域 / 多 NSGW failover
Phase 4 · 入口拆分与性能 (F+G)     ─┤
Phase 5 · ACL 进阶 + 出站 (A 主题) ─┘
Phase 6 · 边缘 NSN / 移动 NSN          → 企业级 · BYO-CA / FEC / 跨云

每个 Phase 的准入条件统一为:

  1. 4 套 Docker E2E + 新增对应 E2E 全绿
  2. 与 Phase 之前 perf snapshot 对比(吞吐 / p99 / OOM)
  3. 用安全清单逐项验证;受影响 docs 由 owner 更新

#Phase 1 · 控制面安全

目标:闭合 B 主题。NSN 改动:

  • B.1 reqwest scheme 改 https + TLS 校验 → 删除 to_http_base 用法,保留作为 legacy 配置项
  • B.2 ControlTransport 扩展承载所有 4 个 HTTP API(NSD 端配套)
  • B.3 challenge-response 客户端实现
  • B.4 私钥 AEAD 包裹,密钥来源决策(env / OS keyring)
  • B.5 token secrecy::SecretString 包裹
  • B.6 WSS Open 目标地址段白名单
  • B.7 WSS frame source TLV(协议 v2 协商)
  • 引入独立审计模块,接入 SecurityEvent 与 syslog sink

前置依赖:NSD 端 auth/challenge API、frame v2 schema 评审。

#Phase 2 · 可观测性栈(可与 Phase 1 并行)

目标:闭合 C 主题。NSN 改动:

  • /api/metrics 手写字符串拼接全部改为 OTel instrument
  • 关键路径 histogram 至少 5 个
  • MeteredSender<T> 包裹所有 mpsc
  • 入口 task root span,绑定低基数标签
  • 文档增加 SLI/SLO 章节

准入:/api/metrics 不再含字符串拼接;NSC 暴露 /metrics 至少 8 个 metric。

#Phase 3 · 数据面健壮性

目标:闭合 D 主题。NSN 改动:

  • D.1 health 探活进入 metric + 指数退避重连
  • D.2 WSS upgrade draining
  • D.3 多 TCP WSS(N 路)
  • D.4 relay idle timeout
  • D.5 proxy_done 容量提升

前置依赖:Phase 2 metric 框架(D.3 需要 benchmark)。

准入:杀掉一条 NSGW TCP 后 30 秒内重连成功率 > 99%;双 TCP 比单 TCP throughput 提升 ≥ 30%。

#Phase 4 · 入口拆分与性能(可与 Phase 3 并行)

目标:闭合 F + G。NSN 改动:

  • F.1 connector / tunnel-ws 解耦
  • G.1~G.7 按收益排序

准入:子模块各自有 unit test;性能 metric 有 before / after 对比。

#Phase 5 · ACL 进阶 + 出站

目标:闭合 A.1 / A.3 / A.4 / A.5。前置依赖:NSD 端 policy_version、模拟接口。

#Phase 6 · 边缘 / 移动 NSN(企业级)

NSN 形态扩展:

  • 数据中心 NSN:多路径(MPTCP / WG+WSS 并行)、BBR / FEC、跨云互联、硬件加速。
  • 边缘 NSN:无头 provisioning(provisioning key 自动注册)、edge 缓存 / 简单策略本地求值、离线缓冲。
  • 移动 / 嵌入式 NSN:动态 keepalive、断点续连、低功耗唤醒、移动 App 沙箱内运行。

跨形态共同改造:连接级 trace 串联、per-service 时延 / 吞吐 / 错误率直方图、ACL 版本号与一键回滚、设备态势上报对接条件策略、BYO-CA(machinekey 改 X.509 证书,NSN 验证链)。

#4. 数据面演进路线(NSN 配合点)

能力NSN 改造落地级别
D1 · P2P 直连(NAT 穿透)上报 NAT 类型 / 端口探测;打洞成功后绕开 NSGW 直连GA / 企业级
D2 · 多路径(MPTCP / WG+WSS 并行)MultiGatewayManager 扩展为并行选路;packet scheduler 支持 redundant / min-rttGA / 企业级
D3 · BBR / CUBIC 拥塞控制可选WSS 模式下 per-socket setsockopt 切 CCGA
D4 · FEC 前向纠错WsFrame 新增 Fec { group_id, k, n } 类型;丢包敏感应用受益企业级
D5 · Edge NSN无头部署(provisioning key 自动注册);edge 缓存 / 简单策略本地执行企业级
D6 · 移动 / IoT 优化动态 keepalive;会话 ID 持久化断点续连;低功耗 push notificationGA / 企业级
D7 · 跨云统一控制面 + 数据面NSN 跑在各云 VPC 内;GeoDNS 选最近 NSGW;Private Link 对接企业级
D8 · 私有 DNS / 企业 AD 集成NSN 侧需处理 .corp → 内部 IP 解析GA
D9 · BYO-CA(客户自带 CA)machinekey 改为 X.509 证书;NSN 验证链企业级
D10 · 硬件加速AES-NI(已有);可选 SmartNIC / DPU offload;eBPF 路由企业级

#5. 控制面演进(NSN 配合点)

NSD 生产化新增的契约,NSN 端需配合:

新契约方向NSN 角色支撑能力
POST /api/v1/machine/postureNSN → NSD上报设备状态(OS / 磁盘加密 / 2FA)条件策略
SSE policy_versionNSD → NSNNSN 用版本号判断是否需要重载 ACLACL 版本化 + rollback
SSE gateway_drainNSD → NSN通知"网关 X 即将下线",提前迁移流量网关热升级
SSE ca_bundle_updateNSD → NSN证书包热更新Machine PKI
POST /api/v1/eventsNSN → NSD通用事件上报(连接 / 错误 / 安全事件)事件总线

#6. 风险与回滚预案

高风险改造风险回滚预案
单一 ACL Arc并发竞态难调试feature flag acl.use_arcswap = false 保留旧路径
fail-closed启动时延变长,旧部署可能告警配置 acl_required = false 临时关闭
强制 httpsNSD 端未开 https → register 失败auth.allow_plaintext_for_legacy = true 过渡期
密钥加密升级时旧明文密钥被误删永远 read 兼容 + write 加密;旧明文文件备份保留
多 TCP WSSNSGW 不识别 → 所有 WSS 失败frame v2 协商失败回退 v1
启动装配模块化大重构容易引入回归每次 PR < 200 行;失败立刻 revert

#7. 不在路线图内(明确放弃 / 延后)

事项理由
IPv6 全栈支持单独 milestone(>= 15 人日);先把 v4 体系打稳
控制面 GraphQL/gRPC 升级没有需求驱动
WG 协议升级(改 WG2 / Boring)gotatun 已可用,性能改造优先级低于 D / G
完整 chaos engineering 框架投入产出比低
把 ACL 改为 OPA / Cedar表达力够用,引入新依赖维护成本高

#8. 跨团队协调点

某些改造必须协调 NSD / NSGW 端,需要在 spec 评审与发布节奏上同步:

改造NSN 改动NSD / NSGW 配套协调点
强制 httpsreqwest schemeNSD 必须开 8443/https部署文档同步发布
加密通道承载 HTTP APIControlTransport 扩展NSD 实现 transport 适配器跨团队 spec 评审
challenge-response增加 challenge POSTNSD /api/v1/machine/auth/challengeAPI 版本协商
多 TCP WSS多通道 frame 协议NSGW 识别多通道协商WS frame v2 spec
frame source identity新增 source 字段NSGW 填入 NSC 身份frame schema bump
ACL sentinelmerge 算法NSD 标记"empty 是真实意图"vs"空因失败"API 行为约定