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

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

以前一直用 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 <无IP>

tap0 <无IP>

网关 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航