免費版網絡損傷儀也能玩轉虛擬機
國產網絡損傷儀SandStorm可以模擬出帶寬限制、時延、時延抖動、丟包、亂序、重複報文、誤碼、擁塞等網絡狀況,在實驗室條件下準確可靠地測試出網絡應用在真實網絡環境中的性能,以幫助應用程序在上線部署前能夠得到充分地測試,確保應用程序正常運行。與軟件Iperf,netperf, dpdk trafficgen相比較,minismb屬於專業硬件網絡發包測試儀, 具備精準測試速率,高吞吐率,可模擬千萬級連接數等特點。
本文主要介紹SandStorm如何在兩臺KVM Linux系統上部署。
實驗設備配置
宿主機:
CPU :Intel(R) Core(TM) i7-6800K CPU @ 3.40GHz 6核
物理主機系統: Fedora-Workstation-Live-x86_64-33-1.2
KVM 系統: Fedora-Workstation-Live-x86_64-33-1.2
網卡:一對 Intel 82576 網卡
主要內容
1. 安裝 KVM 前準備
1.1驗證 cpu 是否支持 KVM
命令:cat /proc/cpuinfo | egrep 'vmx|svm'
效果:
1.2在 BIOS 中開機虛擬化功能
方法:開啓按 delete 鍵進入 BIOS 中--用鍵盤方向鍵選中“Advanced”菜單--選中“Intel Virtual Technology”—切換“Enabled”開啓
(因每臺機器BIOS界面差異,開啓虛擬化功能的具體位置會不同)
1.3關閉 SELinux
命令:vi /etc/sysconfig/selinux
效果:
將SELINUX=disabled 即可, 然後務必重啓機器
2. 安裝 KVM
2.1 安裝 KVM 包
命令:sudo dnf -y install bridge-utils libvirt virt-install qemu-kvm
2.2 安裝 KVM 虛擬機工具
命令:sudo dnf -y install virt-top libguestfs-tools
命令:sudo dnf -y install virt-manager
說明:
libvirt:必須要裝的核心工具
bridge-utils:虛擬機與外界通信的命令管理工具
virt-install:虛擬機安裝工具
virt-manager:虛擬機圖形管理工具(宿主機有桌面環境時可以考慮安裝,命令操作或者遠程控制則不需要)
2.3 重啓宿主機,加載 KVM 相關模塊
命令:reboot
2.4 查看 KVM 模塊是否被正確加載
命令:lsmod | grep kvm
出現以下信息則表示正確加載。
2.5 開啓 KVM 服務,並設置開機啓動
命令:systemctl start libvirtd.service(開啓)
命令:systemctl enable libvirtd.service(開機啓動)
2.6 查看操作結果,出現 Active:active(running)字樣則說明運行情況良好
命令:systemctl status libvirtd(啓動狀態)
命令:systemctl is-enabled libvirtd(是否開機自動啓動)
效果:
3.網橋搭建
3.1管理口網橋搭建
運行以下腳本創建網橋Br0(管理口), 注意 “BR_INTERFACE=enp5s0”要修改成管理網口的接口名字,在本例中使用 enp9s0
腳本代碼:
# make up a bridge name, br0
export BR_NAME=br0
# this will vary depending on the mobo/eth card. see `ip addr` to find device name
export BR_INTERFACE=enp5s0
# Get our device UUID
BR_INT_OG_UUID=$(nmcli -g GENERAL.CON-UUID device show "${BR_INTERFACE}")
# Create bridge
nmcli connection add type bridge autoconnect yes con-name "${BR_NAME}" ifname "${BR_NAME}"
# Disable STP
nmcli connection modify "${BR_NAME}" bridge.stp no
# Add our interface to our bridge
nmcli connection add type bridge-slave autoconnect yes con-name ${BR_INTERFACE} ifname ${BR_INTERFACE} master ${BR_NAME}
# Turn off our old interface
nmcli con down "${BR_INTERFACE}"
# Turn on our new bridge
nmcli con up "${BR_NAME}"
# delete our old interface config
nmcli con delete "${BR_INT_OG_UUID}"
3.2數據口網橋搭建
運行以下腳本創建網橋wan1、wan2(管理口), 注意 需要建立兩個網橋,腳本代碼如下:
# make up a bridge name, wan1
export BR_NAME=wan1
# Create bridge
nmcli connection add type bridge autoconnect yes con-name "${BR_NAME}" ifname "${BR_NAME}"
# Disable STP
nmcli connection modify "${BR_NAME}" bridge.stp no
# Turn on our new bridge
nmcli con up "${BR_NAME}"
通過命令 nmcli connection show 查看新建的三個網橋
效果:
3.3關閉NetworkManager
命令:sudo systemctl stop NetworkManager
4.配置 KVM SandStorm
命令:virt-manager 打開虛擬系統管理器圖形化界面
4.1 添加存儲池
選中QEMU/KVM 在Edit下 打開 Connection Details
點擊後來到 Storage
點擊左下角 + 號 添加鏡像文件路徑
更改存儲池名稱與路徑
找到我們提前準備好的鏡像文件 wanemu.unlimit.img 點擊右上角open;
創建完成
4.2 創建虛擬機
4.3 創建現有磁盤映像 下一步
4.4 選中剛剛添加存儲池路徑中的wanemu.unlimit.img
4.5 選擇操作系統 Generic ,下一步
4.6 選擇內存和CPU設置(以下爲推薦配置),下一步
4.7命名虛擬機並勾選在安裝前自定義配置
按照本文檔 3.網橋配置成功後,默認網絡選擇會是我們建立的網橋br0,點擊完成
4.8 添加網橋wan1、wan2
需要操作的步驟如下:
①對PC1Linux虛擬機配置wan1網橋;
②對PC2Linux虛擬機配置wan2網橋;
③對SandStorm虛擬機配置wan1、wan2網橋;
注:其中br0作爲管理口都是默認配置在虛擬機裏的,無需手動添加;
驗證網橋配置
命令:brctl show
效果:
紅框中的vnet1、vnet3代表linux虛擬機的端口號,而vnet7、vnet8則是SandStorm的端口號,具體端口號可在KVm 中查看,如下:
SandStorm成功啓動
5.配置SandStorm鏡像文件
輸入’y’確認進行配置:
選擇第一個按’Enter’鍵作爲管理口:
選擇DHCP作爲IP地址獲取方式,按’Enter’鍵確認:
按’空格’鍵選擇下面兩個作爲數據口,按’Enter’鍵確認:
輸入’y’確認重啓生效配置:
重啓後稍等幾秒後我們可以看到生成了IP地址:
6.配置SandStorm.exe
打開SandStorm 點擊設備列表 輸入上面獲取到的IP地址:
添加鏈路:
選擇自己想要的仿真功能:
(這邊已時延設置舉例)
(本案例中,兩個接口都設置了固定延遲0.25ms 所以總延遲會在0.5ms左右)
設置好後,點擊確認;
開啓仿真:
設置Port1、Port:
(在Link Select選擇模擬,同樣的操作設置Port2)
在虛擬機中用終端通過互相ping對方的IP地址的方式,獲得流量 並用SandStorm.exe觀察打流情況:
通過在虛擬機中也可驗證是否仿真成功:
我們可以發現,整體延遲確實在0.5ms左右;