简介
本文档介绍当对等设备之间的安全关联(SA)不同步时的IPsec问题。
问题
最常见的IPsec问题之一是SA在对等设备之间可能变得不同步。因此,加密设备会使用对等设备不知道的SA加密流量。这些数据包被对等设备丢弃,系统日志中会显示以下消息:
Sep 2 13:27:57.707: %CRYPTO-4-RECVD_PKT_INV_SPI: decaps: rec'd IPSEC packet
has invalid spi for destaddr=10.10.1.2, prot=50, spi=0xB761863E(3076621886),
srcaddr=10.1.1.1
注意:使用NAT-T时,在修复Cisco Bug ID CSCsq59183之前,RECVD_PKT_INV_SPI消息未正确报告。(IPsec不报告RECVD_PKT_INV_SPI消息和NAT-T。)
注意:在思科聚合服务路由器(ASR)平台上,在Cisco IOS® XE版本2.3.2(12.2(33)XNC2)之前未实施%CRYPTO-4-RECVD_PKT_INV_SPI消息。 另请注意,在ASR平台上,此特定丢包在全局量子流处理器(QFP)丢包计数器和IPsec功能丢包计数器下注册,如下例所示。
Router# show platform hardware qfp active statistics drop | inc Ipsec
IpsecDenyDrop 0 0
IpsecIkeIndicate 0 0
IpsecInput 0 0 <======
IpsecInvalidSa 0 0
IpsecOutput 0 0
IpsecTailDrop 0 0
IpsecTedIndicate 0 0
Router# show platform hardware qfp active feature ipsec datapath drops all | in SPI
4 IN_US_V4_PKT_SA_NOT_FOUND_SPI 64574 <======
7 IN_TRANS_V4_IPSEC_PKT_NOT_FOUND_SPI 0
12 IN_US_V6_PKT_SA_NOT_FOUND_SPI 0
请注意,出于明显的安全原因,此特定消息在Cisco IOS中以每分钟1的速率受速率限制。如果特定流(SRC、DST或SPI)的此消息仅在日志中出现一次,则它只能是与IPsec密钥重新生成同时出现的临时情况,其中当对等设备尚未完全准备好使用同一SA时,一个对等设备可以开始使用新的SA。这通常不是问题,因为它只是暂时的,只会影响几个数据包。但是,有些漏洞可能会造成问题。
提示:有关示例,请参阅Cisco Bug ID CSCsl68327(重新生成密钥时丢失数据包)、Cisco Bug ID CSCtr14840(ASR:在某些条件下,在第2阶段重新生成密钥过程中丢弃数据包)或思科漏洞ID CSCty30063(ASR在QM完成之前使用新的SPI)。
或者,如果观察到同一消息的多个实例报告同一流的相同SPI,则会出现问题,例如以下消息:
Sep 2 13:36:47.287: %CRYPTO-4-RECVD_PKT_INV_SPI: decaps: rec'd IPSEC packet
has invalid spi for destaddr=10.10.1.2, prot=50, spi=0x1DB73BBB(498547643),
srcaddr=10.1.1.1
Sep 2 13:37:48.039: %CRYPTO-4-RECVD_PKT_INV_SPI: decaps: rec'd IPSEC packet
has invalid spi for destaddr=10.10.1.2, prot=50, spi=0x1DB73BBB(498547643),
srcaddr=10.1.1.1
这表示流量被黑洞,在发送方设备上的SA到期或失效对等体检测(DPD)激活之前无法恢复。
解决方案
本节提供可用于解决上一节中所述问题的信息。
无效的SPI恢复
为了解决此问题,Cisco建议您启用无效的SPI恢复功能。例如,输入crypto isakmp invalid-spi-recovery命令。下面是一些描述此命令使用的重要说明:
- 首先,无效的SPI恢复仅在SA不同步时用作恢复机制。它有助于从此情况恢复,但不会解决导致SA首先失去同步的根问题。为了更好地了解根本原因,必须在两个隧道终端上启用ISAKMP和IPsec调试。如果问题经常发生,则获取调试并尝试解决根本原因(而不只是掩盖问题)。
- 对于crypto isakmp invalid-spi-recovery命令的用途和功能,存在常见的误解。即使没有此命令,Cisco IOS也会执行一种无效的SPI恢复功能,当它针对收到的SA向发送对等体发送DELETE通知时,如果该SA已经具有该对等体的IKE SA。同样,无论crypto isakmp invalid-spi-recovery命令是否激活,都会出现这种情况。
- crypto isakmp invalid-spi-recovery命令尝试解决路由器接收具有无效SPI的IPsec流量并且它不具有与该对等体的IKE SA的情况。在这种情况下,它会尝试与对等体建立新的IKE会话,并通过新创建的IKE SA发送DELETE通知。但是,此命令不适用于所有加密配置。此命令唯一适用的配置是静态加密映射(其中明确定义了对等体)和静态对等体(衍生自实例化加密映射,例如VTI)。以下是常用加密配置的摘要以及无效SPI恢复是否适用于该配置:
加密配置 |
无效的SPI恢复? |
静态加密映射 |
Yes |
动态加密映射 |
无 |
带隧道保护的P2P GRE |
Yes |
使用静态NHRP映射的mGRE隧道保护 |
Yes |
使用动态NHRP映射的mGRE隧道保护 |
无 |
sVTI |
Yes |
EzVPN客户端 |
不适用 |
对间歇性无效SPI错误消息进行故障排除
多次出现无效SPI错误消息。由于收集相关调试变得非常困难,因此很难进行故障排除。在这种情况下,嵌入式事件管理器(EEM)脚本可能非常有用。
注意:有关详细信息,请参阅Cisco文档的EEM脚本,该脚本用于排除由无效安全参数索引引起的隧道摆动故障。
已知的 Bug
此列表显示可能导致IPsec SA不同步或与无效的SPI恢复相关的漏洞:
- Cisco Bug ID CSCvn31824 Cisco IOS-XE ISAKMP会删除新的SPI(如果在安装之前已收到新的SPI数据包)
- Cisco Bug ID CSCvd40554 IKEv2:Cisco IOS无法解析SPI大小为0的INV_SPI通知 — 发送INVALID_SYNTAX
- Cisco Bug ID CSCvp16730由于SPI错误无效,丢弃了SPI值以0xFF开头的传入ESP数据包