IPSec/IKEv2 把密钥协商、变换层与策略库拆成多层;OpenVPN
把整套 TLS 状态机放进用户态。WireGuard
的回答是另一条路:故意打破「正确分层」,用一张
cryptokey routing
表、一套固定密码学原语、一个约数千行的内核虚拟网卡,把「认证加密隧道」做成看起来无状态的
wg0。
本系列按哲学 → 协议 → 代码 → 使用 → 深度争论组织。已有单篇 WireGuard 内部实现 与 VPN 工程对比 会被交叉引用,而不是重复粘贴。
系列状态:正文 5 篇 + 索引(2026-07-19)。 源码锚定 Linux 6.6 LTS
drivers/net/wireguard/;工具实测wireguard-tools v1.0.20260223、内核6.6.87.2-microsoft-standard-WSL2。
适合谁看
- 网络 / 安全工程师:要讲清 WireGuard 相对 IPSec 的边界,而不是只会贴配置。
- 内核 / 平台工程师:要顺着
wg_xmit→ AllowedIPs → encrypt worker 读 Linux 实现。 - 架构师:要判断 site-to-site、远程接入、ZTNA 数据面该不该用 WireGuard。
- 对协议设计感兴趣的读者:要看「拒绝算法协商」如何换来可审计性,以及形式化证明卡在哪里。
这个领域最值得关注的 5 个问题
1. WireGuard「简单」到底拒绝了什么?代价是什么?
回答在:01(哲学)、05(深度)
NDSS 2017 论文明确承认:IPSec 的分层在学术上更「正确」,WireGuard 从 layering violation 出发,再用工程与密码学手段补洞。简单不是少写功能,而是系统性拒绝证书体系、cipher suite negotiation、SPD/SAD 分离。
2. Noise IKpsk2 如何在 1.5 RTT 内同时完成认证、前向保密与身份隐藏?
回答在:02(协议)、已有 内部实现文
四次 Curve25519
DH(es/ss/ee/se)各贡献不同属性;响应方必须等发起方第一条
transport
才能安全发数据——这是协议安全边界,不是实现疏忽。
3. 内核里路由、加密、保序如何拆到多核又不乱序?
回答在:03(代码)、已有内部实现文
发送路径用 AllowedIPs trie 选 peer;加解密进 parallel worker;per-peer 串行保证 UDP 外层可乱序、内层会话有序。
4. 生产里 AllowedIPs、路由表、NAT、漫游哪个最容易配错?
回答在:04(运维)
cryptokey routing 与宿主机 FIB 是两套表。能握手但 ping 不通、能解密但回不了包,几乎都落在这两张表与 endpoint 学习不同步。
5. 「无算法协商」在后量子与形式化证明面前站不站得住?
回答在:05(深度)
Dowling & Paterson(ACNS 2018)指出:第一条 transport 作为 key confirmation,使标准 session-key indistinguishability 证明难以模块化;PSK 是量子威胁的权宜之计,不是 PQ 终局。
篇目依赖关系与推荐阅读路径
flowchart TD
A["01 Design Philosophy"] --> B["02 Protocol: Noise IKpsk2"]
B --> C["03 Kernel Code Path"]
A --> D["04 Ops Practice"]
B --> D
C --> E["05 Deep Tradeoffs"]
B --> E
D --> E
X["network/89 Internals"] -.-> C
Y["network/75 VPN Compare"] -.-> A
只想理解「为什么是 WireGuard」→ 3 篇
01 → 02 → 05(可选补读 VPN 对比)
要落地部署与排障 → 3 篇
01 → 04 → VPN 对比 选型节
要读内核源码 → 3 篇
02 → 03 → 内部实现
完整路线 → 全部 5 篇 + 两篇网络工程交叉文
01 → 02 → 03 → 04 → 05,并对照 75 / 89
目录
第一部分:立场与协议
- 系列索引(本文)
- 设计哲学:故意的分层破坏与密码学观点
- 看点:NDSS 2017 对 IPSec「正确分层」的批评、cryptokey routing 作为安全隧道基本原理、OpenSSH 式带外密钥分发、「沉默是美德」、无算法协商的显式立场。
- 协议原理:Noise
IKpsk2、四次 DH 与 Cookie
- 看点:官方 protocol 页与论文对齐的握手消息布局、1.5 RTT key confirmation、MAC1/MAC2 cookie 相对 DTLS/IKEv2 的改进、定时器与 rekey 常量。
第二部分:实现与使用
- 内核代码路径:从
wg_xmit到加解密 worker- 看点:Linux 6.6 源码行号、AllowedIPs
trie、
messages.h常量、netlink 配置面、与第 89 篇的分工。
- 看点:Linux 6.6 源码行号、AllowedIPs
trie、
- 使用与运维:netns
实测、AllowedIPs 与故障模式
- 看点:本机 netns 双端 ping
实测、
wg/wg-quick工作流、漫游与 keepalive、MTU、不适用场景。
- 看点:本机 netns 双端 ping
实测、
第三部分:争论与边界
- 深度探讨:形式化证明、密码敏捷性与后量子
- 看点:Dowling–Paterson 证明障碍与 Donenfeld 回应、netdev 上的 agility 争论、PSK 的威胁模型、与 ZTNA/零信任数据面的关系、开放问题。
每篇一句话价值
| 篇 | 价值点 |
|---|---|
| 01 | 讲清 WireGuard 不是「简化版 IPSec」,而是另一套安全隧道公理。 |
| 02 | 把 IKpsk2 四次 DH 与 1.5 RTT 钉到可核对的消息字段。 |
| 03 | 用 Linux 6.6 路径把协议映射到具体函数与队列。 |
| 04 | 用真实 netns 实验把配置错误变成可复现现象。 |
| 05 | 把「简单」放进证明、敏捷性与量子威胁的争议里检验。 |
与已有文章的关系
- 【网络工程】WireGuard 内部实现 —— 单篇全景(cryptokey routing + 握手 + 数据路径)。本系列 02/03 做专题加深,不替代该文。
- 【网络工程】VPN 技术工程对比 —— IPSec / WireGuard / OpenVPN 选型。本系列默认读者已读或会回头对照。
- 安全信道:Noise 与 Signal —— Noise 记号与模式谱系;本系列 02 聚焦 WireGuard 选定的 IKpsk2。
- 零信任 · SDP/ZTNA —— 把 WireGuard 当数据面组件时的架构位置;本系列 05 讨论边界。
参考主来源(系列共用)
- Donenfeld, J. A. WireGuard: Next Generation Kernel Network Tunnel. NDSS 2017.
- WireGuard Protocol & Cryptography.
https://www.wireguard.com/protocol/ - Noise Protocol Framework (Trevor Perrin).
- Dowling, B. & Paterson, K. G. A Cryptographic Analysis of the WireGuard Protocol. ACNS 2018 / ePrint 2018/080.
- Linux
drivers/net/wireguard/(本系列默认 Linux 6.6)。
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【网络工程】WireGuard 内部实现:Cryptokey Routing、Noise IK 握手与内核数据路径
WireGuard 用不到 4000 行内核代码替代了 IPSec/IKE 数十万行的协议栈——这不是少写功能,而是用固定密码学原语、固定握手模式和 cryptokey routing 这三个设计决定,换掉了证书体系、协商机和 SPD/SAD 分离。本文钻进源码和协议握手过程,逐层拆解 cryptokey routing 的双向执行、Noise IKpsk2 的 1.5 RTT 握手(含四次 ECDH 的安全属性贡献)、内核多核队列架构、timer 状态机、cookie DoS 防御和三密钥对轮换。
【WireGuard】设计哲学:故意的分层破坏与密码学观点
WireGuard 不是把 IPSec 写短一点。NDSS 2017 论文把「正确分层」当成复杂度的来源,用 cryptokey routing、固定原语与带外密钥分发换可审计实现。本文钉住这些设计决定及其边界。
【WireGuard】协议原理:Noise IKpsk2、四次 DH 与 Cookie
对齐 wireguard.com/protocol 与 NDSS 2017:IKpsk2 消息布局、es/ss/ee/se 四次 DH 的安全贡献、1.5 RTT key confirmation、MAC1/MAC2 cookie,以及 messages.h 中的 rekey 常量。
【WireGuard】深度探讨:形式化证明、密码敏捷性与后量子
Dowling–Paterson 对 1.5 RTT confirmation 的证明障碍、Donenfeld 的回应、netdev 上「无算法协商」争论、PSK 量子权宜之计,以及 WireGuard 作为 ZTNA 数据面的边界与开放问题。