思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)

一、组网描述

思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)(1)

某高校宿舍有线网采用大二层架构,利用QINQ技术使得接入交换机每个端口一个单独的VLAN,从而避免ARP、DHCP欺骗,广播风暴等。核心采用H3C SR8808-X作为BRAS设备,用来进行QINQ终结以及终端用户的PPPOE Server,实现终端用户的接入认证。

QINQ外层VLAN标签在RG S8610下联宿舍楼汇聚S5560的接口上启用,内层VLAN标签在接入交换机E528上。

二、问题描述

某日,从网管软件上收到217号宿舍楼汇聚和接入交换机丢包率高报警,经检查,发现网管软件的217号楼宿舍楼的设备丢包率达70%。

同时终端PC PPPOE拨号错误651。

三、处理过程1.对网管软件的丢包告警进行验证;

PING 217号楼设备发现丢包率很高,远程登录设备发现操作特别卡顿,说明网管软件的丢包率告警并非软件误报。

2.通过网管软件发现其它宿舍楼宇的设备并未出现丢包率高报警,因此排除S8610到SR8808-X之间的物理线路和设备问题,同时仅该宿舍楼出现问题,怀疑是S8610的G2/8口有丢包,于是检查S8610的G2/8接口。发现接口下有错误包和丢包,但是数量不是很多,增长速度也不快;

3.尝试更换G2/8口下的单模光模块后,观察一段时间发现G2/8口未在出现错误包和丢包,收发光衰都在正在范围,同时网管软件上的217号楼丢包率高报警消除,拨号正常;

思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)(2)

4.至此,以为出现丢包率高报警的原因是光模块导致。

5.过了大约一周的时间,网管软件再次发出217号楼设备丢包率高报警,按照之前同样的方法进行排查,发现S8610的G2/8接口并没有出现错误包和丢包情况。

6.回归拓扑图,考虑到217号楼设备的网关均在SR8808-X上,因此分段进行排查。先排查217号楼汇聚H3C S5560到SR8808-X路径上的丢包情况,经过测试发现SR8808-X到S8610并没有丢包,SR8610到S5560丢包严重。

7.因此怀疑丢包在S8610-----S5560两台设备和中间链路存在问题。于是在S8610上开启ACL计数判断丢包是否由设备本身造成。

在S8610上配置如下:其中172.16.204.44是217号楼汇聚S5560的管理地址,211.70.160.82是测试PC,可以认为是接在SR8808-X上;

ip access-list extended test

10 permit ip host 172.16.204.44 host211.70.160.82

20 permit ip any any

ip access-list extended test1

10 permit ip host 172.16.204.44 host211.70.160.82

20 permit ip any any

在分别在G2/8的IN方向,和AG6口的出方向丢用ACL,进行计数;

interface GigabitEthernet 2/8

switchport mode dot1q-tunnel

switchport dot1q-tunnel allowed vlan adduntagged 3608

switchport dot1q-tunnel native vlan 3608

medium-type fiber

ip access-group test in

spanning-tree bpdufilter enable

descriptionto_SS217_WiredNet_HuiJu_S5560_G1/0/28

interface AggregatePort 6

switchport mode uplink

switchport trunk allowed vlan remove1-3600,3615-4094

ip access-group test1 out

description to_SR8808-X(wirednet)

8.经过一段时间观察后,发现从G2/8口收到了1088421个数据包,但是从上联口仅转发出去1088362,少了59个包,并且随着时间的推移这个差值在增加。

思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)(3)

9.对 S8610 设备的底层 buffer 计数,发现部分端口有丢包计数,摘取部分 log 如下:

DROP_PKT_CNT(3).cpu0[0xe200043]=0x49fd: <COUNT=0x49fd>

DROP_PKT_CNT(0).ge1[0xe21f040]=0x96: <COUNT=0x96>

DROP_PKT_CNT(0).ge2[0xe220040]=0x2c0: <COUNT=0x2c0>

DROP_PKT_CNT(0).ge3[0xe221040]=0xb21: <COUNT=0xb21>

DROP_PKT_CNT(0).ge7[0xe225040]=0x19b1:<COUNT=0x19b1>

10.经过与锐捷厂家确认后,目前S8610的两块千兆线卡的MAC芯片的buffer大小是3MB,当发送到某一个端口的瞬时流量超过千兆时,其端口就会丢包。当流量高峰期时,出现burst(突发)流量,是有可能因为buffer不足导致丢包的;

11.根据厂家的答复可能是设备硬件规格不够导致丢包,对此我是持怀疑态度的,主要有两方面原因:

1)客户现场有2块这种规格的千兆业务板卡,目前出现问题的只有其中一块,并且通过网管软件的监控,未出现问题的板卡流量一直要比出现问题的板卡流量大;

2)通过网管软件的监控,出现丢包的板卡单个千兆口最大高峰期流量200Mbps,并没有达到“瞬时流量超过千兆”

经过厂家的确定后,如果是硬件问题,只能新增业务板卡进行分流,没有其它好的解决方案。

12.过了大约2周后,丢包现象再次出现,利用ACL计数同样发现包丢在S8610上,但是经过检查,S8610底层上并没有丢包记录,也就是说这次丢包不是硬件buffer不足导致。

13.考虑到S8610仅根据MAC地址做二层转发,怀疑是不是有什么造成S8610上的MAC地址表学习错误导致转发失败。

14.因为终端和设备的网关均在SR8808-X上,而S8610作为二层设备,只是根据数据帧中的目的MAC地址(网关的MAC地址)转发,丢包有可能是数据帧中的目的MAC地址在S8610的MAC地址表中不存在表项或者对应的出接口不正确。基于此,想到通过二层ACL计数确定网关的MAC地址在S8610是通过正确上联口AG6口学习到。做了如下配置:

1)创建二层ACL,其中741f.4ac5.f802为网关的MAC地址

mac access-listextended 700

10 permit host 741f.4ac5.f802 any etype-any

20 permit any any etype-any

2)在所有接口下应用该ACL,上联口除外

mac access-group 700 in

3)开启对该ACL计数功能

mac access-list counter 700

15.果不其然,一段时间后发现ACL有计数,并且数量很多。正常情况下,网关的MAC地址不可能从下联口学习到,出现这种情况一般有两个原因:

1)有设备一直在模拟网关的MAC作为数据帧的源MAC在发送数据,导致S8610上MAC地址学习错误;

2)接口下联设备有环路;

思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)(4)

16.为了定位在S8610的哪个接口学习到MAC地址,通过不停的在S8610上执行命令:

xq_stud_huiju_S8610#show mac-address-table address 741f.4ac5.f802

最终发现从G2/24口学习到MAC地址,这个接口也就是拓扑图上的连接217宿舍楼的接口,当时为了测试接口将G2/8调换到G2/24。

思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)(5)

17.为了确认是何种类型的攻击,在S8610通过端口镜像将G2/24接口的IN方向的流量全部镜像到抓包电脑上,发现有大量的源MAC地址网关MAC的DHCP offer报文

思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)(6)

18.怀疑有终端在伪造DHCP offer报文,于是利用DHCP报文中的“Client MAC address”字段中的MAC地址,该字段表示:请求通过DHCP获取IP地址的终端MAC地址。找到该终端。

最终定位到该MAC地址是从217号楼第2台接入交换机的G1/0/23口学习到,利用网络标签找到使用该终端的寝室和学生,是1台笔记本;

思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)(7)

19.在笔记本上进行抓包,发现PC并没有发出大量的DHCP报文,通过安装杀毒软件进行检测也未发现可疑程序。但是E528的G1/0/23接口上的确学习到了网关的MAC地址,通过巡线、测线确定该接口就是连接这个寝室;

20.经过对该寝室其它终端进行排查,发现目前在用只有一台电脑,但是奇怪的是寝室用的TP-link 8口傻瓜交换机却有4个接口是亮灯的,排除该电脑使用一个接口,上联使用一个接口还多了2个UP的接口。

21.经过拔线测试,发现TP-link上3口拔掉线缆之后,5口也同时灭了,因此怀疑3口和5口是一根线,但是经过检查发现3口和5口是的确是2根独立的线缆。进一步测试,发现3口和5口只要有任何一个接口插上线缆,即使另外一个接口没有连接线缆,两个接口会同时UP和DOWN,怀疑TP-link傻瓜交换机内部环路。

22.为了最后确定原因,在E528上开启单端口环路检测,立即从G1/0/23口检测到环路。

思科交换机如何防止环路(某高校接入交换机端口环路导致交换机丢包和终端异常)(8)

23.至此可以确定,是由于TP-link 8口交换机内部自环导致,关闭该端口后,网管软件丢包率恢复正常,终端PC PPPOE拨号正常,问题消除。

四、解决方案

在所有接入设备上开启单端口环路检测

1) H3C、华为设备配置如下:

[SS210_1F_E_H3C E552]loopback-detection enable

[SS210_1F_E_H3C E552-GigabitEthernet1/0/1]loopback-detectionenable

2)锐捷设备配置如下:

xq_stud_huiju_S8610(config)#rldp enable

xq_stud_huiju_S8610(config-if-GigabitEthernet 1/1)#rldpport loop-detect block

五、总结

1.对于该种组网方式,利用QINQ已经实现每端口每VLAN,避免了设备之间的环路,广播风暴,ARP、DHCP等欺骗,但是无法避免接入交换机某个端口的环路;

2.利用单端口环路检测可以解决该问题,原理是:设备启用了单端口环路检测后,会从接口向外发送检测包,如果从该接口又收到了检测包,说明该接口下有环路。

H3C设备会根据配置对端口进行相应的处理:

1)block:将该端口阻塞,不进行数据转发,端口物理状态UP,同时设备日志中会有告警;

2)shutdown:将该端口关闭,不进行数据转发,端口物理状态down,同时设备日志中会有告警;

锐捷的设备会根据配置对端口进行如下处理:

1)block:将该端口阻塞,不进行数据转发,端口物理状态UP,同时设备日志中会有告警;

2)shutdown-port:将该端口关闭,不进行数据转发,端口物理状态down,同时设备日志中会有告警;

3)shutdown-svi:将该端口对应svi置于shutdown状态,同时设备日志中会有告警;

4)warning:设日志中仅发出告警,不做其它操作;

一般建议使用shutdown方式,这样排错时也比较容易,同时设备又不损耗资源。

3.强烈建议此种组网方式,必须要在接入设备上开启单端口环路检测功能;

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页