H3C-S12500-F交换机DUP重包故障分析

一、现象描述

   QQ截图20170822150237.jpg

如图所示,S5500-EI与S12500-F三层直连。从S5500-EI(172.16.1.253)去PING S12500-F的三层接口(172.16.1.254),情况正常。但是当在S12500-F的三层接口上下发packet-filter策略后,会出现DUP包的现象。

<S5500EI>ping –a 172.16.1.253 172.16.1.254

64 bytes from 172.16.1.254: icmp_seq=0 ttl=57 time=10 ms

64 bytes from 172.16.1.254: icmp_seq=0 ttl=56 time=12 ms (DUP!)

64 bytes from 172.16.1.254: icmp_seq=1 ttl=57 time=10 ms

64 bytes from 172.16.1.254: icmp_seq=1 ttl=56 time=12 ms (DUP!)

64 bytes from 172.16.1.254: icmp_seq=2 ttl=56 time=12 ms

64 bytes from 172.16.1.254: icmp_seq=2 ttl=56 time=13 ms (DUP!)

64 bytes from 172.16.1.254: icmp_seq=3 ttl=57 time=10 ms

64 bytes from 172.16.1.254: icmp_seq=3 ttl=56 time=12 ms (DUP!)

64 bytes from 172.16.1.254: icmp_seq=4 ttl=56 time=12 ms

64 bytes from 172.16.1.254: icmp_seq=4 ttl=56 time=13 ms (DUP!)

二、故障分析

第1步:查看配置,S12500-F上下发的Packet-filter如下。

#

acl number 3000

 description DMZ_web

 rule 10 deny ip destination 172.16.8.0 0.0.0.255

 rule 20 deny ip destination 172.16.9.0 0.0.0.255

 rule 30 deny ip destination 172.16.0.0 0.0.0.255

 rule 40 deny ip destination 172.16.254.0 0.0.0.255

 rule 1000 permit ip

#

interface Vlan-interface1200

 description YW-web-server

 ip address 172.16.1.254 255.255.255.0

 packet-filter 3000 inbound

#

第2步:确认当前配置无误,由于与Packet-filter是否下发相关,因此怀疑是由于ACL的原因造成的,故查看底层ACL。

2.1)用户下发的ACL
Acl-Type PktFilter IP on VRF, Stage IFP, OuterPort, Installed, Active                                                              

PrioMjr/Sub 520/12, Group 4 [4], Slice/Idx 7/4, Entry 217, Single: 1284                                                           

ACL GroupNo : 3000, RuleID : 1000                                                                                                 

Rule Match --------                                                                                                         

         Ports:0x00000000001fffffe;0x2000100007fffffff                                                                           

 Lookup: STP forwarding, L2 dst L3 bit[y], 0x118, 0x118                                                                    

Outer Vlan: 0x4b0, 0xfff                                                                                                  

 IP Type: Any IPv4 packet                                                                                                  

Actions --------                                                                                                             

 Permit           //用户下发的ACL的动作是Permit

2.2)系统ACL

Acl-Type RX Low, Stage IFP, Global, Installed, Active                                                                              

PrioMjr/Sub 512/35, Group 6 [6], Slice/Idx 0/2, Entry 69, Double: 2/130                                                           

Rule Match --------                                                                                                                

Ports: 0x00000000001fffffe; 0x2000100007fffffff  Lookup: VLAN ID valid[y], STP forwarding, 0x1c, 0x1c                                                                    

IP protocol: icmp

IP Type: Any IPv4 packet                                                                                                  

Dest Port: CPU                                                                   DropBit: 0x0, Mask : 0x1                                                                                                  

SysmRuleIndex : 41                                                                                                       

 L3 Dest Class id: 0x20                                                                                                    

Actions --------                                                                                                                   

 CAR cir 0x500, cbs 0x800, pir 0x500, pbs 0x800, mode srTCM color blind                                                    

Deny                                                          

Account mode  packets,  green and non-green                                                                               

Copy_to_cpu : Yes  //系统ACL的动作是Copy_to_cpu + Deny                                                                                                                    

 Change CPU pkt COS 9                                                              Red Deny                                                                                                                  

Red_Copy_to_cpu : No                                                                                                       

Yel Deny                                                                                                                  

Yel_Copy_to_cpu : No           

 MatchedName:41, ICMP  //匹配ICMP报文                             Accounting: Hi 0, LO 0

第3步:进一步分析ACL

ICMP报文是协议报文,会上送CPU处理,因此会匹配系统ACL,此时系统ACL的动作是Copy_to_cpu + Deny,从而保证只有一份ICMP报文上送CPU,因此对于目的地址为172.16.1.0/24的流,只会有一份上送CPU,从而正常回应。

但是当用户配置了Packet-filter之后,例如对于目的地址为172.16.1.0/24的ICMP报文,匹配了rule 1000 permit ip,动作是Permit。因此与协议ACL会造成冲突。

系统ACL与用户ACL冲突最后的结果是,这条流通过FP后的实际动作为Copy_to_cpu + Permit,从而产生了两份流量,一份上送CPU处理,另外一份Permit正常转发。

由于现场使用的单板是XGS架构,即PP+TM的结构。ACL的处理在PP芯片完成,被Permit的流量从PP芯片到达TM芯片之后,也会上送CPU进行处理。从而造成该流上送了两份到CPU,一份是PP芯片通过系统ACL COPY上CPU,另一份是通过TM芯片查看目的地址为自己上送CPU,最终导致了回应的DUP包。

三、解决方法

(1)规避措施:去掉rule 1000 permit ip。避免匹配目的地址为172.16.1.0/24的流。其实这条rule 1000配置是多余的,因为Packet-filter默认是会Permit所有不匹配的报文的。

关于ACL的默认用法,这里简单介绍一下。当ACL被其他功能引用时,根据设备在实现该功能时的处理方式(硬件处理或者软件处理),ACL可以被分为基于硬件的应用和基于软件的应用。典型的基于硬件的应用包括:报文过滤、QoS策略;基于软件的应用包括:路由、对登录用户(Telnet、SNMP、WEB)进行控制等。当ACL被用于软件应用时,如果报文没有与ACL中的规则匹配,此时交换机对此类报文采取的动作为deny,即拒绝报文通过。当ACL被用于硬件应用时,如果报文没有与ACL中的规则匹配,此时交换机对此类报文采取的动作为permit。

(2)根本解决措施:提供S12500-F的R1005P12H01的热补丁版本,提高系统ACL中的优先级,使在这种ACL冲突的情况下以系统ACL为准,可以从底层ACL的实现机制中避免这种问题的出现。


2017年08月