本文档介绍与Internet协议安全(IPsec)防重播检查失败相关的问题,并提供可能的解决方案。
重播攻击是一种网络攻击形式,其中恶意或欺诈性地记录有效数据传输并在以后重复。有人会记录合法通信并重复这些通信,以假冒有效用户,从而破坏合法连接或对合法连接造成负面影响,试图破坏安全性。
IPsec会为每个加密数据包分配单调增加的序列号,以提供针对攻击者的反重播保护。接收方的IPsec端点会跟踪在使用这些编号和带有可接受序列号的滑动窗口时已处理的数据包。Cisco IOS®实施中的默认反重播窗口大小为64个数据包,如下图所示:

当IPsec隧道终端启用反重播保护时,传入的IPsec流量按如下方式处理:
如果发生重播检查失败并且数据包被丢弃,路由器将生成类似于以下内容的系统日志消息:
%IPSEC-3-REPLAY_ERROR: IPSec SA receives anti-replay error, DP Handle n, src_addr x.x.x.x, dest_addr y.y.y.y, SPI 0xzzzzzzzz
如前所述,重播检查的目的是防止合法数据包的恶意重复。可能导致失败的重播检查的一些常见条件包括:
排除IPsec重播丢弃故障的关键是确定哪些数据包因重播而丢弃,并使用数据包捕获来确定这些数据包是否确实是重播数据包或到达重播窗口以外的接收路由器的数据包。为了将丢弃的数据包与嗅探器跟踪中捕获的数据包正确匹配,第一步是标识对等体以及丢弃的数据包所属的IPsec流以及数据包的ESP序列号。
在运行Cisco IOS® XE软件的路由器平台上,当发生重播丢弃时,系统日志消息中会打印有关对等体以及IPsec安全参数索引(SPI)的信息,以帮助识别被丢弃的数据包所属的对等体和特定隧道。但是,此输出中不显示ESP序列号。ESP序列号用于唯一标识给定IPsec流中的IPsec数据包。如果没有序列号,就很难准确识别数据包捕获中丢弃了哪些数据包。
在这种情况下,如果观察到重放丢弃,可以使用Cisco IOS® XE数据路径数据包跟踪功能,系统日志消息如下:
%IOSXE-3-PLATFORM: F0: cpp_cp: QFP:0.0 Thread:060 TS:00000001132883828011
%IPSEC-3-REPLAY_ERROR: IPSec SA receives anti-replay error, DP Handle 3, src_addr 10.2.0.200, dest_addr 10.1.0.100, SPI 0x4c1d1e90
为了帮助识别丢弃的数据包的ESP序列号,请使用数据包跟踪功能完成以下步骤:
步骤1.设置platform conditional debug 过滤器,以匹配来自对等设备的流量:
debug platform condition ipv4 10.2.0.200/32 ingress
debug platform condition start
步骤2.使用copy选项启用数据包跟踪以复制数据包报头信息:
debug platform packet-trace packet 64
debug platform packet-trace copy packet input l3 size 100
步骤3.当检测到重放错误时,请使用packet trace buffer确定由于重放而丢弃的数据包,并且可以在复制的数据包中找到ESP序列号:
Router#show platform packet-trace summary
Pkt Input Output State Reason
0 Gi4/0/0 Tu1 CONS Packet Consumed
1 Gi4/0/0 Tu1 CONS Packet Consumed
2 Gi4/0/0 Tu1 CONS Packet Consumed
3 Gi4/0/0 Tu1 CONS Packet Consumed
4 Gi4/0/0 Tu1 CONS Packet Consumed
5 Gi4/0/0 Tu1 CONS Packet Consumed
6 Gi4/0/0 Tu1 DROP 053 (IpsecInput)
7 Gi4/0/0 Tu1 DROP 053 (IpsecInput)
8 Gi4/0/0 Tu1 CONS Packet Consumed
9 Gi4/0/0 Tu1 CONS Packet Consumed
10 Gi4/0/0 Tu1 CONS Packet Consumed
11 Gi4/0/0 Tu1 CONS Packet Consumed
12 Gi4/0/0 Tu1 CONS Packet Consumed
13 Gi4/0/0 Tu1 CONS Packet Consumed
前面的输出显示丢弃了编号6和7的数据包,因此现在可详细检查它们:
Router#show platform packet-trace packet 6
Packet: 6 CBUG ID: 6
Summary
Input : GigabitEthernet4/0/0
Output : Tunnel1
State : DROP 053 (IpsecInput)
Timestamp : 3233497953773
Path Trace
Feature: IPV4
Source : 10.2.0.200
Destination : 10.1.0.100
Protocol : 50 (ESP)
Feature: IPSec
Action : DECRYPT
SA Handle : 3
SPI : 0x4c1d1e90
Peer Addr : 10.2.0.200
Local Addr: 10.1.0.100
Feature: IPSec
Action : DROP
Sub-code : 019 - CD_IN_ANTI_REPLAY_FAIL
Packet Copy In
45000428 00110000 fc329575 0a0200c8 0a010064 4c1d1e90 00000006 790aa252
e9951cd9 57024433 d97c7cb8 58e0c869 2101f1ef 148c2a12 f309171d 1b7a4771
d8868af7 7bae9967 7d880197 46c6a079 d0143e43 c9024c61 0045280a d57b2f5e
23f06bc3 ab6b6b81 c1b17936 98939509 7aec966e 4dd848d2 60517162 9308ba5d
ESP序列号与IP报头起始位置的偏移量为24字节(或IP数据包负载数据的4字节),如前面的输出中粗体部分所强调。在此特定示例中,丢弃数据包的ESP序列号为0x6。
除了标识由于重放检查失败而丢弃的数据包的数据包信息外,需要同时收集有关IPsec流的数据包捕获。这有助于检查同一IPsec流中的ESP序列号模式,以帮助确定重播丢弃的原因。有关如何在Cisco IOS XE路由器上使用嵌入式数据包捕获(EPC)的详细信息,请参阅Cisco IOS和Cisco IOS XE的嵌入式数据包捕获配置示例。
收集WAN接口上加密(ESP)数据包的数据包捕获后,Wireshark可用于对任何序列号异常执行ESP序列号分析。首先,确保在Preferences > Protocols > ESP下启用Sequence Number Check,如图所示:

接下来,在Analyze > Expert信息下检查任何ESP序列号问题,如下所示:

单击序列号错误的任何数据包,获取其他详细信息,如下所示:

确定对等体并收集重放丢弃的数据包捕获后,三种可能的情况可以解释重放失败:
使用Cisco IOS的传统ISR G2系列路由器上的IPsec重播丢弃与使用Cisco IOS XE的路由器不同,如下所示:
%CRYPTO-4-PKT_REPLAY_ERR: decrypt: replay check failed connection id=529, sequence number=13
消息输出不提供对等体IP地址或SPI信息。要对此平台进行故障排除,请使用错误消息中的“conn-id”。识别错误消息中的“conn-id”,并在show crypto ipsec sa输出中查找它,因为重放是每SA检查(而不是每对等)。 系统日志消息还提供了ESP序列号,可帮助唯一识别数据包捕获中丢弃的数据包。
下面对此进行了说明:
%CRYPTO-4-PKT_REPLAY_ERR: decrypt: replay check failed connection id=529, sequence number=13
Router#show crypto ipsec sa | in peer|conn id
current_peer 10.2.0.200 port 500
conn id: 529, flow_id: SW:529, sibling_flags 80000046, crypto map: Tunnel0-head-0
conn id: 530, flow_id: SW:530, sibling_flags 80000046, crypto map: Tunnel0-head-0
Router#
Router#show crypto ipsec sa peer 10.2.0.200 detail
interface: Tunnel0
Crypto map tag: Tunnel0-head-0, local addr 10.1.0.100
protected vrf: (none)
local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
current_peer 10.2.0.200 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 27, #pkts encrypt: 27, #pkts digest: 27
#pkts decaps: 27, #pkts decrypt: 27, #pkts verify: 27
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#pkts no sa (send) 0, #pkts invalid sa (rcv) 0
#pkts encaps failed (send) 0, #pkts decaps failed (rcv) 0
#pkts invalid prot (recv) 0, #pkts verify failed: 0
#pkts invalid identity (recv) 0, #pkts invalid len (rcv) 0
#pkts replay rollover (send): 0, #pkts replay rollover (rcv) 0
##pkts replay failed (rcv): 21
#pkts internal err (send): 0, #pkts internal err (recv) 0
local crypto endpt.: 10.1.0.100, remote crypto endpt.: 10.2.0.200
path mtu 2000, ip mtu 2000, ip mtu idb Serial2/0
current outbound spi: 0x8B087377(2332586871)
PFS (Y/N): N, DH group: none
inbound esp sas:
spi: 0xE7EDE943(3891128643)
transform: esp-gcm ,
in use settings ={Tunnel, }
conn id: 529, flow_id: SW:529, sibling_flags 80000046, crypto map:
Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4509600/3223)
IV size: 8 bytes
replay detection support: Y
Status: ACTIVE
<SNIP>
从此输出中可以看到,重播丢弃来自入站ESP SA SPI为0xE7EDE943的10.2.0.200对等体地址。也可以从日志消息本身注意到,已丢弃数据包的ESP序列号为13。可使用对等体地址、SPI号和ESP序列号的组合来唯一标识数据包捕获中丢弃的数据包。
在运行早期Cisco IOS XE版本的路由器上,系统日志中报告的“REPLAY_ERROR”无法打印包含丢弃已重播数据包的对等体信息的实际IPsec流,如下所示:
%IOSXE-3-PLATFORM: F0: cpp_cp: QFP:00 Thread: 095 TS:00000000240306197890
%IPSEC-3-REPLAY_ERROR: IPSec SA receives anti-replay error, DP Handle 3
要识别正确的IPsec对等体和流信息,请使用系统日志消息中打印的数据平面(DP)句柄作为此命令中的输入参数SA句柄,以便在Quantum流处理器(QFP)上检索IPsec流信息:
Router#show platform hardware qfp active feature ipsec sa 3
QFP ipsec sa Information
QFP sa id: 3
pal sa id: 2
QFP spd id: 1
QFP sp id: 2
QFP spi: 0x4c1d1e90(1276976784)
crypto ctx: 0x000000002e03bfff
flags: 0xc000800
: src:IKE valid:Yes soft-life-expired:No hard-life-expired:No
: replay-check:Yes proto:0 mode:0 direction:0
: qos_preclassify:No qos_group:No
: frag_type:BEFORE_ENCRYPT df_bit_type:COPY
: sar_enable:No getvpn_mode:SNDRCV_SA
: doing_translation:No assigned_outside_rport:No
: inline_tagging_enabled:No
qos_group: 0x0
mtu: 0x0=0
sar_delta: 0
sar_window: 0x0
sibling_sa: 0x0
sp_ptr: 0x8c392000
sbs_ptr: 0x8bfbf810
local endpoint: 10.1.0.100
remote endpoint: 10.2.0.200
cgid.cid.fid.rid: 0.0.0.0
ivrf: 0
fvrf: 0
trans udp sport: 0
trans udp dport: 0
first intf name: Tunnel1
<SNIP>
嵌入式事件管理器(EEM)脚本还可用于自动化数据收集:
event manager applet Replay-Error
event syslog pattern "%IPSEC-3-REPLAY_ERROR: IPSec SA receives anti-replay error"
action 1.0 regexp "([0-9]+)$" "$_syslog_msg" dph
action 2.0 cli command "enable"
action 3.0 cli command "show platform hardware qfp active feature ipsec sa $dph |
append bootflash:replay-error.txt"
在本示例中,收集的输出被重定向到bootflash。要查看此输出,请使用命令more bootflash:replay-error.txt。
| 版本 | 发布日期 | 备注 |
|---|---|---|
7.0 |
14-Sep-2026
|
重新认证 |
6.0 |
21-Nov-2025
|
机器翻译、品牌设置、格式设置,并修复了一些链接。 |
5.0 |
04-Sep-2024
|
更新的SEO、机器翻译、参考和格式。 |
2.0 |
13-Feb-2022
|
其他信息 |
1.0 |
15-Dec-2013
|
初始版本 |