IPSec 最容易让人迷糊的地方:它不是一个协议,而是一整套协议族。所以第一次看配置会觉得项特别多——因为每一项都在回答「用哪套子协议、怎么封装」。
一句话概括:IPSec = 两个协议(AH / ESP)× 两种模式(传输 / 隧道)× 一套协商机制(IKE)。把这三个维度拆开看,配置就不再是黑盒。
先回答:IPSec 保护什么
它要解决三件事,正好对应上一篇密码学三件套:
| 要保证 | 靠什么 |
|---|---|
| 保密(内容不被看到) | 对称加密(AES / SM4) |
| 完整(内容没被改) | 哈希 / HMAC(SHA-256) |
| 身份可信(对端真的是它) | 预共享密钥(PSK)或数字证书 |
两个协议:AH 与 ESP
| AH(协议号 51) | ESP(协议号 50) | |
|---|---|---|
| 加密 | 不做 | 做 |
| 认证 / 完整性 | 做,覆盖 IP 头 | 做,不覆盖外层 IP 头 |
| 能否过 NAT | 不能(改了 IP 头就校验失败) | 能,靠 NAT-T |
| 现状 | 基本淘汰 | 事实标准 |
所以实际项目里几乎只用 ESP。看到「AH + ESP」的组合配置,通常是历史遗留或者有特殊合规要求。
两种模式:保护范围不一样
【传输模式】原 IP 头保留,只在 IP 头和载荷之间插一个 IPSec 头
┌────────┬────────────┬──────────┐
│ 原 IP 头 │ IPSec 头 │ 载荷 │
└────────┴────────────┴──────────┘
→ 真实源/目的 IP 暴露在外面
→ 用于 主机到主机(比如两台服务器之间)
→ 开销小
【隧道模式】整个原报文(含原 IP 头)被当成载荷,外面套新的 IP 头
┌──────────────┬────────────┬─────────────────────┐
│ 新 IP 头 │ IPSec 头 │ 原 IP 头 + 载荷 │
│ 网关地址 │ │ 内网地址(被保护) │
└──────────────┴────────────┴─────────────────────┘
→ 内网拓扑被隐藏,中间设备只能看到两个网关
→ 用于 站点到站点 VPN(最主流)
→ 开销大(多一层 IP 头)
记忆口诀:「隧道模式套两层 IP,传输模式只插一个头」。站点到站点 VPN 一律用隧道模式;只有主机到主机的场景才考虑传输模式。
SA:IPSec 的「会话」
IPSec 是单向的——每个方向一条 SA,所以一条隧道实际有两条 SA。每条 SA 用一个三元组唯一标识:
SA = ( SPI , 目的 IP , 安全协议 )
SPI(Security Parameter Index) 32 位,本端分配,放在 IPSec 头里
目的 IP 对端网关/主机的地址
安全协议 AH 还是 ESP
★ 出方向:本端用自己分配的 SPI 标记,对端按这个 SPI 去查自己的 SA 表
★ 所以两端各自维护一张 SA 表,各自有独立的 SPI
SA 里存了什么:
加密算法 + 密钥、认证算法 + 密钥、封装模式、抗重放窗口、SA 生存期(时间/字节数)
★ 这些参数都是 IKE 协商出来的,不是手工配的
感兴趣流:哪些流量要加密
IPSec 不会把所有流量都加密,它只处理「感兴趣流」(interesting traffic)。这个概念在华为设备上用 ACL 表达:
# 匹配"从 192.168.1.0/24 去 192.168.2.0/24 的流量"
acl number 3000
rule 5 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255
# ★ 两端 ACL 必须是"镜像"关系
# 本端:source 192.168.1.0 → destination 192.168.2.0
# 对端:source 192.168.2.0 → destination 192.168.1.0
# 不镜像 → 一条隧道起不来(这是 IPSec 排错第一高频问题)
# ★ ACL 是"镜像"不是"相同",这点和防火墙策略不一样
IPSec 的完整配置骨架
# ① 感兴趣流
acl number 3000
rule 5 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255
# ② IKE 阶段(怎么协商、怎么认证对端)
ike proposal 10
encryption-algorithm aes-256
authentication-algorithm sha2-256
dh group14
ike peer peer1 v2
pre-shared-key cipher Huawei@123
ike-proposal 10
remote-address 200.1.1.2
# ③ IPSec 阶段(怎么加密数据)
ipsec proposal prop1
esp encryption-algorithm aes-256
esp authentication-algorithm sha2-256
encapsulation-mode tunnel
# ④ 把上面三块绑在一起
ipsec policy policy1 10 isakmp
security acl 3000
ike-peer peer1
proposal prop1
# ⑤ 应用到出接口
interface GigabitEthernet0/0/0
ipsec policy policy1
排错
display ike sa # ★ IKE SA 是否建立(第一站)
display ike sa verbose # 详细:对端、阶段、剩余生存期
display ipsec sa # ★ IPSec SA 是否建立
display ipsec sa verbose # 含 SPI、加解密算法、包计数
reset ike sa # 清掉重建(改了配置后必须清)
display acl 3000 # 感兴趣流是否匹配上(看命中计数)
debugging ike all # 开调试(生产环境慎用)
排错顺序:
- IKE SA 都建不起来 → 先确认两端 IKE proposal 参数有交集(加密/认证/DH 组必须至少有一组匹配),再看
remote-address对不对、PSK 是否一致、UDP 500/4500 有没有被挡; - IKE SA 起来了但 IPSec SA 没起来 → 查
ipsec proposal有没有交集,以及ACL 是不是镜像关系; - SA 都有但业务不通 → 感兴趣流匹配不上。用
display acl 3000看命中计数是不是 0; - 过 NAT 后建不起来 → 没开 NAT-T。确认两端都支持并在接口上启用;
- 改了配置不生效 → 老 SA 还活着。必须
reset ike sa重建。
一句话总结:用 ESP 不用 AH,用隧道模式不用传输模式,感兴趣流两端必须镜像,改了配置记得 reset ike sa。这四句话能解决 IPSec 八成的问题。
📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)
合并了原始笔记中「IPSEC 架构 / IPSEC 数据包处理流程」两页。
原笔记以协议栈截图为主,本文按「保护目标 → 协议 → 模式 → SA → 感兴趣流 → 配置骨架」重排,并补上了 ACL 镜像、SA 三元组等实操细节。
配置命令保留华为 VRP 原样。