第210篇:IPsec VPN 原理:IKEv1 与 IKEv2
关键词
IPsec VPN、IKEv1、IKEv2、SA、ISAKMP、安全联盟、DH 交换、身份认证、加密算法
一、IPsec 协议族概述
1.1 IPsec 的功能
IPsec(Internet Protocol Security)是 IP 层的安全协议族,提供:
IPsec 提供的安全服务:
认证(Authentication) 验证通信对端的身份,防止假冒 AH 协议(Authentication Header) 加密(Encryption) 对数据进行加密,防止窃听 ESP 协议(Encapsulating Security Payload) 完整性(Integrity) 确保数据在传输中不被篡改 HMAC-SHA256 等 防重放(Anti-Replay) 防止攻击者截获并重放数据包 序列号 + 滑动窗口
1.2 IPsec 的协议组成
IPsec 协议族主要由三部分组成:
1. 安全协议
AH(Authentication Header):仅认证,不加密(已很少使用)
ESP(Encapsulating Security Payload):认证 + 加密(主流)
2. 密钥交换
IKE(Internet Key Exchange):自动协商密钥和 SA
IKEv1(RFC 2409):传统版本,仍然广泛使用
IKEv2(RFC 7296):改进版本,功能更强
3. 加密算法
认证:MD5、SHA1、SHA256、SHA384
加密:DES、3DES、AES-128、AES-256
DH 组:DH Group 1/2/5/14/19/21
二、IPsec 安全联盟(SA)
2.1 什么是 SA
SA(Security Association,安全联盟)是 IPsec 通信双方协商的安全参数集合:
SA 的核心参数:
SA 参数 SPI(Security Parameter Index):唯一标识 协议:ESP 或 AH 目的 IP:对端地址 加密算法:AES-256 认证算法:SHA-256 封装模式:隧道模式 / 传输模式 密钥:加密密钥 + 认证密钥 生存周期:3600 秒或 10MB 流量 防重放窗口大小:64
2.2 IKE SA vs IPsec SA
IKE 分两个阶段创建 SA:
第一阶段(IKE SA): 目的:保护 IKE 协商本身的安全 方向:双向(一个 IKE SA 保护双方通信) 顾名思义:控制面隧道
第二阶段(IPsec SA): 目的:保护实际数据传输 方向:单向(需要两个方向两个 SA) 顾名思义:数据面隧道
SA 关系图: | IKE SA(阶段 1) 保护协商过程 ┌──────────────────────────────┐ └──────────────────────────────┘ ┌──────────────────────────────┐ | IPsec SA(阶段 2,方向 A→B) IPsec SA(阶段 2,方向 B→A) | | | --- | --- | --- |
三、IKEv1 工作流程
3.1 IKEv1 阶段 1:建立 IKE SA
IKEv1 阶段 1 有两种模式:
主模式(Main Mode):6 个消息,更安全
野蛮模式(Aggressive Mode):3 个消息,更快
主模式(Main Mode)6 步交互:
消息 1-2:算法协商
Initiator → Responder: SA 提议(加密、认证、DH 组)
Responder → Initiator: SA 接受(选择一个提议)
消息 3-4:DH 交换
Initiator → Responder: DH 公钥 + Nonce
Responder → Initiator: DH 公钥 + Nonce
── 双方计算相同的共享密钥 ──
消息 5-6:身份认证(加密保护下)
Initiator → Responder: 身份信息 + 认证数据
Responder → Initiator: 身份信息 + 认证数据
── IKE SA 建立完成 ──
野蛮模式(Aggressive Mode):3 个消息
消息 1:Initiator → Responder: SA 提议 + DH 公钥 + 身份
消息 2:Responder → Initiator: SA 接受 + DH 公钥 + 身份 + 认证
消息 3:Initiator → Responder: 认证信息
→ 更快但安全性略低(身份在加密前暴露)
3.2 IKEv1 阶段 2:建立 IPsec SA
阶段 2 使用快速模式(Quick Mode),受 IKE SA 保护:
| 发起方 | 响应方 | |
|---|---|---|
| │ │ | ||
| │ 消息 1: 哈希 + 提议 (加密协议+IP) │ | ||
| │────────────────────────────────────→│ | ||
| │ │ | ||
| │ 消息 2: 哈希 + 接受 + 新密钥材料 │ | ||
| │←────────────────────────────────────│ | ||
| │ │ | ||
| │ 消息 3: 哈希确认 │ | ||
| │────────────────────────────────────→│ | ||
| │ │ | ||
| │ IPsec SA 建立完成 │ | ||
| │ 单向 SA (A→B) + 单向 SA (B→A) │ | ||
| │ │ |
3.3 配置示例
# IKE 提议(阶段 1 参数)
ike proposal 1
encryption-algorithm aes-256 # 加密:AES-256
dh group14 # DH 组:Group 14 (2048-bit)
authentication-algorithm sha256 # 认证:SHA-256
authentication-method pre-share # 预共享密钥
integrity-algorithm hmac-sha256 # 完整性
sa duration 86400 # IKE SA 生存期 24 小时
# IKE 对等体
ike peer PEER_A
ike-proposal 1
pre-shared-key Huawei@123 # 共享密钥
remote-address 202.1.1.2 # 对端地址
# IPsec 提议(阶段 2 参数)
ipsec proposal PROPOSAL_A
esp authentication-algorithm sha256 # ESP 认证
esp encryption-algorithm aes-256 # ESP 加密
# IPsec 策略
ipsec policy POLICY_A 10 isakmp
security acl 3001 # 需要保护的流量
ike-peer PEER_A
proposal PROPOSAL_A
sa duration traffic-based 1024000 # IPsec SA 生存期 1GB 流量
sa duration time-based 3600 # IPsec SA 生存期 1 小时
四、IKEv2 改进
4.1 IKEv2 vs IKEv1
IKEv2 相比 IKEv1 的主要改进:
对比维度 IKEv1 IKEv2
────────────────────────────────────────────────────
阶段数 2 阶段(6+3 消息) 1 轮(4 消息)
消息数(最小) 9 个消息 4 个消息
NAT 穿透 需要额外 RFC 原生支持
MOBIKE 不支持 支持(移动场景)
EAP 认证 有限 原生支持
DPD(Dead Peer) 可选 必须支持
SA 管理 复杂 简化
4.2 IKEv2 的消息交换
IKEv2 只需 4 个消息完成密钥交换:
请求 1 (IKE_SA_INIT):
Initiator → Responder: SA 提议 + DH 公钥 + Nonce
响应 1 (IKE_SA_INIT):
Responder → Initiator: SA 接受 + DH 公钥 + Nonce
── 至此已计算出共享密钥 ──
请求 2 (IKE_AUTH):
Initiator → Responder: 身份 + 认证 + 第一对 IPsec SA 的提议
(此消息已加密保护)
响应 2 (IKE_AUTH):
Responder → Initiator: 身份 + 认证 + IPsec SA 参数
── IKE SA + IPsec SA 同时建立完成 ──
4.3 IKEv2 配置示例
# IKEv2 提议
ike proposal 2
version 2 # IKEv2
encryption-algorithm aes-256
dh group14
authentication-algorithm sha256
authentication-method pre-share
integrity-algorithm hmac-sha256
# IKEv2 对等体
ike peer PEER_B
ike-proposal 2
version 2
pre-shared-key Huawei@123
remote-address 202.1.2.2
!
ipsec policy POLICY_B 10 isakmp
security acl 3002
ike-peer PEER_B
proposal PROPOSAL_A
五、IPsec 封装模式
5.1 传输模式(Transport Mode)
传输模式:只保护 IP 载荷,不保护原始 IP 头
原始 IP 头 TCP/UDP 数据 | 原始 IP 头 | | TCP 头 | | 数据 | | --- | --- | --- | --- | --- |
ESP 传输模式: | 原始 IP 头 | | ESP 头 | | TCP 头 | | 数据 | | ESP尾 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | ↑ 不保护 ↑ 加密 ↑ 认证
适用场景:终端到终端(端到端加密)
5.2 隧道模式(Tunnel Mode)
隧道模式:保护整个 IP 报文(包括原始 IP 头)
ESP 隧道模式: | 新 IP 头 | | ESP 头 | | 原始 IP 头 | | TCP 头 | | 数据 | | ESP尾 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | GW 地址 ↑ 整个受保护
适用场景:站点到站点 VPN(网关到网关) 远程访问 VPN(客户端到网关)
六、NAT 穿越(NAT-T)
6.1 NAT-T 原理
NAT 对 IPsec 的挑战:
问题:ESP 协议(IP 协议号 50)无法穿越 NAT
因为 NAT 需要修改 TCP/UDP 端口,ESP 没有端口
NAT-T(NAT Traversal)解决方案:
将 ESP 报文封装在 UDP 中(UDP 4500)
NAT 设备 ┌──────┐
IPsec 发起方 ───── ESP(协议50) ────→│ NAT │──→ 无法识别,丢弃
(10.0.0.1) │ └──────┘
│
│ 封装为 UDP 4500 ┌──────┐
└── UDP(4500)ESP ──────→│ NAT │──→ UDP 端口映射 ✓
└──────┘
# 启用 NAT-T
ike proposal 1
nat-traversal enable # 默认已启用
nat-keepalive 20 # NAT 保活间隔 20 秒
七、总结
| 知识点 | 核心要点 |
|---|---|
| IPsec 功能 | 认证 + 加密 + 完整性 + 防重放 |
| SA | 安全联盟,包含 SPI/算法/密钥/生存期 |
| IKEv1 | 2 阶段:阶段 1 IKE SA + 阶段 2 IPsec SA |
| IKEv2 | 1 轮 4 消息,更高效,原生支持 NAT-T/MOBIKE |
| 主模式 vs 野蛮模式 | 主模式 6 消息更安全,野蛮模式 3 消息更快 |
| 传输模式 vs 隧道模式 | 传输模式保护载荷,隧道模式保护整个 IP |
| NAT-T | ESP over UDP 4500 解决 NAT 穿越 |
八、思考
- IKEv1 的主模式和野蛮模式有什么区别?什么场景下会选择野蛮模式?
- IKE SA 和 IPsec SA 分别保护什么数据?它们的生存周期怎么管理?
- IKEv2 相比 IKEv1 在哪些方面做了改进?4 个消息如何完成 IKEv1 的 9 个消息的工作?
- IPsec 的传输模式和隧道模式有什么区别?站点到站点 VPN 应该用哪种模式?
- 为什么 ESP 协议无法穿越 NAT?NAT-T 是如何解决这个问题的?
下篇预告:第211篇《IPsec VPN 隧道模式与传输模式》——深入对比 IPsec 的两种封装模式,详解数据包结构变化和适用场景。