简介
本文档介绍当对等设备之间的安全关联(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
注意:在Cisco IOS® XE路由平台(例如,思科聚合服务路由器(ASR)和Cisco Catalyst 8000系列路由器)上,此特定丢弃在全局量子流处理器(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。这通常不是问题,因为它只是暂时的,并且只会影响几个数据包。
但是,如果相同流和SPI编号仍存在相同消息,则表明对等体之间的IPsec SA已不同步。例如:
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)脚本可能非常有用。
已知的 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数据包