(1)linux要工作在網橋模式,所以必須安裝兩個RPM包。即:bridge-utils和tunctl。它們提供所需的brctl、tunctl命令行工具。能夠使用yum在線安裝:
[root@server3 ~]# yum install bridge-utils
(2)查看tun模塊是否載入,例如以下:
[root@server3 ~]# lsmod | grep tun tun 16577 2 vhost_net
假設tun模塊沒有載入,則執行“modprobe tun”命令來載入就可以;假設已經將tun編譯到內核(可查看內核config文件里是否有“CONFIG_TUN=y” 選項),則不須要載入了;而假設內核全然沒有配置TUN模塊,則須要又一次編譯內核才行了。
(3)檢查/dev/net/tun的權限,須要讓當前用戶擁有可讀可寫的權限。
[root@server3 ~]# ll /dev/net/tun crw-rw-rw- . 1 root root 10, 200 4月 23 10:35 /dev/net/tun
(4)建立一個bridge。並將其綁定到一個能夠正常工作的網絡接口上,並讓bridge成為連接本機與外部網絡的接口。
創建一個bridge能夠直接在命令行中操作,也能夠通過寫配置文件來實現,這里是通過寫配置文件來實現的。在/etc/sysconfig/network-scripts文件夾下,創建一個ifcfg-br0 文件,其類型設為Bridge:
[root@Server3 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=bridge
BOOTRPOTO=none
IPADDR=192.168.1.66
NETMASK=255.255.255.0
ONBOOT=yes
然后將物理接口橋接到橋接器
改動ifcfg-eth0。僅僅需在最后加上“BRIDGE=br0”,將其橋接到br0
[root@Server3 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.1.30
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=00:15:17:9D:09:FE
BRIDGE=br0
重新啟動物理機網絡服務
[root@Server3 ~]# service network restart
查看當前橋接情況
[root@Server3 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0015179d0e90 no eth0 virbr0 8000.525400ee6f70 yes virbr0-nic
(5)開始配置虛擬機網絡參數
在qemu-kvm的命令行中,關於bridge模式的網絡參數例如以下:
-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]
該配置表示連接宿主機的TAP網絡接口到n號VLAN中。並使用file和dfile兩個腳本在啟動客戶機時配置網絡和在關閉客戶機時取消網絡配置。tap參數。表明使用TAP設備。
TAP是虛擬網絡設備,它仿真了一個數據鏈路層設備(ISO七層網絡結構的第二層),它像以太網的數據幀一樣處理第二層數據報。
而TUN 與TAP類似,也是一種虛擬網絡設備,它是對網絡層設備的仿真。TAP被用於創建一個網絡橋,而TUN與路由相關。
vlan=n 設置該設備VLAN編號,默認值為0。
name=name 設置名稱。在QEMU monior中可能用到。一般由系統自己主動分配就可以。
fd=h 連接到如今已經打開着的TAP接口的文件描寫敘述符,一般來說不要設置該選項。而是讓QEMU會自己主動創建一個TAP接口。
當使用了fd=h的選項后。ifname、script、downscript、helper、vnet_hdr等選項都不可使用了(不能與fd選項同一時候出如今命令行中)。
ifname=name 設置在宿主機中加入的TAP虛擬設備的名稱(如tap1、tap5等等),不設置這個參數時。QEMU會依據系統中眼下的情況。產生一個TAP接口的名稱。
script=file 設置宿主機在啟動客戶機時自己主動運行的網絡配置腳本。假設不指定,其默認值為“/etc/qemu-ifup”這個腳本,可指定自己的腳本路徑以代替默認值;假設不須要運行腳本,則設置為“script=no”。downscript=dfile 設置宿主機在客戶機關閉時自己主動運行的網絡配置腳本。假設不設置,其默認值為“/etc/qemu-ifdown”;若客戶機關閉時宿主機不須要運行腳本,則設置為“downscript=no”。
helper=helper 設置啟動客戶機時在宿主機中執行的輔助程序,包含去建立一個TAP虛擬設備,它的默認值為/usr/local/libexec/qemu-bridge-helper,一般不用自己定義,採用默認值就可以。
sndbuf=nbytes 限制TAP設備的發送緩沖區大小為n字節,當須要流量進行流量控制時能夠設置該選項。其默認值為“sndbuf=0”,即不限制發送緩沖區的大小。
其余幾個選項都是與virtio相關的,這里暫不做過多的介紹。
准備qemu-ifup和qemu-ifdown腳本。
在客戶機啟動網絡前,會運行的腳本是“script”選項是由配置的(默覺得/etc/qemuif-up),一般在該腳本中去創建一個TAP設備並將其與bridge綁定起來。例如以下是qemu-ifup腳本的演示樣例,當中“$1”是qemu-kvm命令工具傳遞給腳本的參數。它是客戶機使用的TAP設備名稱(如tap0、tap1等,也或者是前面提及的ifname選項的值)。另外,當中的“tunctl”命令這一行是不須要的。由於qemu-bridge-helper程序已經會創建好TAP設備,這里列出來僅僅是為了可能在一些版本號較舊的qemu-kvm中沒有自己主動創建TAP設備。
#!/bin/bash #This is a qemu-ifup script for bridging. #You can use it when starting a KVM guest with bridge mode network. #set your bridge name switch=br0 if [ -n "$1" ]; then #create a TAP interface; qemu will handle it automatically. #tunctl -u $(whoami) -t $1 #start up the TAP interface ip link set $1 up sleep 1 #add TAP interface to the bridge brctl addif ${switch} $1 exit 0 else echo “Error: no interface specified” exit 1 fi
注意:這個腳本要改為可運行文件,才干使用:
[root@Server3 ~]# chmod +x /etc/qemu-ifup因為qemu-kvm工具在客戶機關閉時會去解除TAP設備的bridge綁定,也會自己主動去刪除已不再使用的TAP設備,所以qemu-ifdown這個腳本沒必要的。最好設置為“downscript=no”。例如以下列出一個qemu-ifdown腳本的演示樣例,是為了說明清理bridge模式網絡的環境的步驟。在qemu-kvm沒有自己主動處理時能夠使用。
#!/bin/bash #This is a qemu-ifdown script for bridging. #You can use it when starting a KVM guest with bridge mode network. #Don’t use this script in most cases; QEMU will handle it automatically. #set your bridge name switch=br0 if [ -n "$1" ]; then # Delete the specified interfacename tunctl -d $1 #release TAP interface from bridge brctl delif ${switch} $1 #shutdown the TAP interface ip link set $1 down exit 0 else echo “Error: no interface specified” exit 1 fi
如今開始執行虛擬機,命令例如以下所看到的:
[root@Server3 ~]# /usr/local/qemu-post-june-04-2012/bin/qemu-system-x86_64 -smp 2 -m 1024 /images/test.img -net nic -net tap,ifname=tap1,script=/etc/qemuif-up,downscript=no -vnc :6 -machine accel=kvm查看網橋情況:
[root@Server3 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0015179d09fe yes eth0 tap1 virbr0 8000.52540092d0d1 yes virbr0-nic
能夠看到br0下有兩個網卡,然后僅僅要把虛擬機的IP設置成和網橋在一個網段內,就能夠實現虛擬機與物理機之間的通信。
注意:在進行配置時,要關掉NetworkManager。否則操作會出錯:
[root@Server3 ~]# service NetworkManager stop