Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15499067
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2009-08-07 09:12:43

QEMU虚拟机网络的缺省模式是NAT方式,即虚拟机可以通过host访问外网,但host和外网无法访问虚拟机。如果要想让host访问虚拟机,则可以使用TAP方式。

1、确认host的内核支持TAP/TUN设备
使用TAP方式的前提是host的内核支持TAP/TUN。现在的linux发行版一般都通过内核模块的方式支持TAP/TUN。如果host存在 /dev/net/tun 设备文件,则说明它支持TAP/TUP。如果不存在这个设备文件,则可以试试执行
modprobe tun
命令。
如果不存在tun内核模块,可以自己编译。TUN模块的内核配置项位于:
Device Driver --> Networking support --> Universal TUN/TAP device driver support
编译好的模块位于linux源码目录下的
drivers/net/tun.ko,需要把它拷贝到
/lib/modules//kernel/drivers/net/
目录,并执行
depmod
命令重建模块依赖关系。

2、编写QEMU的TAP初始化脚本
QEMU的TAP初始化脚本缺省是 /etc/qemu-ifup,它的内容很简单:
#!/bin/sh
/sbin/ifconfig $1 192.168.0.11
/etc/qemu-ifup文件需要增加可执行的权限。

3、虚拟机的网络设置
虚拟机的启动命令行增加网络参数
-net nic -net tap
即可启动TAP网络模式。注意:因为创建TAP网卡需要root权限,所以必须用root用户启动QEMU。
虚拟机启动后,用ifconfig命令设置网络,要求它的IP与host的tap网口的IP(即在上个步骤里qemu-ifup文件中设置的IP)处于同一网段。例如:
ifconfig eth0 192.168.0.110 netmask 255.255.255.0

再验证与host的联网:
在虚拟机上执行
ping 192.168.0.11
在host机上执行
ping 192.168.0.110
应能正确ping通,说明虚拟机与host已正常联网,host机通过192.168.0.110与虚拟机通信。

4、使普通用户能执行
上面的方法美中不足的是必须用root用户启动QEMU虚拟机。要使普通用户能执行,需要写一个执行QEMU的脚本 qemu-tap:
#!/bin/sh
USERID=`whoami`
iface=`sudo tunctl -b -u $USERID`
ranmac=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2`; \
do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done)
qemu $@ -net nic,vlan=0,macaddr=$ranmac -net tap,vlan=0,ifname=$iface
sudo tunctl -d $iface $> /dev/null
脚本中的tunctl命令是user mode linux ,在debian系统要安装uml-utilities软件包。另外,还需要用visudo命令配置普通用户执行tunctl命令的权限。

这个脚本源自,详细说明请参考原文。

5、虚拟机通过host连接internet
现在实现了虚拟机和host的联网,如果需要虚拟机连接internet,则要在host设置NAT:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

有关NAT联网的其他信息,也可参考我的另一篇文章:http://linuxman.blog.ccidnet.com/blog-htm-do-showone-uid-60710-type-blog-itemid-205940.html

6、Windows主机的配置
如果host是windows系统,则配置方法如下:
(1)安装windows系统的TAP驱动程序
可下载openvpn安装程序(),只安装其中的TAP驱动。
(2)在windows的控制面板的网络连接设置程序中设置TAP网卡的IP和netmask等参数,并把网卡名称改为tap
(3)虚拟机启动命令行中增加网络参数
-net nic -net tap,ifname=tap
阅读(7773) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~