我想要的是:
我想要一个运行 Ubuntu(在 VirtualBox 上)的虚拟机客户机,用于各种 Web 开发测试服务器(在不同的端口上运行,例如 Grunt.js 在端口 9000 上运行)。
我想测试在这些服务器上运行的 Web 应用程序 a) 从客户机内部 b) 从主机内部(顺便说一下,运行 Windows 7),c) 从同一网络中的其他设备,通过 WiFi 连接(例如,移动设备)
我希望能够从访客端访问互联网
我首先运行了一个解决方案,其中我在 VirtualBox 中配置了 NAT 和仅主机适配器,这对于从主机访问客户机以及从客户机内部访问 Internet 都很好。
现在我想让其他设备能够访问虚拟机,这个解决方案不再有效。几年前,我可以使用桥接网络适配器做到这一点,但这似乎在这里不起作用,因为我在公司网络中。
我做了什么:
因此,我在 VirtualBox 中使用默认设置设置了一个桥接网络适配器。启动虚拟机时,我首先看到我无法访问互联网,运行结果ifconfig
为:
eth0 Link encap:Ethernet HWaddr 08:00:27:d1:1f:98
inet6 addr: fe80::a00:27ff:fed1:1f98/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:139 errors:0 dropped:0 overruns:0 frame:0
TX packets:658 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11274 (11.2 KB) TX bytes:140266 (140.2 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:1728 errors:0 dropped:0 overruns:0 frame:0
TX packets:1728 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1001564 (1.0 MB) TX bytes:1001564 (1.0 MB)
如您所见,没有可用的 ipv4,我无法从客户机外部 ping 或请求任何东西。我不完全确定这是因为某些东西配置错误,还是因为公司网络不允许这样的事情 - 我也没有得到 IT 部门的任何帮助...
编辑:我发现,使用其他网络(而不是公司网络)时,桥接连接可以正常工作。我还可以从其他设备访问访客服务器。
我该如何进一步调试?这种行为的原因可能是什么?
答案1
遗憾的是,我对 IPv6 不够熟悉,无法判断您的虚拟机是否正在获取自己的 IP,因此我只能说桥接连接的工作方式是虚拟机请求自己的 IP,本质上就是让您的物理机器在网络上拥有 2 个 IP。如果公司网络像通常一样禁用了 DHCP,或者他们以其他方式限制了 IP,那么您必须让虚拟机拥有自己的 IP,才能按照您想要的方式运行。
话虽如此,也可以在 VirtualBox 中为 NAT 网络模式设置“端口转发”。这样,当您的物理机在您指定的端口收到请求时,您的机器会将其传递给您的虚拟机。
由于虚拟机连接到 VirtualBox 内部的专用网络,主机无法看到它,因此主机或同一网络上的其他计算机无法访问客户机上的网络服务。但是,与物理路由器一样,VirtualBox 可以通过端口转发将选定的服务提供给客户机外部的世界。这意味着 VirtualBox 会监听主机上的某些端口,并通过相同或不同的端口将到达那里的所有数据包重新发送给客户机。
如果您希望了解更多详细信息,请参阅 VirtualBox 帮助文件中“虚拟网络”下的“网络地址转换 (NAT)”部分。在虚拟机的高级网络设置下有一个不错的小型 GUI 可以帮助您完成此操作。