I am LAZY bones? AN ancient AND boring SITE

2009年 04月 09日 的归档

访问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就没有网络连接了….
哈哈,所以我那方法还是有一定的用处的.到底用哪种,就自己决定吧~