配置kvm的網路有2種方法。其一,預設為使用者模式網路(Usermode Networking),資料包由NAT方式通過主機的介面進行傳送。其二,使用橋接方式(Bridged Networking),外部的機器可以直接聯通到虛擬機器,就像聯通到你的主機一樣。我著重介紹橋接方式,並在ubuntu10.10上測試通過。主要參考了 https://help.ubuntu.com/community/KVM/Networking 。
第一,使用者模式
虛擬機器可以使用網路服務,但區域網路中其他機器包括宿主機無法串連它。比如,它可以瀏覽網頁,但外部機器不能訪問架設在它裡面的web伺服器。
預設的,虛擬機器得到的ip空間為10.0.2.0/24,主機ip為10.0.2.2供虛擬機器訪問。你可以ssh到主機(10.0.2.2),可以用scp來拷貝檔案。
第二,橋接模式
這種模式允許虛擬機器就像一台獨立的主機一樣擁有網路。這種模式需要網卡支援,一般的有線網卡都支援,絕大部分的無線網卡都不支援(如:ipw3945,我的T400上無線網卡)!
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