VPN 不是在某一年由某个人突然发明的。它形成于 1990 年代的三股需求:企业想用公共互联网替代昂贵专线,移动员工需要安全进入公司内网,互联网本身则缺少默认加密。三十年的演进,本质上是在回答三个问题:隧道承载哪一层、双方如何安全地建立密钥、复杂网络中怎样稳定部署。
VPN 之前:私有网络依赖物理隔离
早期企业广域网通常租用运营商专线。专线的“私有”主要来自物理或运营商层面的隔离,不代表数据天然经过端到端加密。它可靠,但每增加一个分支机构都要新增线路,成本和部署周期都很高。
互联网普及后,工程师开始尝试在共享 IP 网络上构造逻辑专线:先把原始数据包封装进另一个数据包,再根据需要增加认证、完整性校验和加密。这就是“隧道”。VPN 的经济价值不是凭空创造安全,而是让公共基础设施承担原本由专线承担的传输任务。
1993—1995:先给 IP 本身增加安全
1993 年出现的实验性协议 SwIPe 已经展示了在 IP 层认证并加密数据包的思路。IETF 随后推进 IP Security,1995 年发布第一批 IPsec 架构文档,1998 年形成较完整的 RFC 2401 体系,2005 年又由 RFC 4301 等文档更新。
IPsec 的关键选择是工作在网络层。应用不必知道隧道存在,TCP、UDP 和其他 IP 流量都能得到保护。现代 IPsec 主要由两部分协作:
- IKE/IKEv2:认证对端、协商算法、产生和更新会话密钥;
- ESP:封装实际 IP 数据,提供机密性、完整性和抗重放保护。
IPsec 还区分两种模式。传输模式通常保留原 IP 头,只保护上层载荷;隧道模式把整个原始 IP 包作为载荷,再套一层新 IP 头,适合网关到网关或客户端到网关的 VPN。
这种通用性也带来了复杂度:算法组合、Security Association、策略数据库、NAT 穿越和厂商互操作都要处理。IPsec 最终成为企业站点互联的重要基础,却很难成为普通用户眼中的“一键连接”产品。
1996—1999:PPTP 把拨号体验搬到互联网
1996 年前后,微软参与的厂商联盟推出 PPTP。它将当时拨号网络常用的 PPP 会话放进 GRE 隧道,并用独立的 TCP 控制连接管理会话。RFC 2637 在 1999 年记录了这一方案,但它是信息性文档,并非 IETF 标准轨协议。
PPTP 的贡献主要是可部署性:Windows 内置客户端,用户保留熟悉的账号密码模式,企业也能沿用拨号接入基础设施。它常被称为“第一个广泛使用的 VPN”,但 PPTP 本身只定义隧道,并不自动等于安全;实际安全性依赖 PPP 认证和 MPPE 加密。后来对 MS-CHAPv2 等组合的分析表明,它们已无法满足现代安全要求。
同一时期还有两条支线:
- Cisco 的 L2F 关注把 PPP 会话从接入设备转送到企业网关;
- L2TP 综合 PPTP 与 L2F 的思路,在 RFC 2661 中标准化,但自身不提供加密,实际部署通常与 IPsec 组合为 L2TP/IPsec。
这代协议反映了拨号时代的思维:先搬运二层会话,再附加安全。后来 VPN 更倾向直接处理 IP 包,减少不必要的层级。
2001 以后:TLS 生态催生 OpenVPN
OpenVPN 在 2001 年启动,走了与 IPsec 不同的工程路线:运行在用户态,利用成熟的 TLS/OpenSSL 体系完成身份认证和密钥建立,再通过 TUN/TAP 虚拟网卡承载三层 IP 包或二层以太网帧。
这种结构带来几个现实优势:
- 不依赖操作系统内核里的 IPsec 实现,跨平台迭代更容易;
- 能运行在 UDP 或 TCP 上,穿过企业防火墙更灵活;
- 可使用证书、账号密码或预共享密钥,适配不同管理体系;
- 配置和插件能力强,容易与现有身份系统集成。
代价也很明确。用户态和多层封装增加了数据复制与上下文切换;配置自由度很高,错误组合也更多。在 TCP 模式下,如果隧道内又承载 TCP,丢包时内外两层重传机制可能互相干扰,这就是常说的 TCP-over-TCP 问题。
OpenVPN 的历史意义不是“把 VPN 伪装成 HTTPS”这么简单,而是证明 VPN 可以借用应用层安全生态,不必把所有能力都塞进网络层标准。它至今仍是兼容性和可配置性很强的方案。
IKEv2:让 IPsec 更适合移动网络
早期 IKE 协商流程复杂。2005 年出现、后来由 RFC 7296 更新的 IKEv2,压缩了核心交换流程,统一错误处理,并更好地支持重协商与移动场景。
移动设备最常见的问题不是密码算法速度,而是网络路径不断变化:手机从 Wi-Fi 切到 5G,源 IP 和 NAT 映射随之改变。IKEv2 配合 MOBIKE 可以在不重建整个安全上下文的情况下更新路径,因此成为系统原生 VPN 的常见选择。
这一步表明,VPN 的性能不只由加密吞吐量决定。握手往返次数、断线恢复、NAT 保活和地址迁移,往往更影响用户实际感受。
2015—2020:WireGuard 重新缩小协议
WireGuard 选择了“少即是多”:只承载三层 IP 包,只使用 UDP,固定一套现代密码构件,不提供庞大的算法协商菜单。其技术论文描述了几项核心设计:
- 使用基于 NoiseIK 的握手建立会话密钥,并提供前向保密;
- 使用 Curve25519、ChaCha20-Poly1305、BLAKE2s 和 HKDF 等固定构件;
- 把对端公钥与允许的隧道 IP 绑定,形成 Cryptokey Routing;
- 未通过认证的数据包不触发昂贵状态分配,降低扫描和拒绝服务风险;
- Linux 实现以较小代码规模集成为虚拟网络接口,2020 年进入 Linux 5.6 主线。
固定算法减少了降级攻击和错误协商的空间,也让实现更容易审计。但它不是万能答案:公钥分发、用户身份、地址分配、审计和高可用仍需上层控制系统完成;原生 WireGuard 的流量形态也没有为抗审查伪装而设计。
三十年里真正改变了什么
| 阶段 | 主要目标 | 代表技术 | 核心取舍 |
|---|---|---|---|
| 专线时代 | 物理或运营商隔离 | 租用专线、Frame Relay | 可靠但昂贵,扩展慢 |
| 早期隧道 | 把拨号/二层会话搬上 IP | PPTP、L2F、L2TP | 易接入,安全常依赖外部组合 |
| 网络层安全 | 对任意 IP 流量透明保护 | IPsec/IKE | 通用、标准化,但策略复杂 |
| TLS 型 VPN | 跨平台与防火墙适配 | OpenVPN、SSL VPN | 灵活,用户态开销和配置面较大 |
| 现代精简隧道 | 降低协议与实现复杂度 | WireGuard | 高效、可审计,但控制面需另建 |
VPN 的演进不是旧协议被新协议线性替代。IPsec 仍适合标准化的企业网关互联,OpenVPN 仍擅长兼容复杂环境,WireGuard 则适合高效的数据平面。协议是否“现代”,不只看发布时间,而要看其安全假设、维护状态和是否适合当前网络。
从历史得到的三个判断
第一,封装与加密是两件事。PPTP、L2TP 等名称里的“隧道”不保证机密性,必须看认证和加密组合。第二,算法越多不一定越安全。复杂协商带来兼容性,也扩大错误配置和降级空间。第三,控制面和数据面正在分离。现代协议倾向让数据隧道保持简单,把用户身份、策略和节点调度交给上层系统。
理解基础机制后,可以继续阅读VPN 是什么补齐概念,或阅读现代 VPN 技术架构了解今天一次连接背后的完整系统。
主要技术资料
- IETF:RFC 4301:IP Security Architecture
- IETF:RFC 2637:Point-to-Point Tunneling Protocol
- IETF:RFC 8922:安全协议与传输服务综述
- Jason A. Donenfeld:WireGuard 技术论文