MAC 地址冲突的症状与排查步骤
同一广播域里出现两个相同的 MAC 地址,后果不是彻底断网,而是间歇性、看起来随机的故障。正因为症状不稳定,这类问题往往被误判成线路或驱动问题,排查方向一开始就跑偏。
典型症状
双方都时断时续。 交换机的 MAC 地址表只能记录一个端口。两台设备轮流发包,表项就在两个端口之间不停翻转。发给这个地址的帧被送往最近学到的那个端口,另一台设备就收不到。表现是 ping 丢包呈块状,而不是均匀丢失。
ARP 表里映射不断变化。 同一个 MAC 对应的 IP 反复改变,或者同一个 IP 的 MAC 稳定但通信忽好忽坏。
交换机日志报错。 管理型交换机通常会记录类似 "host flapping" 或 "MAC move" 的告警,这是最直接的证据。
操作系统弹出地址冲突提示。 这通常指 IP 冲突,但 IP 冲突的根源有时正是 MAC 层面的问题。
常见原因
虚拟机克隆没改地址。 这是目前最常见的来源。复制一份虚拟机镜像后直接启动,两台虚机拥有同样的虚拟网卡地址。相关规则见虚拟机与容器的 MAC 地址。
廉价网卡或嵌入式设备批次重复。 部分低价 USB 网卡、开发板、监控摄像头存在整批烧入同一地址的情况。这类设备的 MAC 往往查不到厂商或指向模块供应商。
手工修改时抄了别人的地址。 见各系统修改 MAC 地址的方法。
网络环路造成的假冲突。 交换机之间形成环路时,同一个 MAC 会从多个端口被看到,日志表现与真实冲突几乎一样。这种情况要先查生成树状态。
主备设备配置了相同地址。 一些高可用方案共用虚拟 MAC,若主备同时激活就构成冲突。
排查步骤
第一步,确认是不是真的重复。 在交换机上查这个地址:
show mac address-table address 001b.a912.3456
如果反复在两个端口之间跳,或者日志里有 MAC move 记录,基本确认。同时检查生成树,排除环路造成的假象:
show spanning-tree
第二步,找出两个端口分别接什么。 顺着端口逐级追踪,方法见根据 MAC 定位设备。如果其中一个是上行口,说明另一台设备在下游交换机。
第三步,隔离验证。 把其中一个端口 shutdown,观察故障是否消失:
interface Gi1/0/7
shutdown
故障立即恢复就确认了。这是最可靠的判定手段。
第四步,从主机侧确认。 在两台嫌疑设备上分别查看接口地址:
ip link show # Linux
ifconfig # macOS
getmac /v # Windows
预防措施
给虚拟机使用随机地址。 主流虚拟化平台都能自动生成,克隆时选择"重新生成 MAC"而不是"保留"。
开启端口安全。 限制每端口的 MAC 数量,冲突发生时交换机会直接告警甚至关闭端口,把间歇故障变成明确故障,反而更容易排查。配置见交换机 MAC 地址表。
采购时抽检。 批量采购廉价网络设备时,抽几台查一下 MAC 是否重复,把地址贴到查询页也能看出是否来自可疑的模块供应商。
手工改地址一律用本地管理地址。 第二个十六进制字符取 2、6、A、E,从设计上避开与真实设备冲突的可能。