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(),从而提升了稳定性和安全性。
WireGuard 的加密基础
WireGuard 在各平台上保持统一的加密栈。它使用以下算法:
- ChaCha20 — 恒定时间执行的流密码;
- Poly1305 — 用于消息认证的 MAC 算法;
- Curve25519 — 用于 Diffie–Hellman 协议的椭圆曲线;
- BLAKE2s — 符合 RFC 7693 的哈希函数。
这些组件经过精心选择:即使没有硬件加速也能提供高速度,抵抗时序攻击,并经独立验证。与 IPsec 或 OpenVPN 不同,WireGuard 使用最小的原语集,缩小了攻击面并简化了审计。
连接建立与漫游
WireGuard 中建立安全通道的过程类似于 SSH 中的密钥交换。每个接口都有自己的私钥,受信任的对端通过公钥识别。会话密钥使用 Noise Protocol Framework 中的 Noise_IK 机制协商。
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
暂无评论。