KVM虛擬機獲得宿主機指定網卡的流量

背景

目前手上只有虛擬機資源,想通過虛擬機來分析交換機鏡像過來的流量。交換機鏡像過來的流量可能是主幹網絡的流量也可能是某臺服務器的流量。

KVM環境準備

kvm環境準備省略,直接走官方文檔或者其它安裝文檔即可

目前網絡架構描述

宿主機:

1,目前有兩塊物理網卡em1和em2,其中em1是內網網口。em2網卡處於up狀態,沒有配置ip地址,且已經通過交換機配置接入了交換機鏡像過來的流量
2,宿主機創建了br0,並且綁定了em1,並且測試虛擬機的虛擬機網卡爲vnet0

虛擬機:

1,虛擬機只有一個eth0網卡對應宿主機的vnet0虛擬網卡

操作

在宿主機創建一個網橋br1,並且綁定到em2網卡

# brctl addbr br1
# brctl addif br1 em2 
# ifconfig br1 up

查看網橋信息:

# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.a4badb1b4640   no      em1
                            vnet0
br1     8000.a4badb1b4642   no      em2
virbr0      8000.5254007ccfb2   yes     virbr0-nic

在宿主機區上給虛擬機臨時新加一個網卡並且使用br1

# virsh attach-interface oeltest01 --type bridge --source br1

查看虛擬機網卡信息:

# virsh domiflist oeltest01
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:d3:02:0e
vnet1      bridge     br1        -           52:54:00:c4:36:02

關閉br1的mac地址學習功能和降低轉發延遲

# brctl setageing br1 0
# brctl setfd br1 0

Bridge(橋)是 Linux 上用來做 TCP/IP 二層協議交換的設備,與現實世界中的交換機功能相似。Bridge 設備實例可以和 Linux 上其他網絡設備實例連接,既 attach 一個從設備,類似於在現實世界中的交換機和一個用戶終端之間連接一根網線。每當這個從物理網卡設備收到數據時都會把數據轉發到 bridge 上,當 bridge 接收到此數據時,bridge進行一個和現實世界中的交換機類似的處理過程:判斷包的類別(廣播/單點),查找內部 MAC 端口映射表,定位目標端口號,將數據轉發到目標端口或丟棄,自動更新內部 MAC 端口映射表以自我學習。而我們關閉br1的mac地址學習功能,把br1作爲一個hub來使用,使其直接把流量轉發到連接到br1的虛擬網卡vnet1。如果不關閉mac地址學習功能,由於br1收到的鏡像流量中數據包的目的mac地址不是虛擬機的mac地址,故會直接把收到的流量丟棄,不再進行轉發。

結果

查看虛擬機的網卡信息:

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:d3:02:0e brd ff:ff:ff:ff:ff:ff
    inet 172.18.1.150/24 brd 172.18.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::e593:4a16:3009:c9dc/64 scope link
       valid_lft forever preferred_lft forever
3: ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:c4:36:02 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::3c4:d4ec:8176:bcba/64 scope link tentative dadfailed
       valid_lft forever preferred_lft forever
    inet6 fe80::2518:6c5e:3f1c:84fe/64 scope link tentative dadfailed
       valid_lft forever preferred_lft forever
    inet6 fe80::bfac:83e6:8224:7ed3/64 scope link tentative dadfailed
       valid_lft forever preferred_lft forever

在新加的ens7網卡抓包:

# tcpdump -i ens7

現在em2網卡的流量都已經鏡像到虛擬機的網卡了,可以再虛擬機中進行流量分析了

擴展

1,bridge和OpenvSwitch這兩種虛擬機網絡解決方案都支持mirror功能,可以實現虛擬機網口之間的流量鏡像。參考文章:
http://www.just4coding.com/blog/2017/12/02/ovs-mirror/
2,像vmware產品也提供相關鏡像流量的解決方案:
https://docs.vmware.com/cn/VMware-NSX-T/1.1/com.vmware.nsxt.admin.doc/GUID-3D403B24-51F6-4A16-8266-0827BFE9FAA9.html
3,linux bridge參考:
https://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章