vmware三種網絡連接配接上網設定:
1.bridge :
預設使用vmnet0
将虛拟機的ip設定與主機同網段未使用ip,其餘與主機相同:
例如主機ip是10.70.54.31,設定虛拟機ip為10.70.54.22。netmask,broadcast,gateway,dns都與主機相同即可實作虛拟機<--->主機 虛拟機<---->網際網路 通信。
2.nat :
預設使用vmnet8
将虛拟機設定成使用dhcp方式上網,windows下選擇"自動擷取ip",linux下開啟dhcp服務即可
也可以手動設定:
ip設定與vmnet8同網段,gateway設定成vmnet8的gateway(/etc/vmware/vmnet8/nat/nat.conf)中可以查到vmnet8的gateway,通常是xxx.xxx.xxx.2。
netmask,broadcast設定與vmnet8相同,dns設定與主機相同。
例如 vmnet8 ip:172.16.249.1 gw :172.16.249.2
虛拟機設定: ip :172.16.249.100 gw: 172.16.249.2
3.host-only :
預設使用vmnet1
将虛拟機ip設定與vmnet1同網段,gateway設定成vmnet1的ip,其餘設定與vmnet1相同,dns設定與主機相同
例如 vmnet1 ip :172.16.245.1
虛拟機設定: ip :172.16.245.100 gateway :172.16.245.1
這樣就實作了虛拟機<--->主機 通信,但是 虛拟機<--->網際網路 仍無法通信
虛拟機與網際網路通信:
1.開啟主機路由功能
2.設定iptables,使主機成為一台nat server
1. echo 1 >/proc/sys/net/ipv4/ip_forward 這樣就主機就具有了路由功能
2. iptables -t nat -A POSTROUTING -o eth0 -s 172.16.245.0/24 -j MASQUERADE
這條規則意思是将來自172.16.245.0/24封包的來源ip僞裝成eth0的ip,實作虛拟機與網際網路通信
如果網絡接口是ppp+或pppoe則需要修改成-o pppoe
當然-s 172.16.245.0/24 也要根據實際情況修改
qemu兩種上網方式:
user mode network :
這種方式實作虛拟機上網很簡單,類似vmware裡的nat,qemu啟動時加入-user-net參數,虛拟機裡使用dhcp方式,即可與網際網路通信,但是這種方式虛拟機與主機的通信不友善。
tap/tun network :
這種方式要比user mode複雜一些,但是設定好後 虛拟機<-->網際網路 虛拟機<-->主機 通信都很容易
這種方式設定上類似vmware的host-only,qemu使用tun/tap裝置在主機上增加一塊虛拟網絡裝置(tun0),然後就可以象真實網卡一樣配置它.
首先核心中支援tap/tuns裝置:
Device Drivers --->
Networking support --->
[M] Universal TUN/TAP device driver support
如果目前核心沒有支援,可以重新隻編譯相應子產品加入,方法很簡單:
将目前核心配置檔案cp到核心源碼目錄下:
[[email protected] ~]#cp /boot/config-[kernel-version] /usr/src/linux
[[email protected] ~]#cd /usr/src/linux
配置核心,将TUN/TAP選擇子產品(M),如上所示:
[[email protected] ~]#make menuconfig
重新隻編譯子產品(M),不編譯核心(*)支援的東東:
[[email protected] ~]#make modules
編譯好後在/usr/src/linux/drivers/net下可以找到tun.ko:
[[email protected] net]#ls -l /usr/src/linux/drivers/net/tun.ko
-rw-r--r-- 1 root root 11116 Mar 23 20:29 /usr/src/linux/drivers/net/tun.ko
[[email protected] net]#
将它cp到目前核心的子產品目錄的相應位置:
[[email protected] net]#cp /usr/src/linux/drivers/net/tun.ko /lib/modules/`uname -r`/kernel/drivers/net
重建立立子產品依賴關系:
[[email protected] net]#depmod
現在就可以加載它了 :
[[email protected] net]#modprobe tun
檢查一下:
[[email protected] net]#lsmod |grep tun
tun 8704 0
[[email protected] net]#
OK. 成功不重新編譯整個核心加入特殊子產品支援
如果你的xx卡不被核心支援,又可以編譯成子產品,自己怕重新編譯核心後出問題就可以用這個辦法隻編譯自己需要的子產品,然後手動安裝到相應位置,再加載它。
這樣編譯速度要也比編譯整個核心快,不會對系統有任何損害,就可以使用上XX卡喽。^_^
要注意三點:
1.核心源碼必須與目前核心版本完全一緻,否則編譯出的子產品是不能用的。
2.注意隻make modules(編譯子產品),沒有make modules_install(自動安裝子產品到/lib/modules下)
3.加載新編譯的子產品前必須先運作depmod,否則modprobe找不到它
其實使用目前核心配置檔案(/boot/config-[kernel-version]),隻加入自己需要的子產品,不做任何其他改,make modules_install應該也不會有問題的。
不過最穩妥的辦法還是手動安裝它,控制權在自己手裡更踏實嘛 :-)
OK,轉回qemu上網問題
如果使用udev管理裝置(通常2.6.x核心的發行版都已經使用udev),當modprobe tun後就會自動建立/dev/net目錄,并建立出tun裝置,做好相關連結:
[[email protected] net]#ls -l /dev/net/tun
lrwxrwxrwx 1 root root 6 Mar 25 15:35 /dev/net/tun -> ../tun
[[email protected] net]#
[[email protected] ~]#mkdir /dev/net
[[email protected] ~]#mknod /dev/net/tun c 10 200
OK,相關裝置已經準備好了,還需要一個tun/tap的初始化腳本 :
/etc/qemu-ifup :
#!/bin/sh
/sbin/ifconfig $1 172.20.0.1
再給予qemu-ifup x執行權限放在/etc下就可以了。
這個腳本隻能root使用者執行,如果需要普通使用者使用qemu,就需要改成sudo /sbin/ifconfig .....再設定sudo相關權限。
啟動qemu後,它會在主機上增加一塊虛拟網絡裝置(tun0):
[[email protected] ~]#ifconfig tun0
tun0 Link encap:Ethernet HWaddr 0A3:8A:5D:97:CD
inet addr:172.20.0.1 Bcast:172.20.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[[email protected] ~]#
現在就可以啟動qemu配置虛拟機網絡參數了,和vmware host-only一樣:
ip與tun0相同網段,gateway為tun0 ip 其餘參數與tun0相同,dns與主機相同:
tun0 : ip :172.20.0.1 broadcast:172.20.255.255 netmask :255.255.0.0
qemu : ip :172.20.0.100 broadcast:172.20.255.255 netmask :255.255.0.0 gateway:172.20.0.1
與host-only一樣,這樣隻實作了虛拟機<---->主機間通信,還需要設定router,nat才可以連上網際網路
[[email protected] ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]#iptables -t nat -A POSTROUTING -o eth0 -s 172.20.0.0/24 -j MASQUERADE
[[email protected] ~]#
OK,虛拟機<--->主機 虛拟機<---->網際網路通信 都完成啦