背景
目前手上只有虛擬機資源,想通過虛擬機來分析交換機鏡像過來的流量。交換機鏡像過來的流量可能是主幹網絡的流量也可能是某臺服務器的流量。
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