NSD —— NSIO 生态里唯一有状态的强一致组件。它是身份签发者、Access Grant 编译者、配置投影分发者与管理面,但不承载任何业务流量。一切”谁是谁、谁能访问什么、网关拓扑长什么样”的知识由 NSD 集中维护,再以签名投影单向推送到 NS 与 NSGW。
- 形态:单一静态 Rust 二进制(axum 0.8 + diesel-async)内嵌 React 19 管理台,前置 Caddy 终结 TLS;可选
nsd-noise-proxy(TCP 4001)与 nsd-quic-proxy(UDP 4002)sidecar 提供 Noise IK / QUIC 控制传输。默认单实例 + SQLite;也可多实例 active-active(PostgreSQL + Redis 跨实例共享)。
- 入站(机器侧):
GET /api/v1/info(WebPKI 信任发现)、POST /api/v1/control(Envelope v1 分发器:注册、心跳、上报、快照)、legacy HTTP rail(/machine/register /machine/auth /machine/heartbeat /services/report /config/stream /device/code /device/token)。
- 出站(投影):配置流按订阅者种类与已协商能力推送
ControlMessage,逐事件 Ed25519 签名;网关另可拉取 served realm 的 gateway.realm_config_snapshot。
- 管理面:Admin API + OpenAPI、内嵌管理台、成员门户、
nsdctl、API token、Go / Python / TypeScript SDK、Terraform provider、Webhook、审计;按 Network 的 Free / Standard / Pro 套餐与容量;SaaS 形态下另有 Platform API 供后台运营门户调用。
- 核心不变量:NSD 从不接收节点身份或 WG 私钥;
WgConfig 没有 private_key;业务表按 realm 隔离;事件经 Ed25519 签名;JWT 拒绝 alg: none;ACL 启动时 fail-closed;三种传输共用一份事件解析器。NSD 自有的签名密钥与集中管理的证书密钥与节点私钥相互独立。
| 维度 | 现状(as-built) | 进行中 / 规划 |
|---|
| 部署与持久化 | 默认单实例 + SQLite(bundled,外键开启);多实例时 PostgreSQL(postgres 编译特性)+ Redis 共享配置推送、nonce、限流、防重放与二次验证;时间戳迁移;每表 realm_id;VACUUM INTO 备份 | PLAN-021 收尾 |
| 领域模型 | Account / Organization / Network(Space=realm) / Device / Node / Service / Subnet / Gateway;SaaS orgs + realms | 联邦只读视图(Phase 3) |
| 机器登记 | 设备授权流 + Account 批准(绑定精确设备公钥);device-approve 作用域令牌可自动批准;无头引导命令创建首个平台 key 与批准令牌;网关用平台 enrollment token | — |
| 人类身份 | 本地账号 + OIDC / SSO(Deployment 级 provider);组织邀请;成员门户 | SAML / SCIM |
| 控制传输 | SSE + Noise IK + QUIC;control_trust.v1 WebPKI 发现;Envelope v1 CBOR | — |
| 授权 | Access Grant(主体集 × 资源集);资源族 Service / Node / Subnet / 公网应用 / Gateway Egress / Internet Exit;系统同 Account Grant;personal_auto / policy_required;ACL 编译为 acl_config | PLAN-123 统一 Grant 收尾 |
| 配置投影 | 能力门控的 additive 投影(NodeL3、Subnet*、Short DNS v2、pair transport、Exit 候选);policy_version | relay 配对投影分片与增量(PLAN-125) |
| 网关编排 | 公网网关池 + 健康发布;per-realm 配置隔离;中继 RTT 测量与按 realm 开关的”可达优先”放置;Exit 候选 / 选择 / 撤销;Egress 资源;gateway drain;计量接收与按网关新鲜度 | relay placement(PLAN-124)与 pair 投影规模(PLAN-125);Egress realm-native(PLAN-054) |
| 公网入口 | 域名声明、HTTP 路由、L4 端口、源 IP 准入、集中证书签发(DNS-01 默认,可选 HTTP-01)与分发、可轮换的客户端 CA 与 CRL、Edge Auth(OIDC / API key / Basic / 签名 URL / mTLS)、匿名公网应用 | 公网 mTLS 的 NSGW 集成(PLAN-036 阻塞) |
| 地址计划 | CGNAT 100.64/10 池、全局唯一隧道地址、持久租约、延迟重用 | — |
| 命名 | compact naming + Short DNS v2 authority / projection | — |
| 管理台 | 登录、总览、Quick Start、Devices、Nodes(含子网路由)、Services、Access Grants / 策略编辑器、Groups、Users、SSO、Edge Auth、Gateways、Topology、Usage、Plans 与订单、Developer → API access、Audit、Webhooks、Settings、成员 Portal;en / zh;手机端布局 | 成员门户最小数据范围(PLAN-058) |
| 套餐与容量 | Network 级 Free / Standard / Pro;成员、节点、Service、用户组、保存的 ACL 与审计天数在写事务中检查;不可变目录与订单;模拟结算开关(默认关) | 真实支付与网关资源结账(PLAN-178 / 187) |
| 可观测 | tracing + OTLP + Prometheus;审计事件;威胁模型与 fuzz 目标 | 审计导出(S3 / SIEM) |
| 职责 | 现状 |
|---|
| ① 注册表(Registry) | Account / Organization / Network / Device / Node / Service / Subnet / Gateway 权威;Device 由机器公钥派生;Node 是 Network 范围的 (Network, Device, Account) Profile |
| ② 认证(Auth) | RS256 JWT(keys/jwt_signing.pem)、JWKS、机器 token 30 min、token_refresh;设备授权流 + Account 批准;平台 enrollment token(网关) |
| ③ 策略(Policy) | Access Grant 归一化模型 → acl_config(bindings / groups / hosts / rules)+ 各类投影(L3、子网、Exit、Egress、公网入口) |
| ④ 分发(Distribute) | 三传输 + Envelope;按订阅者种类与能力门控分包;逐事件签名;realm 快照 |
| ⑤ 网关编排 | 公网池与健康、realm 服务集合、relay 配对投影与 RTT 放置、Exit / Egress、公网入口投影、drain、计量 |
| ⑥ 管理面 | Admin API / OpenAPI / 管理台 / 成员门户 / nsdctl / SDK / Terraform provider / Webhook / API token / 套餐与容量 / 审计 / Platform API |
- 第一次接触 NSD → architecture §1–§2
- 要接 NS / NSGW 契约 → architecture §3
- 要规划演进 → roadmap.md