交换机广播抑制导致的虚拟机流量异常

小编 2026-06-10 阅读:909 评论:0
故障现象在监控上发现部分虚拟机每隔大概20分钟就会出现一次入口流量高峰,大小在1MB/s左右: ...

故障现象

在监控上发现部分虚拟机每隔大概20分钟就会出现一次入口流量高峰,大小在1MB/s左右:

交换机广播抑制导致的虚拟机流量异常

 

故障原因

交换机上配置了广播抑制,导致整个环境中没有广播包。在计算节点上Linux Bridge的MAC learning table中网关对应的MAC地址过期后(默认值300秒),没有及时更新,Linux Bridge会把本来应该发到网关对应端口的数据包发送到所有端口。部分业务Client虚拟机会持续向业务Server发送数据,当网关MAC 失效后,本来发送给业务Server的数据包被发送给了同宿主机上的所有虚拟机,因此出现入口流量峰值。

 

处理方法

方法一:解除交换机上的广播抑制。

方法二:配置Linux Bridge的MAC Ageing Time为1500秒,此时间大于交换机ARP的过期时间,保证在Linux Bridge上的网关MAC地址记录过期之前收到来自网关的ARP请求包,因而可以及时更新网关MAC地址。

 

排查过程

在虚拟机出现流量峰值时,登陆到虚拟机使用iftop查看流量详情:

# iftop -nNBP

交换机广播抑制导致的虚拟机流量异常

发现峰值流量的源目的地址都不是本机,于是分别查看源目的地址机器,经过粗略分析判断目的地址是业务Server,源地址是某台业务Client服务器,业务Client发送给业务Server的流量窜到其他虚拟机上了。

下意识感觉受害虚拟机跟这两个机器应该存在某些关联,由于目的机器是一台物理机,关系应该不大,于是重点查看源地址,这是一台虚拟机。果然,发现这两台虚拟机位于同一台宿主机上。查看宿主机上的其他虚拟机,存在同样的问题:

交换机广播抑制导致的虚拟机流量异常

继续去受害虚拟机上抓包,分析错误发来的数据包存在什么特征,因为Linux Bridge执行二层转发的功能,于是打印出数据包的链路头信息:

# tcpdump -e -nnn host 10.212.26.241 and host 10.212.13.14

交换机广播抑制导致的虚拟机流量异常

发现目的MAC都是10:0a:10:0b:10:0c,这明显不是一个正常的MAC地址,查看arp表:

交换机广播抑制导致的虚拟机流量异常

显示这个MAC地址对应的是网关。到宿主机上查看arp表,结果一样:

交换机广播抑制导致的虚拟机流量异常

猜测这是在交换机上的封装过的MAC地址,这不重要,对于整个虚拟化环境来说,它就是网关的MAC地址。在宿主机上抓包:

交换机广播抑制导致的虚拟机流量异常

可以看到源目的IP正常通信的往来数据包。而且在正常情况下,受害虚拟机没有收到误转发流量包时,物理机上也能抓到形式一样的数据包。那么在什么情况下,本应发送给网关的数据包会被网桥错误地转发给虚拟机呢?

经过一番搜索,查到了Linux Bridge的MAC learning table这个东西,交换机上也有一样的概念。它记录着网桥的每个端口连接着同个二层网络的哪些MAC地址,即便跨越了多个交换机。使用brctl showmacs BR-NAME查看Linux Bridge的MAC learning table:

交换机广播抑制导致的虚拟机流量异常

而在出现异常流量时,MAC learning table是这样的:

交换机广播抑制导致的虚拟机流量异常

明显看到网关的MAC消失了。这是因为默认MAC learning table记录的过期时间是300秒,超过300秒后记录就被删除。而每当收到某个端口数据包时,Linux Bridge会更新这个数据包的源MAC地址到MAC learning table。

经过观察发现MAC learning table中网关的记录会不定期地在ageing time到达几十秒、一百多秒时更新一次,但是周期性地会有一次不更新,在ageing time达到300秒后消失几分钟,也正是在网关MAC消失的这个时间段内虚拟机上会出现异常流量。

在物理交换机上,如果数据包的目的MAC地址在MAC learning table里找不到,那么这个数据包会被丢弃,但是由于我们的Linux Bridge没有开启STP,它会将数据包发送到所有端口,类似一个集线器。

因为有多个集群,为什么其他集群是正常的而只有这个集群出现问题。在不同集群的计算节点上抓包:

交换机广播抑制导致的虚拟机流量异常

交换机广播抑制导致的虚拟机流量异常

看到在正常环境中会频繁收到来自网关的ARP广播,所已Linux Bridge能够及时更新MAC learning table,而在问题集群中,完全没有广播包,只有在网关需要查询这个主机上存在的机器时,才会发送一个ARP单播包。这超出了正常的认知,怀疑是交换机做了特殊配置,跟网络组沟通,又向厂商询问后,得到回复确实是为了避免泛洪,交换机上配置了广播抑制,才出现这样的情况。

那么如何解决呢,一个办法是关闭交换机的广播抑制,但是这样会引入广播泛洪的风险。另一个办法是将计算节点Linux Bridge的MAC Ageing Time调高,使它超过交换机上ARP的过期时间,这样就能保证在网关MAC地址记录过期之前收到来自网关的ARP请求包,因而可以及时更新网关MAC地址。目前设置Ageing Time为1500秒:

# brctl setageing brqa96cd777-01 1500

为了保证配置不失效,将命令写入/sbin/ifup-local脚本,这个脚本会在每个网络设备启动后,被/etc/sysconfig/network-scripts/ifup-post调用。/sbin/ifup-local内容:

if [[ "$1" == "brq"* ]]; then    /sbin/brctl setageing $1 1500fi

 

参考文档

How to disable MAC learning in a Linux bridge

ARP Timeout Value for Cisco 3750, Linux and Windows

How to configure a Linux Bridge to act as a Hub instead of a Switch

CentOS: Start custom script automatically after network startup

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表