使用網橋模式(bridge networking mode)配置KVM-QUME虛擬機網絡


(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






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM