首先,網橋配置好之后就能實現一個簡單的交換機,而交換機的特點就是MAC地址學習,那么KVM的網卡設置成網橋之后,也就是相當於連接到了交換機上。
此時如果要實現在二層交換機或三層交換機做端口鏡像,並把這個鏡像的流量轉到這個虛擬機的網卡上,那么會出現無法實現的問題,下面我來分析一下原因:
1、配置好網橋就成了一個交換機,注意,不是集線器。
2、那么鏡像端口的流量只會到達物理網卡上,而物理網卡組成的交換機認得也就是物理網卡的MAC地址,那么此時KVM的網卡不會受到任何流量。因為KVM也是有MAC地址,並且這個MAC地址只會認為是交換機中的一台電腦而已。
3、那么如果此時要將物理網卡流量轉到KVM的網卡上,實現思路估計也是在虛擬交換機上做端口鏡像,而這種實現幾乎是不可能的。
4、那換一種思路,將這個網橋做成的交換機做成集線器,集線器沒有MAC地址學習,當有流量時會立刻分發到各個端口的主機,也就是實現端口鏡像。
通過以上分析,那么只需要這幾個命令即可:
# 關閉br1的mac地址學習功能和降低轉發延遲
brctl setageing br1 0 brctl setfd br1 0
注意:這幾個命令寫在開機啟動項/etc/rc.local上使其開機生效。研究過了,沒別的辦法可以實現。
以下內容為轉載:
Bridge(橋)是 Linux 上用來做 TCP/IP 二層協議交換的設備,與現實世界中的交換機功能相似。Bridge 設備實例可以和 Linux 上其他網絡設備實例連接,既 attach 一個從設備,類似於在現實世界中的交換機和一個用戶終端之間連接一根網線。每當這個從物理網卡設備收到數據時都會把數據轉發到 bridge 上,當 bridge 接收到此數據時,bridge進行一個和現實世界中的交換機類似的處理過程:判斷包的類別(廣播/單點),查找內部 MAC 端口映射表,定位目標端口號,將數據轉發到目標端口或丟棄,自動更新內部 MAC 端口映射表以自我學習。而我們關閉br1的mac地址學習功能,把br1作為一個hub來使用,使其直接把流量轉發到連接到br1的虛擬網卡vnet1。如果不關閉mac地址學習功能,由於br1收到的鏡像流量中數據包的目的mac地址不是虛擬機的mac地址,故會直接把收到的流量丟棄,不再進行轉發。
參考:
http://blog.51cto.com/leejia/2147300(以上內容部分轉自此篇文章)
http://www.just4coding.com/blog/2017/12/02/ovs-mirror/
https://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/index.html