Qemu使用Bridge模式让虚拟机和主系统互访和上网

2009-05-13 07:59:24来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

以前一直用 TUN/TAP模式设置网络,即启动虚拟机时,自动加载网卡接口 tap0并为其分配一个IP(在/etc/qemu-ifup中设置),虚拟机的 eth0启动后相当于和 tap0接在同一个交换机上,两者只要IP设在同一网段即可相互访问。但是虚拟机上网要通过主系统IP伪装才行。网络结构图如下:
           202.103.xx.xx
Internet ---- Gateway -------[eth0] Host [tap0] ------- Virtual Machine [eth0]
           192.168.0.1     192.168.0.2   10.8.0.1           10.8.0.2
但是这样有时候很不方便,如果主系统所在局域网要访问虚拟机,是无法直接访问的,需要在主系统上面设置端口映射。
有没有像 VMware 桥连模式一样的方式呢?虚拟机如同局域网内另外一台独立的计算机,有和主系统同网段内的IP,虚拟机可以和局域网内所有其他机器互访,并且虚拟机可以上网。
经过一番摸索,终于找到了解决办法。如下:
启动虚拟机时仍然使用 TUN/TAP 模式,但是网卡启动脚本有些变化。
qemu -boot c -hda system.img -net nic -net tap,ifname=tap0,script=/etc/qemu-ifup
启动脚本:/etc/qemu-ifup
### 注释掉原来的脚本
## ifconfig $1 10.8.0.1
## 获取原来主系统 eth0 的 IP 和网关
IP=`ifconfig eth0|grep "inet addr"|awk '{print $2}'|sed 's/addr://'`
GATEWAY=`route -n|grep ^0.0.0.0|awk '{print $2}'`
## 删除 eth0 的 IP
ip addr del $IP dev eth0
## 激活 tap0 ($1 是qemu传递过来的网卡名称,即tap0)
ip link set $1 up
## 停止并删除存在的网桥
ip link set br0 down &>/dev/null
brctl delbr br0 &>/dev/null
## 添加网桥接口 br0
brctl addbr br0
## 将 eth0 加入网桥
brctl addif br0 eth0
## 将 tap0 加入网桥
brctl addif br0 $1
## 启动网桥
ifconfig br0 $IP up
## 添加默认路由
route add default gw $GATEWAY
这样当虚拟机启动后,主系统网络接口信息为:
br0 192.168.0.2
eth0
tap0
网关 192.168.0.1
此时虚拟机的eth0可以设置为 192.168.0.3, 网关设为192.168.0.1
这样设置后,主系统可以和虚拟机相互通讯,虚拟机也可以上网了:)
如果关闭了虚拟机,需要恢复原来的网络设置,可以执行下面的脚本:
## /etc/qemu-ifup.restore
IP=`ifconfig br0|grep "inet addr"|awk '{print $2}'|sed 's/addr://'`
GATEWAY=`route -n|grep ^0.0.0.0|awk '{print $2}'`
ip addr del $IP dev br0
ip link set br0 down
brctl delbr br0
ifconfig eth0 $IP up
route add default gw $GATEWAY


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27464/showart_290885.html

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:配置qemu与host os(freebsd 5)的桥接网络

下一篇:FreeBSD下用geom创建raid