I am LAZY bones? AN ancient AND boring SITE

访问Vbox的guest系统的方法

相信很多linuxer都用过Vbox,拿来虚拟个win或者其他的系统,很方便,用着感觉也很不错,只是今天我遇到了一点点麻烦.
我想在host里访问guest的80端口,比如在guest里跑了个apache之类的.
我的host的IP是192.168.6.239,一看guest的IP是10.0.2.15,vbox里设置的连接方式是NAT,在guest里上局域网和公网都正常,但是在host里却ping不通guest的IP…也就是host和guest的通信是单向的…
后来查了下资料,才明白原因,要实现双向通信,需要在host里虚拟一个网络设备(也就是虚拟网卡),然后通过桥接的方式将host的虚拟网卡和guest的网卡相连,就像以前用的vmware的bridge模式一样,默认就给你生成几个虚拟网卡,但是vbox却不是这样做的,它需要自己添加.具体操作方法可以参见这里这里.
步骤还是比较繁琐的,所以我用的就不是这个办法,而是另一个比较快捷的办法,当然快方法也有坏处,就是只能访问guest的一个端口,刚好,我只需要它的80端口.
步骤:用文本编辑器打开 ~/.VirtualBox/Machines/机器名/机器名.xml
然后在ExtraData那节下面添加以下三行:

      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/Protocol" value="TCP"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/GuestPort" value="80"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/HostPort" value="50000"/>

这3行,相当于吧guest的某个端口映射到了host的端口. 其中 guestweb 可以替换成想要的名字.第二行的value数字,就是guest的端口号,第三行的value数字就是host的端口号.
这样启动guest以后,就可以访问 http://localhost:50000 了,哈哈.
以上方法在Vbox 2.1.4 版本试验通过.

========090409 21:00 更新========
好吧,我承认我火星了一回,其实只要 modprobe vboxnetflt 以后,再在网络连接里选 host interface,就相当于vmware的桥接了.
这样guest就能得到和host一样的IP段,并且host也可以直接访问guest.
但其实这方法也是有缺陷的,比如我之前用的是host的eth0,把guest休眠了以后,到了家里,host改用wlan0了,结果guest就没有网络连接了….
哈哈,所以我那方法还是有一定的用处的.到底用哪种,就自己决定吧~

最后修改时间: 2009年04月09日 21:19

本文章发表于: 2009年04月09日 15:28 | 所属分类:经验技巧. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

7 个评论 关于: “访问Vbox的guest系统的方法”

  1. a 在 2009年04月09日 16:25 说:回复

    2.1.4貌似直接选用host interface,再选择正确的接口就可以实现guest和host的通信了(在同一网关下的2个IP)

  2. muzuiget 在 2009年04月09日 16:59 说:回复

    骨头兄这回火星了一把了,2.1.0般后桥接跟vmware一样方便了,ubuntugeek有介绍http://www.ubuntugeek.com/host-interface-networking-made-easy-in-virtualbox-210.html
    之前的版本的桥接方法可是折腾得我死去活来。

  3. bones7456 在 2009年04月09日 17:37 说:回复

    啊?host interface 不是要个虚拟设备吗?我这里host interface选了eth0之后,就启动不了guest了呢,报:

    Failed to open/create the internal network ‘HostInterfaceNetworking-eth0’ (VERR_SUPDRV_COMPONENT_NOT_FOUND).
    Unknown error creating VM (VERR_SUPDRV_COMPONENT_NOT_FOUND).

    就没深究了,这个好解决吗?

    • Iven 在 2009年04月09日 17:53 说:回复

      这个问题以前遇到过,只需要 modprobe vboxnetflt 就可以了,根据自己的发行版可以设置开机启动,Arch 里面是添加到 /etc/rc.conf

      • bones7456 在 2009年04月09日 20:57 说:回复

        呵呵,果然可以,我承认我火星了…

      • 等等 在 2009年06月03日 15:07 说:回复

        加到rc.conf不行吖.还是需要手工modprobe vboxnetflt

        • bones7456 在 2009年06月03日 15:30 说:回复

          看你的发行版了,gentoo一般是加在
          /etc/conf.d/modules

发表评论