返回首页

Windows 版 WireGuard 1.0:内核驱动和性能

Windows 版 WireGuard 1.0 和 WireGuardNT 1.0 发布的分析。描述了架构变化、迁移到内核、密码学基础和漫游支持。面向技术受众的材料。

Windows 版 WireGuard 1.0 发布:内核中发生了什么变化?
Advertisement 728x90

Windows 版 WireGuard 1.0:内核驱动发布与性能提升

Windows 和 WireGuardNT 1.0 驱动程序的首个稳定版本已经发布,直接在 Windows 10 和 11 的内核中实现了 VPN 协议。这标志着从用户模式向完全集成 NDIS 网络栈的转变,通过消除上下文切换和冗余数据包复制,带来了显著的性能提升。

WireGuardNT 的架构变更

此前,Windows 解决方案基于 wireguard-go——一个用户空间实现,使用 Wintun 驱动与内核交互。尽管可靠,这种方法不可避免地带来了开销:每个网络数据包都要跨越用户模式和特权模式边界,减慢了流量处理速度,尤其在高负载下。

WireGuardNT 通过将所有协议逻辑置于内核内部,消除了这一缺点。该驱动使用 NDIS(Network Driver Interface Specification)编写,完全符合 Windows 架构要求。它支持三大主流平台:AMD64、x86 和 ARM64。关键组件,如 MTU 处理和适配器状态管理,现在通过官方内核 API 实现,包括 NdisWdfGetAdapterContextFromAdapterHandle(),从而提升了稳定性和安全性。

Google AdInline article slot

WireGuard 的加密基础

WireGuard 在各平台上保持统一的加密栈。它使用以下算法:

  • ChaCha20 — 恒定时间执行的流密码;
  • Poly1305 — 用于消息认证的 MAC 算法;
  • Curve25519 — 用于 Diffie–Hellman 协议的椭圆曲线;
  • BLAKE2s — 符合 RFC 7693 的哈希函数。

这些组件经过精心选择:即使没有硬件加速也能提供高速度,抵抗时序攻击,并经独立验证。与 IPsec 或 OpenVPN 不同,WireGuard 使用最小的原语集,缩小了攻击面并简化了审计。

连接建立与漫游

WireGuard 中建立安全通道的过程类似于 SSH 中的密钥交换。每个接口都有自己的私钥,受信任的对端通过公钥识别。会话密钥使用 Noise Protocol Framework 中的 Noise_IK 机制协商。

Google AdInline article slot

WireGuard 的一个关键特性是无缝漫游支持。如果客户端更改 IP 地址(例如,从 Wi-Fi 切换到移动数据),服务器会根据最新接收的数据包自动更新客户端位置信息。连接保持不间断,这对移动设备和远程工作者至关重要。

1.0 版本的技术改进

1.0 版本是多年优化的成果。主要变更包括:

  • 不再在内核结构的 Reserved 字段中存储驱动状态——现在使用标准的适配器上下文机制。
  • 通过系统调用拦截实现动态 MTU 跟踪,防止数据包分片。
  • 代码库切换到 C23 标准,提升可移植性和与现代编译器的兼容性。
  • 完整支持 ARM64,适用于基于 Qualcomm 等 SoC 的新一代 Windows 设备。

关键要点

  • WireGuardNT 完全运行在 Windows 内核中,与 wireguard-go 相比性能大幅提升。
  • 加密栈保持不变:ChaCha20、Poly1305、Curve25519、BLAKE2s。
  • 开箱即用支持无缝漫游,无连接中断。
  • 1.0 版本不仅是版本号,更是架构稳定的完成。
  • 许可分离:内核采用 GPLv2,客户端软件采用 MIT。

— Editorial Team

Google AdInline article slot
Advertisement 728x90

继续阅读