網絡配置
QEMU支持的網絡模式
qemu-kvm主要向客戶機提供了4種不同模式的網絡。
1)基於網橋(bridge)的虛擬網卡;
2)基於NAT的虛擬網絡
3)QEMU內置的用戶模式網絡(user mode networking)
4)直接分配網絡設備的網絡(包括VT-d和SR-IOV)
一、使用網橋模式
在qemu-kvm命令行中,關於bridge模式的網絡參數如下:
-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]
1) 安裝bridge-utils和tunctl軟件包
# yum -y install bridge-utils tunctl
2) 查看tun模塊是否被加載
# lsmod | grep tun
如果沒有加載,則運行modprobe tun進行加載。如果已經將tun編譯到內核(可查看內核config文件中是否有"CONFIG=y"選項),則不需要加載了。如果內核完全沒有配置TUN模塊,則需要重新編譯內核才行。
# grep 'CONFIG_TUN' /boot/config-`uname -r`
3) 檢查/dev/net/tun的權限,需要讓當前用戶擁有讀寫的權限。
# ls -lh /dev/net/tun
4) 建立一個bridge,將其綁定到一個可正常工作的網絡接口上,同時讓bridge成為連接本機與外部網絡的接口。
# brctl addr br0
# brctl addif br0 eth0
# brctl stp br0 on
# route
# ping 192.168.1.254
或者編輯配置文件建立網橋
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BRIDGE="br0" [root@kvm ~]# # cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE="br0" ONBOOT="yes" TYPE="Bridge" BOOTPROTO="none" IPADDR="192.168.100.10" NETMASK="255.255.255.0" STP="on" DELAY="0"
# service network restart
# dmesg ………… device virbr0-nic entered promiscuous mode br0: port 1(eth0) entering forwarding state
…………
建立bridge后的狀態是讓網絡接口eth0進入混雜模式(promiscuous mode,接收網絡中所有數據包),網橋br0進入轉發狀態(forwarding state),並且與eth0具有相同的MAC地址,
5)准備qemu-ifup和qemu-ifdown腳本
客戶機啟動網絡前會執行的腳本由"script"選項配置的(默認為/etc/qemu-ifup)。一般在該腳本上創建一個TAP設備並將其中與bridge綁定起來。
#!/bin/bash #filename: /etc/qemu-ifup switch=br0 if [ -n "$1" ];then #tunctl -u $(whoami) -t $1 #一些較舊版本中不會自動創建TAP設備 ifconfig $1 up sleep 0.5s brctl addif $switch $1 exit 0 else echo 'Error: no specifed interface.' exit 1 fi
由於qemu-kvm工具在客戶機關閉時會解除TAP設備的bridge綁定,也會自動刪除已不再使用的TAP設備,所有qemu-ifdown這個腳本不是必需的,最好設置為downscript=no(qemu-kvm的script參數是虛擬機啟動時執行的腳本,downscript參數是虛擬機關閉時執行的參數)
# cat /etc/qemu-ifdown #!/bin/bash switch=br0 if [ -n $1 ];then tunctl -d $1 brctl delif ${switch} $1 ip link set $1 down exit 0 else echo "Error: no interface specified" exit 1 fi
6)創建一個虛擬機
創建一個稀梳格式的磁盤
# dd if=/dev/zero of=/root/centos6.img bs=1M oflag=direct seek=4095 count=1
使用鏡像安裝一個centos6的minimal系統
# qemu-kvm -m 768 \ -smp 2 \ --boot order=cd \ --hda /root/centos6.img \ --cdrom /root/CentOS-6.9-x86_64-minimal.iso
7)用qemu-kvm命令啟動bridge模式的網絡
在宿主機中,用命令行啟動客戶機並檢查bridge的狀態,如下:
# qemu-kvm /root/centos6.img \ -smp 2 \ -m 1024 \ -net nic \ -net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no \ -vnc :0 \ -daemonize
虛擬機啟動后,使用下面命令可以看到TAP0被創建了
# brctl show # ls /sys/devices/virtual/net/ # vcnview :0
關閉虛擬機后,使用下面可以看到TAP0被刪除了
# brctl show # ls /sys/devices/virtual/net/