H3C设备网关配置arp source-mac filter导致发生STP拓扑变更后管理网段短时中断原因分析(业务不受影响)

故障现象

拓扑如上,各接入层交换机均作为二层设备,管理网段为172.17.4.0/24,网关配置在核心H3C S7503X上,VLAN IF  IP 172.17.4.254。问题出现在网络发生STP拓扑变更时,TC报文泛洪全网后,大约过一百零几秒到一百几十秒(不同设备中断的时间不等)后便会出现部分管理设备无法被网管的情况发生,比如ping不到或者无法通过snmp获取数据,持续时间大约3分钟左右便会自动恢复。此过程期间业务网段并未出现异常。zabbix监控记录如下图所示:

针对V5接入交换机的分析过程

通过在接入交换机和核心交换机上debugging arp  packet发现,一旦网络出现拓扑变更,接入交换机的MAC地址表项会被清空(STP拓扑变更机制),同时针对ARP表项进行主动探测,确认表项是否还存活(STP拓扑变更机制),继而引发大量的ARP请求。华三的网络设备有个问题是,对于同一网段其他的设备发送的无故ARP,不管自己是否需要对方的ARP信息,均会将其保存在自己的ARP表项中,同时在ARP表项过期或者STP拓扑变更时会主动发送ARP-Request刷新所有之前存在的ARP表项,该问题再V5V7设备中均存在。如下图所示:

华为设备只会保存自己需要ARP表项,如下图所示:

华三设备基于此种原因就会导致一旦网络出现拓扑变更,此时接入交换机MAC地址表项被清空、对ARP表项进行主动探测,由于所有的接入交换机保存有几十台其他接入交换机的ARP表项,这时每台接入交换机都会在管理VLAN内发送大量的ARP-Request(超出一台设备该有的正常量值),刷新自己的ARP表项。对于核心S7503X V7设备,STP拓扑变更后,控制层面立即清空MAC地址表项,而针对每一个ARP缓存表项以每3秒发送一次,先发送5个广播ARP-Request,再至多发送28个单播ARP-Request,直到收到ARP Response制止,如果发送完这32ARP-Request,还是没有收到针对该表项的ARP-Response,则将其清空。

这个过程有两个注意点:

1.由于在一个STP生成树中,一旦发生STP拓扑变更,那么会触发大量的ARP消息上升到控制层面去处理,CPU对于这类信息的处理需要时间和时隙,所以在CPU非常繁忙的时刻,特别是刚刚发生STP拓扑变更的时刻,需要等待几秒至十几秒的时间,核心才会针对ARP表项中的具体一个表项发出第一个ARP-Request进行探测,而不是在收到STP TC时立刻进行ARP探测,包括第一个和第二个ARP-Request之间也并非严格3秒间隔,待CPU利用率下降后将保持稳定的3秒周期发送ARP-Request。见下图。

2.这里说的“收到针对该表项的ARP-Response”代表核心S7503X控制层面收到对方的ARP-Response,如果对端回应了ARP-Response,但是本端因为ARP安全或者MAC地址黑洞等问题将其丢弃了,也算是没有收到。

恰巧的是对于部分华三V5设备(比如网络中的S2652、S2126、S5008PV2)还存在一个问题(bug、不是一定会触发),CPU发送一个ARP请求,但是转发层面会复制几份出去(抓包发现至少两份,见下图),这就导致假设一台交换机保存有50ARP表项,那么STP拓扑变更后,其大约一次性要发送150ARP-Request至核心,而核心配置了ARP防攻击命令arp source-mac(作用见下面说明),即便将阈值修改为100,也不起作用。

上图为V5交换机172.17.4.142发出的的arp-request,针对于172.17.4.91的在24秒左右只请求了一次。但是在下图该台交换机与核心互联的接口上镜像抓包却抓到了4个报文。详细的抓包日志见附件。

至此V5的交换机在发生STP拓扑变更时ping和网管不可达的原因已明确,即STP拓扑变更触发ARP表项刷新,短时间内(arp source-mac 5秒为周期)发送超出正常值的ARP-Request(针对同一个表项发送了不止一遍),导致核心交换机根据arp source-mac fileter判定该交换机管理接口对应的MAC地址存在源MAC地址固定的ARP攻击,进而将该MAC地址发送的ARP报文进行过滤(注意仅仅是对ARP报文进行过滤,对于其他类型报文不过滤),导致核心对这些MAC地址对应的ARP表项进行存活探测时,由于对端的ARP-Response无法上送CPU处理,最终导致核心交换对应的ARP表项被清空,从而无法进行三层封装转发。从STP拓扑变更触发至网络恢复大约是5分钟的时间,等同于arp source-mac aging-time默认时间5分钟。解除防攻击后,重新正常学习arp,网络恢复。

V5交换机处理方法

对于V5的交换机,该问题的办法有两个,目的都是为了减少无用ARP的表项。

方法1:针对网关地址配置静态ARP表项,同时配置管理接口允许学习的动态ARP表项最大数据 arp  max-learning-num 1。该方法适用于网络非常稳定的情况,但是一旦网关信息有变化就会导致接入交换机脱管。

方法2:配置禁止免费ARP学习,undo gratuitous-arp-learning enable

在H3C S1850V2这类只能web管理的设备下,可以通过关闭学习免费ARP报文来实现。如下图。

1.3.1  arp source-mac
	arp source-mac命令用来使能源MAC地址固定的ARP攻击检测功能,并选择检查模式。
	undo arp source-mac命令用来恢复缺省情况。
【命令】
	arp source-mac { filter | monitor }
	undo arp source-mac [ filter | monitor ]
【缺省情况】
	源MAC地址固定的ARP攻击检测功能处于关闭状态。
【视图】
	系统视图
【缺省用户角色】
	network-admin
【参数】
	filter:检测到攻击后,打印Log信息,同时对该源MAC地址对应的ARP报文进行过滤。
	monitor:检测到攻击后,只打印Log信息,不对该源MAC地址对应的ARP报文进行过滤。
【使用指导】
	建议在网关设备上配置本功能。
	使能源MAC地址固定的ARP攻击检测之后,该特性会对上送CPU的ARP报文按照源MAC地址和VLAN进行统计。当在一定时间(5秒)内收到某固定源MAC地址的ARP报文超过设定的阈值,不同模式的处理方式存在差异:在filter模式下会打印Log信息并对该源MAC地址对应的ARP报文进行过滤;在monitor模式下只打印Log信息,不过滤ARP报文。
	需要注意的是,如果undo命令中没有指定检查模式,则关闭任意检查模式的源MAC地址固定的ARP攻击检测功能。
【举例】
	# 使能源MAC地址固定的ARP攻击检测功能,并选择filter检查模式。
<Sysname> system-view
[Sysname] arp source-mac filter

1.3.2  arp source-mac aging-time
	arp source-mac aging-time命令用来配置源MAC地址固定的ARP攻击检测表项的老化时间。
	undo arp source-mac aging-time命令用来恢复缺省情况。
【命令】
	arp source-mac aging-time time
	undo arp source-mac aging-time
【缺省情况】
	源MAC地址固定的ARP攻击检测表项的老化时间为300秒,5分钟。
【视图】
	系统视图
【缺省用户角色】
	network-admin
	mdc-admin
【参数】
	time:源MAC地址固定的ARP攻击检测表项的老化时间,取值范围为60~6000,单位为秒。
【举例】
	# 配置源MAC地址固定的ARP攻击检测表项的老化时间为60秒。
<Sysname> system-view
[Sysname] arp source-mac aging-time 60

1.3.4  arp source-mac threshold
	arp source-mac threshold命令用来配置源MAC地址固定的ARP报文攻击检测阈值,当在固定的时间(5秒)内收到源MAC地址固定的ARP报文超过该阈值则认为存在ARP报文攻击。
	undo arp source-mac threshold命令用来恢复缺省情况。
【命令】
	arp source-mac threshold threshold-value
	undo arp source-mac threshold
【缺省情况】
	源MAC固定ARP报文攻击检测的阈值为30。
【视图】
	系统视图
【缺省用户角色】
	network-admin
	mdc-admin
【参数】
	threshold-value:固定时间内源MAC地址固定的ARP报文攻击检测的阈值,单位为报文个数,取值范围为1~5000。
【举例】
	# 配置源MAC地址固定的ARP报文攻击检测阈值为30个。
<Sysname> system-view
[Sysname] arp source-mac threshold 30

针对V7接入交换机的分析过程

V7版本的原因在于STP拓扑变更后,接入交换机在管理VLAN接口收到了各台交换机发送的大量的ARP-Request报文(都在同一个VLAN,相互泛洪),进而触发设备的ARP报文限速功能(SoftCar丢包).

华三设备对于上送cpu的arp报文限速防护机制如下:

首先是通过命令arp rate-limit配置的限度,该值不同类型的设备可以配置的范围不一样,7503X为5-2000。不指定限速速率时,设备使用缺省限速速率,超过限速部分的报文会被丢弃。下一级限度策略即SoftCar限速,该限速是与具体设备的CPU有关系的,在华为设备可以通过cpu-defend policy配置,华三的设备无法单独配置。如果超过SoftCar限速,那么会挤占CPU的资源,影响其他模块的稳定性,触发该限速的日志每小时打印一次,设备轮询各模块,输出日志。该问题场景即触发的是这一级限速。最高级别是CosCar限速,与具体硬件有关系,一般不会到这个层级。

针对于V7版本的交换机的处理方法

该问题的处理办法是配置ARP主动确认功能。

场景:ARP的主动确认功能主要应用于网关设备,防止攻击者仿冒用户欺骗网关设备

功能:没有配置命令的情况下,我们收到arp请求或者回应,都会生成arp表项。开启功能之后,如果我们收到arp回应,但不是设备之前发送请求的回应就不会学习;如果收到arp请求,我们会回应,但是不会生成arp表项,设备会立即主动发送一个arp探测,对端回应之后我们再学习。

严格模式的主动确认:就是收到arp请求,我们会回应,但是不会主动发送arp请求;等后续设备有流量触发需要解析这个arp的时候,才会主动发送arp探测,对端回应之后我们才学习。

1.5.1  arp active-ack enable
	arp active-ack enable命令用来开启ARP主动确认功能。
	undo arp active-ack enable命令用来关闭ARP主动确认功能。
【命令】
	arp active-ack [ strict ] enable
	undo arp active-ack [ strict ] enable
【缺省情况】
	ARP主动确认功能处于关闭状态。
【视图】
	系统视图
【缺省用户角色】
	network-admin
	mdc-admin
【参数】
	strict:ARP主动确认功能的严格模式。
【使用指导】
	ARP的主动确认功能主要应用于网关设备,防止攻击者仿冒用户欺骗网关设备。通过strict参数开启或关闭主动确认的严格模式。开启严格模式后,ARP主动确认功能执行更严格的检查,新建ARP表项前,需要本设备先对其IP地址发起ARP解析,解析成功后才能触发正常的主动确认流程,在主动确认流程成功后,才允许设备学习该表项。
【举例】
	# 开启ARP主动确认功能。
<Sysname> system-view
[Sysname] arp active-ack enable

 其他相关命令解释

1.2.1  arp rate-limit
	arp rate-limit命令用来开启ARP报文限速功能,并设置ARP报文限速速率。
	undo arp rate-limit命令用来关闭ARP报文限速功能。
【命令】
	arp rate-limit [ pps ]
	undo arp rate-limit
【缺省情况】
	ARP报文限速功能处于开启状态。
【视图】
	二层以太网接口视图
	二层聚合接口视图
	三层以太网接口视图
	三层聚合接口视图
【缺省用户角色】
	network-admin
	mdc-admin
【参数】
	pps:ARP限速速率,单位为包每秒(pps),取值范围为5~2000。如果未指定本参数,则用来恢复设备缺省ARP限速速率。
【使用指导】
	不指定限速速率时,设备使用缺省限速速率,超过限速部分的报文会被丢弃。
【举例】
	# 在二层以太网接口Ten-GigabitEthernet1/0/1上开启ARP报文限速功能,并设置ARP报文限速速率为50pps。
<Sysname> system-view
[Sysname] interface ten-gigabitethernet 1/0/1
[Sysname-Ten-GigabitEthernet1/0/1] arp rate-limit 50
1.2.2  arp rate-limit log enable
	arp rate-limit log enable命令用来开启ARP报文限速日志功能。
	undo arp rate-limit log enable命令用来关闭ARP报文限速日志功能。
【命令】
	arp rate-limit log enable
	undo arp rate-limit log enable
【缺省情况】
	设备的ARP报文限速日志功能处于关闭状态。
【视图】
	系统视图
【缺省用户角色】
	network-admin
	mdc-admin
【使用指导】
	当开启了ARP限速日志功能后,设备将这个时间间隔内的超速峰值作为日志的速率值发送到设备的信息中心,通过设置信息中心的参数,最终决定日志报文的输出规则(即是否允许输出以及输出方向)。有关信息中心参数的设置请参见“网络管理和监控配置指导”中的“信息中心”。
【举例】
	# 开启ARP报文限速日志功能。
<Sysname> system-view
[Sysname] arp rate-limit log enable
1.2.3  arp rate-limit log interval
	arp rate-limit log interval命令用来配置当设备收到的ARP报文速率超过用户设定的限速值时,设备发送告警和日志的时间间隔。
	undo arp rate-limit log interval命令用来恢复缺省情况。
【命令】
	arp rate-limit log interval interval
	undo arp rate-limit log interval
【缺省情况】
	当设备收到的ARP报文速率超过用户设定的限速值时,设备发送告警和日志的时间间隔为60秒。
【视图】
	系统视图
【缺省用户角色】
	network-admin
	mdc-admin
【参数】
	interval:当端口上的ARP报文速率超过用户设定的限速值时,设备发送告警和日志的时间间隔。取值范围为1~86400,单位为秒。
【使用指导】
	用户需要先开启发送告警或日志功能,然后配置此命令指定设备发送告警和日志的时间间隔,同时本命令必须和端口下的arp rate-limit命令配合使用,单独配置本命令无效。
【举例】
	# 当设备收到的ARP报文速率超过用户设定的限速值时,配置设备发送告警和日志的时间间隔为120秒。
<Sysname> system-view
[Sysname] arp rate-limit log interval 120
【相关命令】
	·     arp rate-limit
	·     arp rate-limit log enable
	·     snmp-agent trap enable arp

特殊疑点说明

  1. 核心S7503X在收到STP拓扑变更时,针对V5的设备,会立即将其MAC地址加入攻击防护列表,应该会导致管理网络立即中断?为什么实际情况是STP拓扑变更后,大约过150秒左右才会不通(不同设备时间略有差异,100-190秒都有可能)?

    答:前文已述arp source-mac仅仅针对ARP协议报文过滤,对于其他业务报文不受影响,从而使核心可以在MAC地址表项清空后可以立即重新学习到MAC地址表项;而ARP表项在STP拓扑变更后不会立即清空,而是要进行有效性探测,在这个探测期(至少3*32=96秒)内ARP表项是正常存在的,所以可以进行正常三层转发。

  2. 为什么只有管理网络受影响,而业务网络不受影响?

    答:这个问题在核心S7503X这一侧的原因是arp soure-mac功能的影响,arp是用于三层转发报文的(网管主机至接入交换机地址是跨网段转发)。而对于业务报文,接入交换机是纯二层设备,所以不受影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值