上一篇讲了 IPSec 用什么协议、什么模式。这一篇讲它怎么动起来——密钥怎么协商出来,数据包进去出来各走哪条路。

为什么 IKE 要分两个阶段

核心原因一句话:第二阶段本身也需要被保护。

如果只有一个阶段,那么协商「用什么密钥加密数据」这件事本身就是明文发的——攻击者直接截获就完了。所以 IKE 先建立一个受保护的协商通道(Phase 1 的 IKE SA),再在这个通道里协商真正加密数据的密钥(Phase 2 的 IPSec SA)。

IKE 两个阶段的作用与出方向数据包的四个处理步骤
▲ IKE 两阶段与出方向数据包的处理流程

Phase 1:两种模式,安全性和速度的取舍

主模式(Main Mode)野蛮模式(Aggressive Mode)
报文数6 个(3 组交换)3 个
身份保护有,身份在加密后传递没有,身份明文发出
协商速度慢快
适用场景两端都有固定 IP一端是动态 IP(如分支机构拨号、L2TP over IPSec)
华为关键字默认exchange-mode aggressive

为什么动态 IP 要用野蛮模式?因为主模式需要按 IP 地址来查 PSK,而野蛮模式可以用 local-id / remote-id(比如域名或字符串)来识别对端。这是实际项目里选野蛮模式的主要理由,不是因为它快。

IKE v1 与 v2

IKEv1IKEv2
报文开销大(主模式 6 报文)小(4 报文)
NAT 穿越需要额外检测原生支持
可靠性无重传机制有窗口/重传
现状存量设备多新部署首选(华为 ike peer xxx v2)

数据包进出设备各走什么路

出方向(加密发送)
原始报文(192.168.1.10 → 192.168.2.10)
    │
    ├─ ① 匹配感兴趣流:拿源/目的地址去查 ACL 3000
    │      没命中 → 直接按普通路由转发,不进隧道
    │      命中   → 继续往下
    │
    ├─ ② 查 IPSec SA:按「感兴趣流 + 对端」找到对应的 SA
    │      没有 SA → 触发 IKE 协商(这就是"流量触发建隧道")
    │
    ├─ ③ 加密封装:
    │      隧道模式 → 整个原报文加密,前面加 ESP 头 + 新 IP 头
    │      新 IP 头:源 = 本端隧道地址,目的 = 对端隧道地址
    │
    └─ ④ 查路由发送:按新 IP 头查路由表,发往对端
入方向(解密接收)
收到 ESP 报文
    │
    ├─ ① 判断是不是 IPSec 报文:看 IP 协议号是不是 50(ESP)
    │
    ├─ ② 查 SA:用报文里的 SPI + 目的 IP + 协议号 组成三元组查表
    │      查不到 → 丢弃(并可能回一个 notify 告诉对端重建)
    │
    ├─ ③ 校验:抗重放窗口检查 → 完整性校验(HMAC)
    │      不通过 → 丢弃 + 计数
    │
    ├─ ④ 解密 + 拆封装:得到原始内网报文
    │
    └─ ⑤ 按内网报文的目的地址查路由,转发到内网

★ 注意:入方向【不查 ACL】。命中 SA 就放行 —— 这也是为什么
  "只配了单向 ACL 也能通"的原因(但那是不规范的做法)

生存期与重协商

SA 不是永久的,有生存期(lifetime),可以按时间也可以按流量算:

SA 类型默认生存期(华为)到点后
IKE SA约 24 小时重新走 Phase 1(主模式 6 报文)
IPSec SA约 1 小时(或指定流量)在 IKE SA 保护下重新走 Phase 2

关键点:重协商是「先建新的、再删旧的」,中间有一小段时间新旧 SA 并存,所以业务不会断。如果配置不当(比如两端生存期差太多),可能出现「一端删了旧 SA 而另一端还在用」导致短暂丢包。

DPD:怎么知道对端还活着

IPSec 是单向的、无连接的。如果对端设备重启了,本端的 SA 还在,但发出去的包全部石沉大海。所以需要 DPD(Dead Peer Detection)定期探测:

huawei · DPD
ike peer peer1 v2
 dpd dpd-name                        # 关联一个 dpd 模板
 dpd interval 10 retransmit 3        # 每 10 秒探测,3 次无响应就认为对端死了
                                     # → 主动删除本地 SA

# ★ 不配 DPD 的后果:
#   对端重启后,本端 SA 表里还有旧表项,新流量继续用旧 SA 加密发出去
#   → 全部丢包,而且不会自动恢复,必须手工 reset ike sa
#   这是"隧道莫名其妙不通了"最常见的根因之一

排错

huawei
display ike sa                          # IKE SA 状态
display ike sa verbose                  # 详细:对端 ID、加密算法、剩余时间
display ike peer                        # IKE peer 配置
display ike proposal                    # IKE 提议

display ipsec sa                        # IPSec SA
display ipsec sa verbose                # SPI、算法、包计数(★ 看加解密包数对不对)
display ipsec statistics                # 全局统计(丢包/校验失败计数)

display acl 3000                        # 感兴趣流命中计数
display ipsec policy                    # 策略配置与绑定关系

reset ike sa                            # 重建(改配置后必做)
reset ipsec sa

按现象定位:

一句话总结:Phase 1 保护 Phase 2,出方向查 ACL、入方向只查 SA,生存期到了先建新再删旧,DPD 必须配。IPSec 的排错就是顺着「IKE SA → IPSec SA → ACL 命中 → 加解密包数」这条链往下查。

📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)

合并了原始笔记中「IPSEC数据包处理流程 / IPSEC VPn」两页中的协商部分。
原笔记以流程图截图为主,本文把出方向/入方向的处理步骤完整展开,并补上了 DPD 缺失导致「隧道莫名不通」这个实际高频问题。
配置命令保留华为 VRP 原样。