如何从主机访问在 VirtualBox 中运行的服务器?

如何从主机访问在 VirtualBox 中运行的服务器?

我正在虚拟机上运行一个 Web 应用程序。

localhost:8888我可以通过虚拟机内的浏览器查看该应用程序。

我无法在同一个 URL 上看到来自主机的应用程序。这就是目标。

我尝试过VBoxManage modifyvm "VM name" --natdnshostresolver1 on,但是没有效果。

我的配置是:

  • 主持人:Windows 7的
  • 客人:Ubuntu 16.04.1 LTS
  • 虚拟盒:5.1.4r110228

来宾配置

(访客)ifconfig在 NAT 上

kirkland@GC:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:d0:fc:0e  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::4c67:70b5:c37b:8fa8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7431 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3587 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7444830 (7.4 MB)  TX bytes:731870 (731.8 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1566 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1566 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:655936 (655.9 KB)  TX bytes:655936 (655.9 KB)

(来宾)/etc/hosts

127.0.0.1   localhost
127.0.1.1   GC

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

答案1

URLlocalhost:8888仅在您的 VM 内部有效。在 VM 外部,您必须使用ip.ad.dr.ess:8888或。在后一种情况下,会引入对网络上的hostname:8888主机名解析为 的依赖。ip.ad.dr.ess

默认情况下,当您在 VirtualBox 中创建虚拟机时,网络适配器 1 设置为 NAT。这将为虚拟机提供 IP 地址10.0.2.15/24和默认路由10.0.2.2(应该是您的主机)。长话短说,Windows 不会路由到它为其提供 NAT 的地址,除非先经过更多步骤。

关闭虚拟机并将虚拟机网络适配器 1 设置更改为“桥接”将允许您的主机(以及本地网络上的任何主机)与该虚拟机进行通信,而无需添加任何特殊路由或跳过任何环节。

重启虚拟机。验证与 的连接localhost:8888。还要验证与 的连接hostname:8888(假设主机名已not添加到 /etc/hosts 文件中的 loopback/localhost 地址)和ip-address:8888。编辑:根据发布的 /etc/hosts 详细信息,您are将虚拟机以及 Web 应用绑定到环回网络。此配置在虚拟机之外根本无法使用。

如果您的 Web 服务器和应用程序不依赖于首次配置/安装的 IP,并且您的 LAN 上有一个 DHCP 服务器,那么连接到 VM 所需的唯一其他信息就是通过 DHCP 分配给它的 IP 地址。

要查找虚拟机的 IP 地址:从 Ubuntu 桌面 (ctrl-alt-T) 打开终端/控制台窗口,我们使用 hostname、ifconfig 和 grep/etc/hosts命令将各个部分组合在一起并找到您的地址。在打开的终端中,键入hostname然后按回车键。这可能是 gc。在同一个终端中,键入ifconfig eth0 | awk '/Bcast/{print $2}'将显示地址。您应该在 /etc/hosts 中有一行,其中地址后跟主机名。 grep [hostname] /etc/hosts或者grep [address] /etc/hosts应该找到您需要的行。如果您得到的不是当前地址后跟主机名,则需要修改 /etc/hosts 文件以添加正确的信息。

您 LAN 上的主机现在应该能够通过端口 8888 连接到您 VM 的 IP。这些主机/客户端通过该端口访问 webapphostname:8888将取决于客户端主机文件、本地 DNS 或甚至您的 DHCP 服务器上可能提供的 mDNS 服务。

答案2

如果您不希望虚拟机暴露在外部网络中,这里有一个使用端口转发的快速解决方案。只需在虚拟机的 NAT 设置中为 web 和 ssh 创建这些端口转发配置文件,如下所示

在此处输入图片描述

答案3

为了实现这一点,我认为最好使用桥接模式。如果这不可能或不合适,您需要在主机上使用静态路由。

要添加静态路由,请执行以下操作:查看主机的网络属性。您应该找到一个名为 VirtualBox Host-Only Network 的适配器。找到它的 IP 地址。它可能是 192.168.56.1,我认为这是默认值,但也可能是其他值。将其命名为 abcd 接下来,获取您的客户端的 IP 地址。将其命名为 wxyz(两个地址的前 3 个八位字节应该相同。)获得该 IP 地址后,在主机上打开 DOS 提示符,然后键入以下命令:

route add w.x.y.z mask 255.255.255.0 a.b.c.d

如果有效,您可以使用 -p 开关运行相同的命令以使其永久生效(否则下次重新启动主机时它会消失)。

相关内容