[已解决]虚拟机和客户机桥接,俩个机子都不能上网

Kvm、VMware、Virtualbox、Xen、Qemu 等
回复
yansheng1003
帖子: 83
注册时间: 2008-07-26 14:13

[已解决]虚拟机和客户机桥接,俩个机子都不能上网

#1

帖子 yansheng1003 » 2008-09-01 18:55

一般而言,安装完VirtualBox设定网路时选择默认的NAT模式,Guest 就可顺利联网了,但是这种方式比较死板,要作更有弹性的变化,应该采用桥接模式(Bridged),这里的桥接模式就如同VMware中的Bridged 模式,Host与Guest在局域网(LAN)中的地位是相等的。参考 VirtualBox1.5.4 安装后放在 VirtualBox 目录中的用户手册文件 UserManual.pdf 配置如下:

1 . 在基于 Debian 和 Ubuntu 的系统上,首先要安装含有建立虚拟网络设备 ( TAP interfaces ) 的工具 uml-utilities 和桥接工具 bridge-utils:

sudo apt-get install uml-utilities

sudo apt-get install bridge-utils

2 . 为了使虚拟机能够访问网络接口,必须将运行虚拟主机的用户的用户名(通常是Ubuntu登录用户名)添加到uml-net用户组(登录用户名替换其中的“vboxuser”):

sudo gpasswd -a vboxuser uml-net

注重:为了使改动生效,请重新启动电脑。

3 . 向Ubuntu操作系统描述要添加的虚拟网络设备,编辑 /etc/network/interfaces:

sudo vim /etc/network/interfaces

在打开的文件后面添加下面的内容,将虚拟网络接口命名为 "tap0",指定该接口IP配置方法为手动,并指定使用该接口的用户(登录用户名替换其中的 "vboxuser"):

auto tap0

iface tap0 inet manual

up ifconfig $IFACE 0.0.0.0 up

down ifconfig $IFACE down

tunctl_user vboxuser

4 . 另外还需要在 /etc/network/interfaces 中加入如下内容,建立一个名叫 "br0" 的桥,该桥的IP配置方法为通过DHCP配置,主机中的所有网络接口,也包括tap0这个虚拟网络接口,都将建立在这个桥之上:

auto br0

iface br0 inet dhcp

bridge_ports all tap0

在这里也可以根据自己的网络状况做相应的更改,可以使网络桥使用静态IP:

iface br0 inet static

address 192.168.1.2

netmask 255.255.255.0

network 192.168.1.0

broadcast 192.168.1.255

gateway 192.168.1.1

5 . 首次使用需要激活刚才建立的虚拟网络接口和网络桥:

sudo /sbin/ifup tap0

sudo /sbin/ifup br0

这个步骤只需要做一次,下次主机重新启动时,这个接口和桥将自动激活。

6 . 让VirtualBox使用这个虚拟网络接口,启动VirtualBox,在主界面上选中要使用刚才建立的虚拟网络接口tap0的虚拟机,点“设置”,在弹出的窗口中选“网络”,选中其中一块网卡(通常为 “网络适配器 0”),选中“启用网络适配器”,“连接到”后面选 "Host Interface",选中“接入网线”,然后在“主机网络界面名称”中填入刚才建立的虚拟网络接口的名字 "tap0",确定。同样的你也可以使用 VBoxManage 的命令行工具(将 "My VM" 换成你的虚拟机名字 ):

VBoxManage modifyvm "My VM" -hostifdev1 tap0\

最后,配置主机和虚拟机的网络,使主机和虚拟机在同一个网段,这样主机和虚拟机就成了局域网中地位相同的两台机器了,可以互相访问了。
我按照这个方法设置了下我的虚拟机和主机,然后重启,测试了下,我的主机和客户机都不能连接上网络了。
然后PING了下,都能ping 通网关,登录路由器,哈哈,我的主机和虚拟机都处在同一网段,都自动分配了IP地址(mac地址各不相同哦)。。
我只听说这个可能是IP地址的问题,希望大家给我看看用什么方法可以解决了
上次由 yansheng1003 在 2008-09-01 22:10,总共编辑 1 次。
yansheng1003
帖子: 83
注册时间: 2008-07-26 14:13

#2

帖子 yansheng1003 » 2008-09-01 18:57

注意下我的系统是ubuntu 8.04.1 desk 版本的,上面介绍的桥接方法是7.10的,我不知道是不是同样使用最新版本的配置。

还有一个台湾的配置方法,那个是使用8.04.1的,但是他第二天就说那个设置,会导致IP冲突,哎!
确实我按照那个去设置,那个出现同一状况,就是连不起互联网
上次由 yansheng1003 在 2008-09-01 19:04,总共编辑 2 次。
yansheng1003
帖子: 83
注册时间: 2008-07-26 14:13

#3

帖子 yansheng1003 » 2008-09-01 19:01

一般而言,安装完VirtualBox设定网路时选择默认的NAT模式,Guest就可顺利联网了,但是这种方式比较死板,要作更有弹性的变化,应该采用桥接模式(Bridged),这里的桥接模式就如同VMware中的Bridged模式,Host与Guest在局域网(LAN)中的地位是相等的。

网上很多文章,包括VirtualBox自己的帮助文档都有为VirtualBox设置桥接模式的教程,但是基本上都是写Host和Guest都采用dhcp的方式来获取IP,但是在我的环境中,必须要设置自己的静态IP,所以最后有一些稍微不一样。

下面我在Ubuntu7.04下设定VirtualBox中Host Networking为桥接模式的过程, 桥接模式可以使Host OS 和Guest OS在区域网路中处于平行地位。

安装所需工具uml-utilities,bridge-utils
sudo apt-get install uml-utilities bridge-utils


首先为Host OS建立桥接界面(Bridge)和虚拟网卡设备(tap device),这样作的原故,是使将来取得IP是由桥接界面(bridge),而不是由ethx(真实的有线网卡)或tapx(虚拟网卡)来取得IP。

将下面的文本保存成文件,有需要按自己的情况修改一两个地方。存为在/etc/init.d/vboxbridgedrun
sudo gedit /etc/init.d/vboxbridgedrun

引用
# VirtualBox Bridging

# Create a tap device with permission for the user running vbox
# 建立一个使用者(user)有权限的设备tap0,{user}为自己用户名
tunctl -t tap0 -u {user}
chmod 0666 /dev/net/tun

# Bring up ethX and tapX in promiscuous mode
# 将ethx和tapx网卡界面设为混杂模式(Promiscuous)
ifconfig eth0 0.0.0.0 promisc
ifconfig tap0 0.0.0.0 promisc

# Create a new bridge and add the interfaces to the bridge.
# 建立新的桥接界面(bridge),並把 eth0, tap0加入bridge
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 tap0

# 下面是两种获取IP的方式,可以自由选择,把不需要的注释掉就好了。
# 将bridge设成静态IP。XXX都分别对应IP、子网掩码、网关。
ifconfig br0 XXX.XXX.XXX.XXX netmask XXX.XXX.XXX.XXX up
route add default gw XXX.XXX.XXX.XXX
# 将bridge设成动态DHCP分配IP。
#dhclient br0

给上面的文件加上可执行权限
sudo chmod +x /etc/init.d/vboxbridgedrun

然后再建立一个可执行文件,添加如下内容。
sudo gedit /etc/init.d/vboxbridge

引用
/etc/init.d/vboxbridgedrun &

sudo chmod +x /etc/init.d/vboxbridge

最后在/etc/rc2.d目录下做一个指向/etc/init.d/vboxbridge的链接
cd /etc/rc2.d/
sudo ln -sf ../init.d/vboxbridge S999vboxbridge #取名S999开头是为了让它最后启动


重新启动电脑之后,现在可以在VirtualBox的Guest OS网路设定画面中,将attached to的选项中选择host interface,interface name选项中设为tap0。

这样就完成Virtualbox桥接网路模式的设定了,马上启动Guest吧 ! Guest的网路设定和Host是独立平行的。
这篇文章的地址是:http://oceanboo.cn/read.php/55.htm
这篇文章我也看过了,也照做了,但是还是一样的情况,都是路由器上能看到两个IP,但是就是连不起互联网,然后还原到其实状态客户机和主机都可以上网了,这到底是什么意思哦
yansheng1003
帖子: 83
注册时间: 2008-07-26 14:13

#4

帖子 yansheng1003 » 2008-09-01 19:06

自己顶下,有谁弄好过这个的跟我说说,不身感激
dewafer
帖子: 58
注册时间: 2007-05-28 16:34

#5

帖子 dewafer » 2008-09-01 19:15

这个问题我也碰到过,分配到了IP,也能ping通GATE,但就是不能上网,猜是DNS的问题

建议lz参考下vbox自带的manual中6.7节

那个时候我是吧
bridge_ports all tap0 换成了
bridge_prots all eth0 tap0
重新networking restart就神奇般的解决了
yansheng1003
帖子: 83
注册时间: 2008-07-26 14:13

#6

帖子 yansheng1003 » 2008-09-01 20:13

bridge_prots all eth0 tap0
这个貌似有点错误,是ports哦
我首先在后边加了个eth0
然后还是不行。左右不行,气愤阿!反正是个死,我又加了段:
auto eth0
allow-hotplug eth0
iface eth0 inet manual
up ifconfig eth0 0.0.0.0 promisc up

哈哈哈哈,现在可以咯
我觉得那些个配置帖子,CP也太不专业了,CP了别人的,也不CP干净点阿!!害死了
还 是要感谢下5楼下,谢了。。
头像
drvicar
帖子: 1285
注册时间: 2007-12-17 18:07
来自: 西安

#7

帖子 drvicar » 2008-09-01 21:10

:roll: 你还是没有实验成功呢
yansheng1003
帖子: 83
注册时间: 2008-07-26 14:13

#8

帖子 yansheng1003 » 2008-09-01 21:54

我已经搞定了
seekyou
帖子: 18
注册时间: 2008-05-27 9:07

#9

帖子 seekyou » 2008-09-01 22:05

我按楼主这样设的,两个机都可以上网了
但是开机的时候总有个错误:
Dropping NETIF_F_UFO since no NETIF_F_HW_CSUM feature
然后就停顿两分钟。。。
如果待机唤醒以后也会有这个错误
虽然不影响使用,但是很不爽
楼主你的机器有这个错误显示吗?
yansheng1003
帖子: 83
注册时间: 2008-07-26 14:13

#10

帖子 yansheng1003 » 2008-09-01 22:09

我的没得这个东西,一切正常。
建议你看看这个,他一个虚拟机是设置成功的
系统是ubuntu8.04 virtualbox版本是1.6 安装好后很顺利的启动了,首先安装的windows,为了修改NAT为桥接,我修改了/etc/network/interfaces文件,使用的是静态 IP地址,折腾了一下午把虚拟机windows设置-网络-网络适配器0-启用网络适配器-适配器类型-改成了PCnet-PCI II (Am79C970A) 终于搞定,第二天我有新建了虚拟的Freebsd7.0 完成之后由于我之前只建立了tap0为了使freebsd也能像windows一样享受桥接我又修改了配置文件interfaces 建立了tap1和 tap2 建立完成之后启动了虚拟机windows用的是tap0 一切正常,然后启动freebsd用的是tap1{适配器类型-同样是PCnet-PCI II (Am79C970A) }也很正常的桥接到了真机ubuntu,我以为目的达到了,可是接下来发生的事情令我费解,吃饭的时间到了,我把两个虚拟机windows和 freebsd分别正常关机,然后真机ubuntu正常关机,回来后事情不正常了,我启动了windows结果不能桥接上网了,我在真机ubuntu中 ifconfig发现bro0 eth0 tap0 tap1 tap2好好的躺在那里, 然后启动了freebsd 桥接上网一切正常。在然后我关闭Freebsd 然后把windows的桥接换成tap2 竟然又好了,然后我把freebsd换成tap0 竟然也是正常的。然后我关闭所有虚拟机并重启ubuntu 开启虚拟机windows(还是用的tap2)竟然又不能桥接上网了,然后我又把windows桥接到tap0 竟然又好了。通过以上的描述也许你看得都晕了此时我更晕了,总体的感觉是freebsd对桥接tap没有要求,只要是不重复就可以,给一个就能用,windows好像很有要求,必须用先前虚拟机用过的哪一个tap才可以,搞的每一次启动freebsd后都要更换windows的tap为freebsd曾经用过的哪一个,那位高手遇到过我这种情况,帮忙解决一下。我的 /etc/network/interfaces配置内容如下:

auto lo
iface lo inet loopback

auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user bruce

auto tap1
iface tap1 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user bruce

auto tap2
iface tap2 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user bruce

auto br0
iface br0 inet static
address 192.168.1.188
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_maxwait 0
bridge_ports all tap0 tap1 tap2

auto eth0
allow-hotplug eth0
iface eth0 inet manual
up ifconfig eth0 0.0.0.0 promisc up
seekyou
帖子: 18
注册时间: 2008-05-27 9:07

#11

帖子 seekyou » 2008-09-01 22:20

我的br0是DHCP的,其他的设置都一样
难道是这个原因?。。。迷糊了
yansheng1003
帖子: 83
注册时间: 2008-07-26 14:13

#12

帖子 yansheng1003 » 2008-09-01 22:49

我的br0也是DHCP啦。。我全是DHCP。。
回复