「Network Switching」- 物理地址漂移(MAC Address Flapping)

  CREATED BY JENKINSBOT

问题描述

MAC-Address-Flaping 是指在交换机上同个 VLAN 内有两个端口学习到同个 MAC-Address,原有的 MAC-Address-Table-Entry 被后学习到的覆盖的现象。

当同个 MAC-Address 在两个端口间频繁发生迁移时,即会产生 MAC-Address-Flapping 现象。

解决方案

在正常情况下,网络中不会在短时间内出现大量 MAC-Address-Flapping 的情况。出现这种现象一般都意味着:网络中存在环路;或者存在网络攻击行为;

环路导致

如果是环路引发 MAC-Address-Table-Entry,治本的方法是部署防环技术(例如 STP 等等),来消除二层环路。

网络攻击

如果由于网络攻击等其他原因引起,则可使用如下特性来防治:

接口 MAC-Address 学习优先级

当 MAC-Address 在交换机的两个接口之间发生漂移时,可将其中某个接口的 MAC-Address 学习优先级提高。高优先级的接口学习到的MAC地址表项将覆盖低优先级接口学习到的MAC地址表项。

缺省时接口 MAC-Address 学习的优先级均为0,数值越大,则优先级越高。当同一个MAC地址被两个个接口学习到后,接口MAC地址学习优先级高的会被保留,MAC地址学习优先级低的被覆盖。

相同优先级接口 MAC 地址不允许覆盖

当伪造网络设备所连接口的 MAC-Address 优先级与安全的网络设备相同时,后学习到的伪造网络设备 MAC-Address-Table-Entry 不会覆盖之前正确的表项。

注意事项:
1)如果恶意设备先接入网络,那么在配置不允许相同优先级接口MAC地址漂移时,如果安全网络设备下电,则交换机仍会学习到伪造网络设备的MAC地址,当网络设备再次上电时将无法学习到正确的MAC地址。因此该特性需谨慎使用,如果交换机的接口连接的网络设备是服务器,当服务器下电后,另外的接口学习到与服务器相同的MAC地址,当服务器再次上电后交换机就不能学习到正确的MAC地址。

地址漂移检测

交换机支持 MAC 地址漂移检测 机制,分为以下两种方式:

基于 VLAN 的 MAC 地址漂移检测

解释:配置 VLAN 的 MAC 地址漂移检测功能可以检测指定 VLAN 下的所有的 MAC 地址是否发生漂移。

当 MAC 地址发生漂移后,则可根据需求配置接口做出的动作有以下三种:
1)发送告警:当检测到MAC地址发生漂移时,只给网管发送告警。
2)接口阻断:当检测到MAC地址发生漂移时,根据设置的阻塞时间对接口进行阻塞,并关闭接口收发报文的能力。
3)地址阻断:当检测到MAC地址发生漂移时,只阻塞当前MAC地址,而不对物理接口进行阻塞,当前接口下的其他MAC的通信不受影响。

MAC地址发生漂移后的三种动作在上图中分别表示为:1.产生并上报告警;2.阻断SW1上的GE0/0/2接口的收发报文的能力;3.阻断SW1上的GE0/0/2接口上针对指定MAC地址报文的收发能力。

当配置接口阻塞时:
1)检测到 VLAN2 内产生 MAC 地址漂移时,将产生漂移后的接口直接阻塞。
2)接口将被阻塞10秒(该时长使用 block-time 关键字指定),接口被阻塞时是无法正常收发数据的。
3)10秒之后接口会被放开并重新进行检测,此时该接口可以正常收发数据,如果20秒内没有再检测到MAC地址漂移,则接口的阻塞将被彻底解除;而如果20秒内再次检测到MAC地址漂移,则再次将该接口阻塞,如此重复2次(该次数使用retry-times关键字指定),如果交换机依然能检测到该接口发生MAC地址漂移,则永久阻塞该接口。

全局 MAC 地址漂移检测

解释:该功能可以检测设备上的所有的MAC地址是否发生了漂移。

当交换机检测到MAC地址漂移,在缺省情况下,它只是简单地上报告警,并不会采取其他动作。

在实际网络部署中,可以根据网络需求,对检测到MAC地址漂移之后定义以下动作:
1)error-down:当配置了MAC地址漂移检测的端口检测到有MAC地址漂移时,将对应接口状态置为error-down,不再转发数据。
2)quit-vlan:当配置了MAC地址漂移检测的端口检测到有MAC地址漂移时,将退出当前接口所属的VLAN。

华为交换机默认开启全局MAC地址漂移检测功能,因此缺省时交换机便会对设备上的所有VLAN进行MAC地址漂移检测。

在某些场景下,需要对某些VLAN不进行MAC地址漂移检测,可以通过配置MAC地址漂移检测的VLAN白名单来实现。

如果接口由于发生了MAC地址漂移从而被设置为Error-Down,默认情况下是不会自动恢复的。
如果希望Error-Down的接口能够自动恢复,在系统视图下配置如下命令:error-down auto-recovery cause mac-address-flapping interval time-value

如果接口由于发生 MAC地址漂移,被设置为离开VLAN,如要实现接口自动恢复,可以在系统视图下配置如下命令:mac-address flapping quit-vlan recover-time time-value

配置案例

默认情况,两台主机虽然 MAC 地址相同,但是当访问 AR1 路由器时,都能 ping 通:
1)在执行 ping 操作时,SW1 上的 MAC-Address-Table-Entry 会相互覆盖
2)同个时刻仅某台主机能够访问 AR1,如果同时访问将出现丢包现象;

此时当配置 [SW1-GigabitEthernet0/0/1]mac-learning priority 3 时,
1)仅 PC1 能够访问 AR1:因为 GE0/0/1 的学习优先级更高,此时 SW1 不会从 GE0/0/2 学习相同的地址;

当禁止MAC地址漂移时,配置报文的处理动作为丢弃:[Huawei-GigabitEthernet0/0/1] mac-learning priority flapping-defend action discard
在缺省情况下,禁止MAC地址漂移时报文的处理动作是转发。
鉴于模拟器不支持该命令,所以我们不再实验该命令;

配置不允许相同优先级的接口发生MAC地址漂移:[SW1]undo mac-learning priority 0 allow-flapping
1)如果 PC1 先 ping AR1,则而后 PC2 无法访问 AR1,反之亦然;

配置MAC地址漂移检测功能:[Huawei-vlan2] mac-address flapping detection
在缺省情况下,已经配置了对交换机上所有VLAN进行MAC地址漂移检测的功能。当发生漂移时,控制台显示相关日志;

其他常用命令:

(可选)配置MAC地址漂移检测的VLAN白名单
缺省情况下,没有配置MAC地址漂移检测的VLAN白名单。
[Huawei] mac-address flapping detection exclude vlan { vlan-id1 [ to vlan-id2 ] } &<1-10>

(可选)配置发生漂移后接口的处理动作
缺省情况下,对超过MAC地址学习数限制的报文采取丢弃动作。
一些安全性较差的网络容易受到黑客的MAC地址攻击,由于MAC地址表的容量是有限的,当黑客伪造大量源MAC地址不同的报文并发送给交换机后,交换机的MAC表项资源就可能被耗尽。当MAC表被填满后,即使它再收到正常的报文,也无法学习到报文中的源MAC地址。
配置限制MAC地址学习数,当超过限制数时不再学习MAC地址,同时可以配置当MAC地址数达到限制后对报文采取的动作,从而防止MAC地址表资源耗尽,提高网络安全性。
[Huawei-GigabitEthernet0/0/1] mac-address flapping action { quit-vlan | error-down }

(可选)配置MAC地址漂移表项的老化时间
缺省情况下,MAC地址漂移表项的老化时间为300秒。
[Huawei] mac-address flapping aging-time aging-time

配置MAC地址漂移检测功能
[Huawei-vlan2] loop-detect eth-loop { [ block-mac ] block-time block-time retry-times retry-times | alarm-only }