?更多銀河麒麟操作系統產品及技術討論,歡迎加入銀河麒麟操作系統官方論壇
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,在宿主機上tcpdump分別在team1-slave1,team1-slave2,vnet0三個口抓icmp報文,虛擬機1里啟動ping 網關ip,發現team1-slave1、team2-slave2幾乎同時收到arp reply報文,但是vnet0沒有收到該報文,只有arp request報文,所以虛擬機網絡一直不正常。
- 在宿主機做ifconfig team1-slave1 down,虛擬機網絡恢復正常。
- 在宿主機做ifconfig team1-slave1 up,虛擬機網絡異常。
- 在宿主機做ifconfig team1-slave2 down,虛擬機網絡正常。
- 宿主機把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模式,交換機側無需任何修改。