【银河麒麟高级服务器操作系统实例】虚拟机桥接网络问题分析及处理

更多银河麒麟操作系统产品及技术讨论,欢迎加入银河麒麟操作系统官方论坛

https://forum.kylinos.cn


了解更多银河麒麟操作系统全新产品,请点击访问

麒麟软件产品专区:https://product.kylinos.cn

开发者专区:https://developer.kylinos.cn

文档中心:https://document.kylinos.cn


服务器环境以及配置

|----------|--------------|---------------------------------|
| 系统环境 | 物理机/虚拟机/云/容器 | 虚拟机 |
| 网络环境 | 外网/私有网络/无网络 | 私有网络 |
| 硬件环境 | 机型 | - |
| 硬件环境 | 处理器 | 鲲鹏920 |
| 硬件环境 | 内存 | DDR4 |
| 硬件环境 | 整机类型/架构 | arm |
| 软件环境 | 具体操作系统版本 | 银河麒麟高级服务器操作系统 V10SP2 |
| 软件环境 | 内核版本 | 4.19.90-24.4.v2101.ky10.aarch64 |

现象描述

银河麒麟高级服务器操作系统V10SP2系统,使用kvm运行虚拟机,如果是物理机两个网口做成一个team,然后team接网桥,虚拟机再通过这个网桥连接网络,这种方式网络会有问题。

本地环境验证,使用配置方式一直有问题,采用nmcli如下配置:

物理机:

1、创建team及slave

nmcli connection add type team con-name team1 ifname team1 config '{"runner": {"name": "roundrobin"}, "link_watch": {"name": "ethtool"}}'

nmcli connection add type team-slave con-name team1-port1 ifname ens224 master team1

nmcli connection add type team-slave con-name team1-port2 ifname ens256 master team1

2、创建网桥

mcli connection add type bridge con-name br1 ifname br1

配置网桥IP

3、添加team1到br1

nmcli c mod team1 master br1

4、激活网络

nmcli connection up team1

nmcli connection up team1-port1

nmcli connection up team1-port2

nmcli connection up br1

虚拟机连接br1

图形化操作

实际测试下来,确实会发现网络不通,此时如把team1从网桥删掉,换成物理网口,网络就可以正常使用,单独配置team,也可以正常使用。

现象分析

  1. 针对该问题,做了以下测试。
  2. 启动虚拟机1,在宿主机上tcpdump分别在team1-slave1,team1-slave2,vnet0三个口抓icmp报文,虚拟机1里启动ping 网关ip,发现team1-slave1、team2-slave2几乎同时收到arp reply报文,但是vnet0没有收到该报文,只有arp request报文,所以虚拟机网络一直不正常。
  3. 在宿主机做ifconfig team1-slave1 down,虚拟机网络恢复正常。
  4. 在宿主机做ifconfig team1-slave1 up,虚拟机网络异常。
  5. 在宿主机做ifconfig team1-slave2 down,虚拟机网络正常。
  6. 宿主机把team1从网桥踢出,将一物理网卡加入网桥,虚拟机网络正常。

分析总结

根据上述分析结果,梳理网络拓扑,本地搭建环境复现问题,发现Linux bridge的fdb表存在问题:

图1 虚拟机mac地址

图二 宿主机mac地址

图三 网桥fdb表

由图三可见,虚拟机的mac地址,应与vnet0同属同一port,但实际却与team网卡同属同一port。故报文在二层即无法到达vnet0,符合上节的抓包现象。

进一步分析fdb表为何不对,梳理网络拓扑及报文路径:

由此可知,由于使用team0(roundrobin )模式,虚拟机arp广播报文,经vnet0进入网桥,此时网桥mac学习到虚拟机的mac地址对应vnet0的port,此时fdb表是正确的。arp广播报文通过team网卡发出,由于是轮询模式,此时两个物理网卡均会发送arp广播报文。交换机收到物理网卡的广播报文后,会向所有端口进行转发,此时也会转发到team的另一slave网卡。此时网桥会收到该arp广播报文,并进行mac地址学习,记录虚拟机的mac地址对应team的port,此后fdb表便一直为错误的,后续报文均不通。

分析结果

通过上述分析,需要限制交换机将广播报文发回聚合端口,当服务器设置为mode0时,交换机需要设置为手动聚合模式。

后续计划与建议

如果使用mode0模式需要配置交换机为手动聚合模式,或者设置Linux网桥强制泛洪;如果使用mode1模式,交换机侧无需任何修改。

相关推荐
文牧之12 分钟前
PostgreSQL 常用日志
运维·数据库·postgresql
钢铁男儿13 分钟前
C# 深入理解类:面向对象编程的核心数据结构
开发语言·数据结构·c#
蓝莓味柯基18 分钟前
DevOps:概念与学习路径
运维·学习·devops
FJW02081433 分钟前
【Linux】web服务器的部署和优化
linux·运维·服务器·rhce
Doker 多克38 分钟前
Python-Django系列—部件
开发语言·python
Linux运维老纪40 分钟前
Python文件操作及数据库交互(Python File Manipulation and Database Interaction)
linux·服务器·数据库·python·云计算·运维开发
weixin_4307509341 分钟前
智能小助手部署 Win10 + ollama的Deepseek + CentOS+ maxKB
linux·人工智能·机器学习·语言模型·自然语言处理·centos
有谁看见我的剑了?1 小时前
docker 运行时权限和 Linux 能力了解
linux·docker·容器
平生不喜凡桃李1 小时前
Linux 进程控制
linux·运维·服务器
hope_wisdom1 小时前
Linux系统编程之内存映射
linux·mmap·内存映射·munmap