Skip to content

完整实现 WireGuard 客户端、服务端与正式入站#38

Draft
MiChongs wants to merge 1 commit into
mainfrom
codex/protocol-wireguard-full
Draft

完整实现 WireGuard 客户端、服务端与正式入站#38
MiChongs wants to merge 1 commit into
mainfrom
codex/protocol-wireguard-full

Conversation

@MiChongs

Copy link
Copy Markdown
Owner

背景

项目原有 WireGuard 路径缺少完整的用户态协议栈、正式服务端入站及全字段配置注册,无法覆盖真实的客户端与服务端双向使用场景。本变更以标准 WireGuard 第一版协议为目标,补齐真实密码学、数据面、配置校验、运行时注册和互操作验证,不使用占位实现或私有简化帧格式。

实现内容

客户端

  • 使用 BoringTun 实现标准 NoiseIK 握手、密钥轮换、消息计数器、重放保护、预共享密钥、保留字节和持久保活。
  • 实现用户态 TCP、UDP、IPv4、IPv6 数据面,不依赖系统网卡。
  • 支持多对等端、允许网段最长前缀选路、入站源地址授权、端点域名解析和连接超时。
  • 支持隧道内域名解析、响应生存期缓存、截断响应转 TCP、双栈地址选择。
  • 支持 IPv4 与 IPv6 分片和有界重组,拒绝重叠分片并执行超时回收。
  • 为 TCP、UDP、包队列、工作线程、缓存和会话数提供明确上限与关闭取消语义。

服务端与正式入站

  • 实现真实 UDP WireGuard 服务端,支持多对等端握手识别、握手速率限制、数据索引路由、端点漫游、允许网段校验和最长前缀回包选路。
  • 新增 listen.wireguard 正式入站,将认证后的裸 IP 包接入独立用户态网络栈,再交给统一运行时路由。
  • 隧道内 TCP、UDP、IPv4、IPv6 均经过节点选择、规则、域名解析和连接跟踪。
  • 注册监听端口宿主资源声明,启动前参与端口冲突检查。
  • 正常关闭时显式停止网络栈任务和服务端;多个监听器中任一绑定失败时,显式回滚已启动的 WireGuard、流量接管、组网监督、订阅管理和运行时资源。
  • 修正网络栈 TCP 接受路径中本地地址与远端地址颠倒的问题,并以真实端到端测试覆盖。

配置与校验

  • 完整注册客户端私钥、本地地址、对等端、公钥、预共享密钥、允许网段、保留字节、持久保活、域名解析、缓冲区、会话上限、包队列、工作线程、连接超时、UDP 超时和网络类型。
  • 完整注册服务端监听地址、端口、私钥、对等端、最大传输单元、包队列和握手速率限制。
  • 支持连字符、下划线及已文档化的驼峰别名;未知字段直接报错,不静默忽略。
  • 校验密钥长度与全零值、地址族、端口、最大传输单元、队列范围、唯一公钥、重复路由、监听冲突及各项资源边界。
  • 更新功能矩阵和 WireGuard 专项配置文档,补充客户端、服务端完整示例、字段默认值、约束和运行语义。

兼容性与互操作

  • 使用固定版本的官方 wireguard-go 作为真实 UDP 对等端,完成标准握手、加密数据传输和明文 IP 往返。
  • 客户端与服务端均使用标准 WireGuard 数据报格式,可与标准实现互操作。
  • 明确拒绝当前数据面不支持的系统网卡模式、拨号代理和 AmneziaWG 扩展字段,避免无提示降级。

验证结果

  • cargo fmt --all -- --check:通过。
  • git diff --check:通过。
  • cargo check --workspace --all-targets:通过。
  • cargo test -p core-config:七十三项通过,零失败。
  • cargo test -p core-capture:三百一十四项通过,零失败。
  • cargo test -p core-outbound wireguard -- --nocapture:WireGuard 相关测试全部通过。
  • cargo test -p core-outbound --test wireguard_go_interop -- --ignored --nocapture:官方实现互操作测试通过。
  • 真实端到端链路已覆盖:WireGuard 客户端经真实加密隧道进入服务端,再经用户态网络栈与统一运行时访问本地 TCP 和 UDP 回显服务。

影响与边界

本变更只引入标准 WireGuard 第一版用户态协议能力,不创建系统网卡,也不修改系统路由。系统网卡模式、通过其他代理拨号以及 AmneziaWG 扩展仍明确不在本次范围内,配置层会拒绝相关字段。所有新增资源均具有边界检查、取消和显式清理路径。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant