Files
qsc20001102 142e5dc7d6
ci / Go checks (ubuntu-latest) (push) Has been cancelled
ci / Go checks (windows-latest) (push) Has been cancelled
初版功能完成
2026-08-29 13:12:17 +08:00

6.7 KiB
Raw Permalink Blame History

检查清单

对应规格书第 18–20 章。每项检查须在对应实现完成后逐条核验;任何一项不通过都视为偏离规格。

[x] 表示代码/静态策略/自动化验证已经完成;Gate 与 T01–T18 仍只接受真实主机证据,保持 [ ] 不代表自动化测试失败。

关键技术 Gate

  • Gate Awireguard-go 能通过 MuxTun 使用唯一 Wintun,正常 Overlay 通信
  • Gate BRemote Packet 被 MuxTun 截获后,普通 UDP Socket 的外层 Overlay Packet 能通过同一 Wintun 再进入 WireGuard,不死锁、不无限循环
  • Gate CSite 收到 Session Raw IPv4 后能注入 gVisor netstackTCP/UDP Forwarder 能建立 host socket 到现场目标并完成双向数据搬运
  • Gate DgVisor netstack 能把返回数据重新构造成 Engineer 看到的原始目标 IP 流,并通过 Session UDP 反向封装回 EngineerPing Relay 能正确返回 ICMP Echo Reply

架构不可变约束(规格书第 0/20 章)

  • 每个 Engineer/Site 进程只创建一块名为 RemLink 的 Wintun;无第二块 Subnet Adapter、无 Transit CIDR
  • Windows WireGuard 使用嵌入进程的 wireguard-go;无 WireGuardNT 独立接口
  • wireguard-go 必须通过 MuxTun 包装唯一 Wintun
  • v1 不调用 WinNAT、不启用 Windows IP Forwarding,也不修改第三方 NAT
  • Server 使用 Linux Kernel WireGuardGo Server 不逐包中转 Overlay
  • Server Peer AllowedIPs 只放 Node Overlay /32;绝不把现场 Remote CIDR 加进 Server WireGuard AllowedIPs
  • 所有 Engineer/Site 的 WireGuard 公网 Peer 都只有 Server;无 P2P 代码
  • 无二层代码(ARP/以太网帧/TAP/Bridge/DCP/LLDP
  • PacketMux 只做 IPv4 CIDR 分类,不解析 TCP/UDP/ICMP 或应用层协议
  • Remote Packet 外层传输使用普通 UDP Socket over Overlay;未手写外层 IP/UDP 协议栈
  • Remote CIDR 由 Engineer Session 动态下发;Site 配置文件不保存现场网段
  • 不同 Site 的 Remote CIDR 可完全相同(实现未引入人为限制)
  • 一个 Engineer 同时只能有一个 Site Session
  • Site Subnet Gateway 复用 gVisor netstack(固定 commit),无自研 TCP/IP 栈
  • 无 S7Proxy/ModbusProxy/HTTPProxy/RDPProxy 等应用协议专用模块;PingRelay 是唯一 ICMP 模块
  • 所有 Windows 网络修改集中在 platform/windowsGUI/业务层无散落 PowerShell
  • 所有依赖固定版本(Go module/NPM/Wintun DLL/gVisor commit);生产构建无 latest 浮动依赖
  • 先完成 Phase 17 网络 Gate,再投入完整 GUI
  • 敏感字段(WG PrivateKey/NodeToken)使用 DPAPI 保护落盘,无明文 YAML 私钥
  • Engineer/Site YAML 可保存首次注册 Join TokenCLI/环境变量可覆盖 YAML
  • Wintun DLL go:embed 打入 EXEEngineer/Site 各自释放到本端 EXE 目录,不使用共享 ProgramData
  • Engineer、Site、Server 使用三个独立目录和 ZIP,互不包含其他端可执行文件
  • THIRD_PARTY_NOTICES 随发布包提供(WireGuard/Wintun/gVisor/参考代码许可证)
  • 绝不自动关闭 Windows Firewall;防火墙规则仅创建带 RemLink 前缀、可识别且可回滚的规则
  • v1 无 0.0.0.0/0 Exit Node 模式

验收测试(规格书第 19 章)

  • T01Engineer 与 Site 都在线,仅有一个 RemLink 虚拟网卡
  • T02Engineer ping Site Overlay IP,通过 Server 中转成功
  • T03Engineer 输入 192.168.13.0/24,本机无冲突,Session 可建立
  • T04Engineer 本地本身是 192.168.13.0/24,建立前拒绝 CIDR_LOCAL_CONFLICT
  • T05Site 对 192.168.13.0/24 无路由,拒绝 SITE_NO_ROUTE
  • T06Site 同时运行 Hyper-V/Docker/已有 WinNATRemote Session 仍可正常建立;不读取/修改第三方 NAT
  • T07Engineer ping 现场 PLCICMP Echo Relay 成功;延迟可比直接链路略高
  • T08TCP 102 / 502 / HTTP / RDP 通过通用 TCP Relay 正常连接;无应用协议专用代码
  • T09:普通单播 UDP 流量通过 UDP flow relay 往返成功;idle flow 可回收
  • T10Session 同时下发 192.168.13.0/24 与 192.168.21.0/24,两网段均可访问
  • T11Engineer-A→Site-A、Engineer-B→Site-B;两 Site 都是 192.168.13.0/24,同时访问成功互不串流
  • T12:同 Site 两个 Engineer 访问不同/相同目标设备,SessionID + Overlay IP 隔离正确
  • T13Engineer 尝试再连接第二个 Site,拒绝 ENGINEER_SESSION_EXISTS
  • T14Engineer Wi-Fi 切手机热点,WireGuard/Control 自动恢复
  • T15Server 重启,Node 自动重连;旧 Session CLOSED,用户可重新连接
  • T16:Engineer 崩溃后重启,清理残留 Remote Route
  • T17Server 修改某 Node Overlay IPNode 自动 Re-bootstrap 后使用新 IP
  • T18Server 修改整个 Overlay CIDR,所有 Session 关闭、Nodes 重新分配/配置;Site 无需重建系统 NAT

功能完整性检查

  • Session 状态机七状态(CREATING/PREPARING_SITE/READY/ACTIVE/STOPPING/CLOSED/FAILED)按规格流转
  • SessionHeader 20 字节头(RMLK/Version/Type/Flags/SessionID/PayloadLen/Reserved)双向对称封装
  • Session 双向收包校验完整(SessionID/外层源/内层源/内层目 CIDR/IPv4 Total Length
  • Session UDP Listener 仅绑定 Overlay 地址,不监听公网或 0.0.0.0
  • Bootstrap API 三接口 + Admin Web API 八接口按规格实现
  • Control WebSocket 13 种消息按规格实现
  • 14 个错误码全量落地(以权威规格实际枚举为准)
  • SQLite 六张表 + migration 工具化(无散落 CREATE TABLE
  • Overlay CIDR 修改七步流程完整实现(含 REBOOTSTRAP_REQUIRED
  • Heartbeat 参数按默认值实现(5s 间隔;ONLINE ≤15s / UNSTABLE 1530s / OFFLINE >30s;退避 1/2/5/10/30s
  • Flow limits 默认值(TCP 2048 / UDP 4096 / UDP idle 60s)且可配置
  • Site PREPARE 路由检查覆盖 DIRECT/ROUTED/DEFAULT_ONLY/NO_ROUTE/OVERLAY_CONFLICT
  • Engineer 本地冲突检查使用 net/netip prefix overlap(非字符串比较)
  • Session 统计每 5 秒上报;Upload/Download 按 Engineer 视角定义
  • 11 个日志模块分类正确;高频 packet 日志默认关闭、DEBUG 禁止逐包打印 Payload
  • Web UI 五页面(Dashboard/Nodes/Sessions/Network/Logs)功能齐备
  • Engineer GUI 功能齐备(Site 列表/多 CIDR 输入/冲突预检/Session 详情/断开)
  • 端口占用符合基线:51820/udp(公网 WG)、8080/tcpWeb+Bootstrap)、7001/tcp(仅 Overlay Control)、6200/udp(仅 Overlay Session
  • Docker Compose 只授予 NET_ADMIN(非 privileged);启动 Preflight 检查内核 WireGuard
  • MuxTun Close 幂等且使全部 goroutine 退出