由于交换机接口没有绑定ETH-TRUNK导致业务异常

发布时间:  2014-09-20 浏览次数:  274 下载次数:  0
问题描述
组网结构:

USG分别与NE40E,S8500,S9300进行相连,并且USG都是ETH-TRUNK。USG运行在透明模式,三个ETH-TRUNK口都加入到同一个VLAN内,对应的VLANIF配置IP与S8500和NE40E同一个网段的地址。S9300是新上线的。

接入S9300前,业务都正常。接入S9300后,从S8500上ping USG的VLANIF地址时,时通时不通,在USG上做流量统计,发现收到的ICMP request报文是发出的ICMP reply报文的一半,ICMP reply报文发生丢包,原因是出入接口一致。
[USG-diagnose] display firewall statistic acl 
Current Show sessions count: 1
Protocol(ICMP) SourceIp(1.1.2.2) DestinationIp(1.1.2.1)   
SourcePort(43982) DestinationPort(43982) VpnIndex(public)   
           Receive           Forward           Discard   
Obverse : 4          pkt(s) 4          pkt(s) 0          pkt(s)   
Reverse : 8          pkt(s) 4          pkt(s) 8          pkt(s)
Discard detail information:
  DP_FW_L2Distribute            :exit 4:     4
  FPATH_TP_Input                :exit 3:     4

处理过程
根据流统的情况,应该是USG发出的ICMP reply报文被某个设备送回来了,导致统计了两次,如果reply报文是发给S8500的,则由于目的MAC地址是S8500自身,S8500不会将此报文发送回来。所以报文只能是S9300和NE40E送回来的,考虑到S9300上线前业务正常,S9300将报文送回来的可能性最大。那为什么S9300会收到ICMP reply报文,并且还会送回来呢,原因只能是USG将ICMP reply报文发给了S9300,如果是这样,在USG上S8500的MAC对应的ARP表项的出接口就应该是和S9300连接的那个接口。进一步推测S8500的ARP请求是从S9300这里发过来的,或者USG将这个报文广播了一次,S9300又送回来了,因为S9300和S8500没有直连,后者的可能性更大。上面的推论结果都是S9300会将USG广播出去的报文送回来,则可以推测出S9300与USG连接的两个接口没有绑定ETH-TRUNK。据了解,S9300没有做任何配置,直接连接到了USG上。实验室搭建类似的环境进行复现,现象与现网相同。
根因
1、开始时,没有S9300,业务都正常,S8500上有正确的NE40E和USG的ARP表项,USG上有正确的S8500和NE40E的ARP表项。
2、没有任何配置的S9300接上线。S8500上USG的ARP表项老化,S8500向USG发出ARP请求,由于ARP请求是广播报文,所以USG会将此报文向S9300和NE40E进行广播,同时回应ARP应答和学习正常的ARP表项。由于S9300没有任何配置,所以会将此报文在所有UP的接口上进行广播。于是报文又被送回到USG上。USG上对应的ARP表项又被刷新,导致对应的出接口为与S9300接的ETH-TRUNK口。
3、在S8500上ping USG的VLANIF地址,USG进行应答,但将报文送给了S9300,由于S9300上所有的MAC地址都从USG上学到的,所以S9300又会将其送回来。导致USG上的流统为两次。
4、对于送回来的报文不是送给自身的,所以USG会去查MAC转发表。如果 MAC转发表中,此MAC地址对应的接口为S9300这边的口,则会导致USG认为此报文不合法,原因是此报文的入接口和MAC转发表中对应的出接口一致,报文被丢弃,S8500上的现象是ping不通。如果MAC转发表中,此MAC地址对应的接口为S8500这边的口,则能正常转发,S8500上的现象是能ping通。
5、对于USG上的MAC转发表是否正确,依赖于S8500。如果S8500发送了一个广播报文,则此报文会被USG广播,再从S9300上送回来,结果USG上对应的MAC转发表就学错了,其S8500的MAC地址对应的接口为靠S9300这边的接口。如果S8500这边发送了一个单播报文,则USG不会广播此报文,而是根据MAC转发表将此报文转发(除非查不到MAC转发表),同时刷新MAC转发表,此时USG上的MAC转发就会被刷新正确,S8500的MAC地址对应的接口为靠S8500这边的接口。
解决方案
在S9300上配置ETH-TRUNK绑定。

END