VPN协议对比:WireGuard/IPSec/OpenVPN
约 1572 字大约 5 分钟
vpnprotocols
2025-07-09
概述
VPN(Virtual Private Network)通过加密隧道在公网上建立安全的私有网络连接。不同的VPN协议在安全性、性能、复杂度上各有取舍。本文对比分析主流VPN协议:IPSec、OpenVPN和WireGuard。
VPN协议全景
IPSec协议族
IPSec工作在网络层(Layer 3),由多个协议组成。
IKE(Internet Key Exchange)
IKE负责安全关联(SA)的协商和密钥交换。IKEv2是当前推荐版本。
ESP与AH
| 协议 | 全称 | 提供的保护 | Protocol号 |
|---|---|---|---|
| ESP | Encapsulating Security Payload | 加密+完整性+认证 | 50 |
| AH | Authentication Header | 完整性+认证(不加密) | 51 |
ESP是实际使用中的首选,AH因无法穿越NAT且不提供加密已很少使用。
传输模式 vs 隧道模式
IPSec配置示例(strongSwan)
# /etc/ipsec.conf
conn site-to-site
type=tunnel
authby=secret
left=203.0.113.1 # 本端公网IP
leftsubnet=10.1.0.0/16 # 本端子网
right=198.51.100.1 # 对端公网IP
rightsubnet=10.2.0.0/16 # 对端子网
ike=aes256-sha256-modp2048
esp=aes256-sha256
keyexchange=ikev2
auto=start
# /etc/ipsec.secrets
203.0.113.1 198.51.100.1 : PSK "shared-secret-key"OpenVPN
OpenVPN是基于SSL/TLS的开源VPN解决方案,工作在用户空间,高度可配置。
架构
TUN vs TAP:
- TUN: 三层隧道,路由模式,传输IP包
- TAP: 二层隧道,桥接模式,传输以太网帧
OpenVPN配置示例
服务端:
# server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
cipher AES-256-GCM
auth SHA256
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
keepalive 10 120
persist-key
persist-tun
comp-lzo no
max-clients 100
user nobody
group nogroup
verb 3客户端:
# client.conf
client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
cipher AES-256-GCM
auth SHA256
verb 3WireGuard
WireGuard是新一代VPN协议,以简洁和高性能为设计目标。内核代码仅约4000行(对比OpenVPN的10万+行)。
核心技术
WireGuard设计原则:
- 固定加密套件,无协商(避免降级攻击)
- 最小攻击面(代码量极小)
- 沉默策略(未认证的包直接丢弃,不回复)
- 基于Noise_IK握手模式
- 内核态实现(Linux 5.6+内置)
WireGuard配置
# 生成密钥对
wg genkey | tee privatekey | wg pubkey > publickey
# 服务端配置 /etc/wireguard/wg0.conf
[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
# 客户端配置
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
DNS = 8.8.8.8
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0 # 全流量隧道
PersistentKeepalive = 25 # NAT后需要保持映射# 启动WireGuard
wg-quick up wg0
# 查看状态
wg show
# 输出示例:
# interface: wg0
# public key: xxx
# private key: (hidden)
# listening port: 51820
#
# peer: CLIENT_PUBLIC_KEY
# endpoint: 198.51.100.1:52341
# allowed ips: 10.0.0.2/32
# latest handshake: 42 seconds ago
# transfer: 1.48 GiB received, 3.21 GiB sentWireGuard握手过程
L2TP与PPTP
L2TP/IPSec:
- L2TP本身不加密,需配合IPSec
- 双重封装导致开销较大
- 企业环境仍广泛使用
PPTP:
- 使用MS-CHAP v2认证和MPPE加密
- 已被证明不安全,多种攻击可在数小时内破解
- 不应在任何生产环境中使用
协议对比
| 特性 | IPSec/IKEv2 | OpenVPN | WireGuard |
|---|---|---|---|
| 工作层次 | L3 (内核) | L3/L2 (用户态) | L3 (内核) |
| 加密协商 | 动态协商 | TLS协商 | 固定算法 |
| 代码量 | ~40万行 | ~10万行 | ~4000行 |
| 性能 | 高 | 中 | 极高 |
| 延迟 | 低 | 中 | 极低 |
| 穿越防火墙 | 困难(ESP/UDP500) | 容易(443/TCP) | 中等(UDP) |
| 移动漫游 | IKEv2优秀 | 一般 | 优秀 |
| 审计难度 | 高 | 高 | 低 |
| 配置复杂度 | 高 | 中 | 低 |
| 多平台支持 | 系统内置 | 需安装客户端 | 需安装(部分系统内置) |
| 适用场景 | 企业/移动 | 通用 | 通用/高性能 |
性能基准对比
吞吐量测试(iperf3, 1Gbps链路):
+------------------+-----------+---------+
| 协议 | 吞吐量 | CPU占用 |
+------------------+-----------+---------+
| WireGuard | ~950 Mbps | 15% |
| IPSec (AES-NI) | ~880 Mbps | 25% |
| OpenVPN (UDP) | ~550 Mbps | 45% |
| OpenVPN (TCP) | ~400 Mbps | 55% |
+------------------+-----------+---------+选型建议
总结
VPN协议经历了从PPTP到WireGuard的演进。WireGuard以极简设计和卓越性能成为新项目的首选;OpenVPN凭借灵活性和穿墙能力在特殊环境下仍有优势;IPSec/IKEv2在企业环境中因标准化和平台内置支持依然不可替代。选择VPN协议时需综合考虑安全需求、网络环境、性能要求和运维复杂度。
贡献者
更新日志
2026/3/14 13:09
查看所有更新日志
9f6c2-feat: organize wiki content and refresh site setup于