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

  CREATED BY JENKINSBOT

问题描述

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

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

解决方案

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

环路导致

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

网络攻击

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

接口 MAC-ADDR 学习优先级

在交换机的两个接口间,当发生 MAC-ADDR 漂移时,可将其中某个接口的 MAC-ADDR 学习优先级提高;

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

针对相同优先级接口,禁止其 MAC-ADDR 覆盖

当伪造网络设备所连接口的 MAC-ADDR 优先级与安全的网络设备相同时,后学习到的伪造网络设备 MAC-ADDR-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 秒之后接口会被放开并重新进行检测,此时该接口可以正常收发数据,如果 20s 内没有再检测到 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-ADDR-flapping interval time-value

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

配置案例

默认情况,两台主机虽然 MAC 地址相同,但是当访问 AR1 路由器时,都能 ping 通:
1)在执行 ping 操作时,SW1 上的 MAC-ADDR-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-ADDR 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 }