KVM/QEMU橋接網絡設置
配置kvm的網絡有2種方法。其一,默認方式為用戶模式網絡(Usermode Networking),數據包由NAT方式通過主機的接口進行傳送。其二,使用橋接方式(Bridged Networking),外部的機器可以直接聯通到虛擬機,就像聯通到你的主機一樣。
第一,用戶模式
虛擬機可以使用網絡服務,但局域網中其他機器包括宿主機無法連接它。比如,它可以浏覽網頁,但外部機器不能訪問架設在它裡面的web服務器。
默認的,虛擬機得到的ip空間為10.0.2.0/24,主機ip為10.0.2.2供虛擬機訪問。可以ssh到主機(10.0.2.2),用scp來拷貝文件。
第二,橋接模式
這種模式允許虛擬機就像一台獨立的主機一樣擁有網絡。這種模式需要網卡支持,一般的有線網卡都支持,絕大部分的無線網卡都不支持
A) 在主機上創建一個網絡橋
1)安裝bridge-utils
sudo apt-get install bridge-utils
2)改變網絡設置,先停止網絡
sudo invoke-rc.d networking stop
如果是用遠程連接進行設置,設置完後,重啟網絡sudo invoke-rc.d networking restart,如果中途有一步錯誤,將不能連接
3)修改/etc/network/interfaces,直接用下面的替換。
a) 靜態ip模式
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.0.10
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
b) DHCP模式
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
4)重啟網絡
sudo /etc/init.d/networking restart
B) 隨機生成一個KVM的MAC地址
MACADDR="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed 's/^/(../)/(../)/(../)/(../).*$//1:/2:/3:/4/')"; echo $MACADDR
可以指定一個mac地址,但要注意,第一個字節必須為偶數,如00,52等,不能為奇數(01),否則會有不可預料的問題。因為奇數保留為多播使用。如,KVM可以接收ARP包並回復,但這些回復會使其他機器迷惑。這是以太網的規則,而非KVM的問題。
如直接將網卡地址設置為MACADDR="32:32:32:32:32:32"
C) 將以前安裝的虛擬機網絡改為橋接方式或者安裝新的虛擬機使用橋接網絡
一個腳本文件
#start kvm.winxp
USERID=`whoami`
MACADDR="32:32:32:32:32:32"
model=e1000e
iface=`sudo tunctl -b -u $USERID`
kvm -net nic,vlan=0,macaddr=$MACADDR -net tap,vlan=0,ifname=$iface $@
sudo tunctl -d $iface
#end kvm.winxp
使用iso文件安裝winxp,運行如下命令:
sudo ./kvm.bridge -m 512 -hda winxp.img -cdrom /home/software/zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso -boot d
運行安裝完的虛擬機,運行如下命令:
sudo ./kvm.bridge -m 512 -hda winxp.img -boot c
===================================================================================
linux中Kvm橋接網絡成功的關鍵
KVM在LINUX中的重要作用,速度等,我不再評價,我只能說,快!
但是,如果你要在一個服務器中使用多個虛擬機,並且想讓這些虛擬機提供服務,那麼,橋接網絡是必不可少的,可是,網上流傳的三四個版本中,關於橋接網絡的,你試一下,會發現,很難成功,這是何道理?看起來他們似乎都配置成功了,也有可能是軟件版本的問題,總之,你親自嘗試的時候,會發現,這其實很難實現。
當然,如果無法實現的話,也就沒有此文了!
先說一下我的軟件配置:
Linux 2.6.28-11-server #42-Ubuntu SMP X86_64位Ubuntu服務器版9.04
KVM內核是自帶的。
真實網絡接口名稱:eth0
KVM的安裝方法我就不寫了,網上有一大堆,注意,KVM有兩個部分,一個部分是內核部分,這在9.04中是自帶的,您要安裝的KVM是管理部分(我也不知道這樣理解是否正確,總之,你要安裝KVM及QEMU)
不安裝QEMU也可以用,因為KVM帶一個修改版本的QEMU
成功的關鍵是配置網絡及路由(這個在網上流傳的版本中沒有提到)
請生成一個文件(qemu-ifup),將這個文件加上可執行屬性,文件內容如下:
#!/bin/sh
set -x
switch=br0
if [ -n "$1" ];then
/usr/bin/sudo /usr/sbin/tunctl -u `whoami` -t $1
/usr/bin/sudo /sbin/ip link set $1 up
sleep 0.5s
/usr/bin/sudo /usr/sbin/brctl addif $switch $1
exit 0
else
echo "Error: no interface specified"
exit 1
fi
將這個文件保存在你的HOME目錄下,或者其它的目錄也行。
修改你的/etc/network/interfaces文件如下:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
bridge_ports eth0 //注意這個eth0,這是你的計算機的實際網卡,請根據你的網絡修改,也可能跟我的這個一樣。
address 192.168.1.242 //根據你的需要設置從這裡到下面的參數,這個網絡跟你的實現網絡在一個子網內,不然無法橋接
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameserver 192.168.1.1 219.141.136.10
dns-search Office
此時,重新啟動計算機即可。
你可能注意到, 這個文件裡可能有關於eth0的配置,請刪除它即可,也就是說,不能對eth0進行任何配置,這個接口在重新啟動後,應該是沒有配置IP的,否則不能工作。
重新啟動完成後,請比照一下你的接口配置是否跟我的一樣:
#ifconfig
br0 Link encap:以太網 硬件地址 00:21:5e:4e:33:e2
inet 地址:192.168.1.242 廣播:192.168.1.255 掩碼:255.255.255.0
inet6 地址: fe80::221:5eff:fe4e:33e2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 躍點數:1
接收數據包:48324758 錯誤:0 丟棄:0 過載:0 幀數:0
發送數據包:25261650 錯誤:0 丟棄:0 過載:0 載波:0
碰撞:0 發送隊列長度:0
接收字節:63199826111 (63.1 GB) 發送字節:5380518900 (5.3 GB)
eth0 Link encap:以太網 硬件地址 00:21:5e:4e:33:e2
inet6 地址: fe80::221:5eff:fe4e:33e2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 躍點數:1
接收數據包:48903854 錯誤:0 丟棄:0 過載:0 幀數:0
發送數據包:28125512 錯誤:0 丟棄:0 過載:0 載波:0
碰撞:0 發送隊列長度:1000
接收字節:64152739997 (64.1 GB) 發送字節:6185466883 (6.1 GB)
中斷:16
請注意,只有br0有地址,而eth0是沒有地址的,再比照一下你的路由表:
#route
內核 IP 路由表
目標 網關 子網掩碼 標志 躍點 引用 使用 接口
localnet * 255.255.255.0 U 0 0 0 br0
default bogon 0.0.0.0 UG 100 0 0 br0
請注意,如果你的路由表與我的不一樣,例如出現四行,即又加上了
localnet * ................... eth0
default bogon ..................eth0
那麼,你八成是不能成功橋接的,出現這樣的問題應該是由於你的ETH0網絡被配置了IP,處理的辦法就是想辦法去掉eth0的IP,可以使用這個方法:
#ifconfig eth0 0.0.0.0
比較一下,你的橋接網絡接口:
#brctl show
bridge name bridge id STP enabled interfaces
br0 8000.00215e4e33e2 no eth0
tap0
tap1
tap2
應該有這行存在(了可能還會出現其它的行,例如pan0),後面的tapX是不同的虛擬機的接口,這裡可以看出,我橋接了三個虛擬接口到一個直接的接口。
如果你的IP地址配置與路由表跟我的一樣,那麼,應該是可以橋接成功的。
接下來就是啟動你的虛擬機,啟動前需要創建虛擬機的磁盤(即下面的u_ubuntu.img