第20篇:交换网络故障案例:某企业网环路致全网瘫痪

关键词:STP故障、根桥抢占、MAC地址漂移、CPU占用、BPDU攻击、环路排查、RSTP案例、MSTP案例、企业网


一、引言

在前几篇文章中,我们系统学习了 STP、RSTP 和 MSTP 的原理与配置。这些协议虽能防环,却也常在实战中出现配置偏差或人为失误,从而引发各种故障。这是网络工程师最常遇到的"诡异事件"之一:明明启用了 STP,却仍然出现各种莫名问题。本文通过若干真实的故障案例,带你认识根桥抢占、STP 抖动和 BPDU 攻击等典型问题,建立完整的排查思路和解决方案。

二、核心概念

2.1 交换网络故障分类

故障类型 说明 影响程度
根桥位置不正确 根桥被选举到非预期的交换机 中:转发路径改变
STP 抖动 端口角色频繁变化,MAC 地址表不稳定 高:网络不稳定
环路未防住 STP 未生效或配置错误下环路 极高:广播风暴
BPDU 攻击 恶意设备发送伪造 BPDU 破坏网络 高:根桥被劫持
MST 区域不一致 区域配置不匹配退化为单实例 中:负载分担失效

2.2 故障排查的基本原则

原则 说明
先全局后局部 先检查 STP 是否全局启用,再检查端口配置
先根桥后端口 先确认根桥位置,再排查端口角色
先物理后逻辑 先确认链路物理状态,再分析 STP 逻辑状态
先日志后配置 先查看系统日志,再分析配置差异

三、技术细节

3.1 常见故障症状及对应排查

症状 可能原因 排查命令
网络有短暂中断 STP 抖动、端口反复 UP/DOWN display stp topology-changes
特定 VLAN 不通 MSTP 实例配置不一致、VLAN 映射错误 display stp instance X
多 VLAN 共走同一条链路 MST 区域配置不一致、实例根桥配置错误 display stp region-configuration
端口长时间无法 Forwarding STP 模式不当、定时器异常 display stp brief
接入端口被 STP 阻塞 边缘端口未配置、BPDU 保护未启用 display stp port
CPU 占用 100% 广播风暴、MAC 地址震荡 display cpu-usage

3.2 交换机防环保护机制

保护机制 原理 配置位置 命令
BPDU 保护 边缘端口收到 BPDU 时关闭端口 全局 + 端口 stp bpdu-protection
根保护 防止非根桥的端口收到更优 BPDU 时变为根端口 端口 stp root-protection
环路保护 端口收不到 BPDU 时不进入环路保护状态(防单向环路) 端口 stp loop-protection
TC 保护 限制拓扑变更通知的频率,防止 MAC 表项频繁清空 全局 stp tc-protection
配置保护 防止未授权修改 STP 配置 全局 通过 ACL 或权限控制

四、实战配置/案例分析

4.1 案例一:新设备抢占导致全网路径改变

故障时间:2024 年 6 月 10 日上午 故障范围:某企业约 500 台终端,全 VLAN 受影响

故障现象: 1. 财务部 PC 访问服务器延迟从 2ms 增加到 15ms 2. 视频会议频繁卡顿 3. 网络工程师登录核心交换机发现根桥位置异常

排查过程:

# 步骤1:检查当前根桥
<Core-SW> display stp
  Root Bridge:
    Bridge ID: 32768.00e0.fc12.0005    ← 根桥 ID 是 0005(应该是核心 0001)

# 步骤2:确认核心交换机 Bridge ID
<Core-SW> display stp
  Local Bridge:
    Bridge ID: 32768.00e0.fc12.0001

# 步骤3:登录新接入的交换机
# 上周网络部新接入一台接入交换机 Access-05
<Access-05> display stp
  Root Bridge:
    Bridge ID: 32768.00e0.fc12.0005    ← 本设备就是根桥!
  Local Bridge:
    Bridge ID: 32768.00e0.fc12.0005

# 根因分析
# 1. 核心交换机的 MAC 地址(0001)小于 Access-05 的 MAC 地址(0005)
#    优先级相同时 MAC 小者优先,但此处 Access-05 成了根桥
# 2. 发现 Access-05 的优先级被设为 0(最小值)
<Access-05> display current-configuration | include stp priority
  stp priority 0

# 3. 新员工在 Access-05 上执行了 stp root primary
#    该命令会把优先级直接设为 0(华为默认行为),是全网最小优先级值
#    0 < 32768(核心默认值),所以 Access-05 抢占了根桥

# 修复方案
# 步骤1:在核心交换机重新明确较小优先级,确保成为根桥
[Core-SW] stp priority 0
# (也可用快捷命令 stp root primary,它会把优先级直接设为 0;二者二选一即可)

# 步骤2:新接入交换机恢复默认值
[Access-05] stp priority 32768

# 步骤3:验证拓扑恢复
<Core-SW> display stp brief
  Root Bridge: 4096.00e0.fc12.0001   ← 核心恢复为根桥

# 预防措施
# 1. 接入交换机统一使用默认优先级(32768)
# 2. 核心交换机的下行端口配置根保护
[Core-SW] interface GigabitEthernet 1/0/1
[Core-SW-GigabitEthernet1/0/1] stp root-protection
[Core-SW-GigabitEthernet1/0/1] quit

4.2 案例二:STP 抖动导致网络频繁中断

故障时间:2024 年 8 月 20 日凌晨 故障范围:某园区网络,每 20~30 秒断网一次

故障现象: 1. 终端断网约 2 秒后恢复,循环出现 2. 核心交换机日志中有大量 STP 状态变更事件 3. 抓包发现大量 BPDU 报文

排查过程:

# 步骤1:查看拓扑变更计数
<Core-SW> display stp topology-changes
  Topology Change Count: 2847         ← 拓扑变更非常频繁
  Topology Change Time: 00:00:15      ← 距上次拓扑变更仅 15 秒(时:分:秒)

# 步骤2:观察端口角色变化
<Agg-SW> display stp brief
  MSTID  PortName   PortRole    PortSt
  0      GE0/0/1    Root        Forwarding
  0      GE0/0/2    Alternate   Discarding

# 30 秒后再次查看
<Agg-SW> display stp brief
  MSTID  PortName   PortRole    PortSt
  0      GE0/0/1    Alternate   Discarding    ← 角色反转
  0      GE0/0/2    Root        Forwarding

# 步骤3:检查链路质量
<Agg-SW> display interface GigabitEthernet 0/0/1
  Input:
    runts: 15000                       ← 异常
    giants: 8500                       ← 异常
    input errors: 23000
    CRC: 12000                         ← CRC 错误很多

# 结论:GE0/0/1 的模块或光功率异常
# 链路频繁 UP/DOWN(flapping),触发 STP 拓扑变更
# 每次拓扑变更都会触发 MAC 地址表老化

# 修复
# 步骤1:更换光模块
# 步骤2:检查对端端口的光功率
<Agg-SW> display transceiver interface GigabitEthernet 0/0/1
  RX power: -28dBm                    ← 偏低(正常应为 -3 ~ -15dBm)

# 步骤3:配置环路保护,防止误判
[Agg-SW] interface GigabitEthernet 0/0/1
[Agg-SW-GigabitEthernet0/0/1] stp loop-protection
[Agg-SW-GigabitEthernet0/0/1] quit

# 步骤4:配置 TC 保护,限制 MAC 表频繁清空
[Agg-SW] stp tc-protection
# 部分 VRP 版本支持阈值控制
[Agg-SW] stp tc-protection threshold 6

4.3 案例三:BPDU 攻击导致根桥被劫持

故障时间:2024 年 10 月 5 日上午 故障范围:某办公楼全楼终端无法上网

故障现象: 1. 运维人员发现根桥位置异常变化 2. 核心交换机日志中出现未知 BPDU 3. 排查发现某终端连接端口在发送伪造 BPDU

排查过程:

# 步骤1:检查根桥
<Core-SW> display stp
  Root Bridge:
    Bridge ID: 0.0200.0000.0000       ← 异常 Bridge ID
    # 优先级为 0,MAC 为 02:00:00:00:00:00,明显是伪造的

# 步骤2:查看根端口收到的 BPDU
<Access-SW> display stp port GigabitEthernet 0/0/1
  # 发现 GE0/0/1 收到的 BPDU 携带异常 Bridge ID

# 步骤3:定位攻击源
# GE0/0/1 下联的是一台员工 PC
# PC 上运行了某款网络工具,可手工伪造 BPDU 报文

# 这是 BPDU 攻击(也称为 Evil Twin 攻击)的常见表现
# 攻击者发送优先级为 0 的 BPDU,将自己的设备伪装成根桥
# 进而控制 STP 拓扑,将其他设备的流量引导经过自己的设备实施中间人攻击

# 修复
# 步骤1:关闭被攻击端口
[Access-SW] interface GigabitEthernet 0/0/1
[Access-SW-GigabitEthernet0/0/1] shutdown
[Access-SW-GigabitEthernet0/0/1] quit

# 步骤2:在边缘端口启用 BPDU 保护
[Access-SW] stp bpdu-protection
[Access-SW] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/24
[Access-SW-Port-range] stp edged-port enable
[Access-SW-Port-range] quit

# 步骤3:在核心交换机的所有下行端口配置根保护
[Core-SW] interface range GigabitEthernet 1/0/1 to GigabitEthernet 1/0/4
[Core-SW-Port-range] stp root-protection
[Core-SW-Port-range] quit
# 根保护下端口即使收到更优 BPDU,也不会改变端口角色

# 步骤4:对 PC 进行安全检查(杀毒、删除异常工具)

4.4 案例四:MSTP 负载分担失效

故障现象:MSTP 配置后,VLAN 10/20 和 VLAN 30/40 的流量全部走 Core-A,Core-B 的链路闲置。

# 检查 Core-B 的 MST 实例信息
<Core-B> display stp instance 1
  Root Bridge:
    Bridge ID: 4096.00e0.fc12.0001   ← 实例1的根桥是 Core-A(正确)

<Core-B> display stp instance 2
  Root Bridge:
    Bridge ID: 4096.00e0.fc12.0001   ← 实例2的根桥也是 Core-A(错误!)
  # 实例2的根桥应是 Core-B

# 排查 Core-B 的配置
<Core-B> display current-configuration | include stp instance
  # 没有发现 instance 2 root primary 的配置

# 结论:Core-B 没有指定自己是实例 2 的根桥
# 两台设备在实例 2 中都是 Core-A 为主根,链路负载分担自然失败

# 修复
[Core-B] stp instance 2 root primary

# 验证
<Access-1> display stp brief
  MSTID  PortName   PortRole    PortSt
  0      GE0/0/25   M-RP        Forwarding
  1      GE0/0/25   M-RP        Forwarding     ← 实例1走 Core-A
  2      GE0/0/26   A-RP        Forwarding     ← 实例2走 Core-B(已恢复)

五、总结

故障类型 症状 排查方法 预防措施
根桥抢占 根桥位置异常、路径改变 检查优先级配置 手动指定根桥优先级
STP 抖动 频繁断网、拓扑变更计数大 检查链路质量、光功率 环路保护、TC 保护
BPDU 攻击 异常 Bridge ID、根桥被劫持 追踪 BPDU 来源 BPDU 保护、根保护
负载分担失效 多 VLAN 共走同一条链路 检查 MSTI 配置、根桥选举 MSTP 配置检查清单
端口被阻塞 终端端口无法通信 检查边缘端口配置 接入端口设为边缘端口
保护机制 配置位置 阻止场景
BPDU 保护 边缘端口 BPDU 攻击、用户私接交换机
根保护 核心侧下行端口 非预期设备成为根桥
环路保护 所有非边缘端口 单向链路或 BPDU 丢失
TC 保护 全局 频繁拓扑变更导致 MAC 表清空
排错命令 用途
display stp brief 快速查看端口角色和状态
display stp 查看完整 STP 信息
display stp topology-changes 排查抖动
display stp region-configuration 检查 MST 区域配置
display stp instance X 查看特定实例状态
display logbuffer \| include STP 查看 STP 相关日志

思考

  1. 根保护(root-protection)配置在核心交换机的下行端口上,如果该端口收到一个优先级更低的 BPDU,会发生什么?端口会关闭吗?
  2. TC 保护限制了每分钟处理的拓扑变更次数,超出限制的拓扑变更会被丢弃吗?丢弃后会产生什么影响?
  3. 在一个部署 MSTP 的园区网中,发现只有接入交换机的端口配置了 BPDU 保护,而核心交换机没有配置。核心交换机是否仍会受到 BPDU 攻击的影响?

下篇预告:第21篇:链路聚合 Eth-Trunk:手工模式与 LACP 模式