无法从互联网访问虚拟机上的网络服务器

无法从互联网访问虚拟机上的网络服务器

当我的网络服务器位于虚拟机上时,我无法访问它。如果我将网络服务器放在物理主机上,我可以从互联网上访问它。但是,当我尝试访问位于虚拟机上的网络服务器时(在同一台主机上),它只是挂起(从浏览器,和curl externalip:forwardedport)。

我有点恼火为什么它不起作用,因为这个设置的各个部分都是单独工作的,但组合在一起时却不起作用。

当我将它放在虚拟机上时,我确保设置桥接网络连接,并可以从网络中其他位置的不同机器上访问它。我还在路由器上设置了端口转发到分配给虚拟机的静态 IP。

以下表示配置。第一个配置是我想要实现的配置。第二个和第三个是“部分配置”,看起来如果它们都有效(并且确实有效),那么第一个配置也应该有效。

  1. 网络服务器<->虚拟机<->主机<->路由器<->调制解调器<->互联网
  2. Web 服务器<-> 虚拟机<-> 主机<-> 路由器<-> 其他计算机
  3. ................................网络服务器<->主机<->路由器<->调制解调器<->互联网

基本上,#2 意味着我可以从本地访问 Web 服务器,而#3 意味着如果 Web 服务器不在虚拟机上,而是在虚拟机的主机上,我可以从互联网访问 Web 服务器。

我目前正在使用:

webserver: python's SimpleHTTPServer at port 8888
virtual machine: centos deployed by vagrant on virtualbox. 
host machine: thinkpad, windows
router: apple airport, wrt-54g (tried both, same results)
modem: SB6121 cable modem
internet: comcast 

我设置了从端口 8888 到 Web 服务器的本地静态 IP 地址 10.0.1.99 @ 8888 的端口转发。

以为一切都应该没问题。我请一位朋友尝试从他自己的路由器/互联网访问网络服务器,结果也一样:网络挂了。

路由器上的端口转发和桥接虚拟机网络适配器的组合似乎导致了问题。我很确定我正在将正确的端口转发到正确的静态 IP。另外,不确定它为什么会挂起,而不是简单地断开我的连接。有些人建议,数据包无法找到返回互联网的路径。

答案1

我找到了问题所在。Vagrant 创建了两个适配器,一个是 NAT,据说用于 ssh 连接,另一个是我在 VagrantFile 中请求的桥接适配器。如果我禁用 NAT 适配器(即通过 VirtualBox)并保持桥接适配器处于活动状态,它就会突然正常工作,我可以从互联网访问 Web 服务器。如果我保留 NAT 适配器,我只能从我的网络内(即其他盒子)访问 Web 服务器。

这是不起作用时的配置:

NAT 适配器: NAT 适配器

桥接适配器: 桥接适配器

在我的虚拟机中运行 ifconfig,托管网络服务器。无法从互联网访问。这里的 IP 地址是 :99,因为我通过 VagrantFile(vagrant 的配置文件)设置了一个静态 IP: 在我的虚拟机中,托管网络服务器

突然,如果我删除 NAT 适配器,仅使用桥接适配器,它就可以工作了。 IP 地址更改为 DHCP 分配的地址,因为我只需打开: 删除了 NAT 适配器,只使用桥接适配器

我确信每次桥接适配器上的本地 IP 发生变化时,我都正确设置了端口转发,并且多次复制了该问题。

相关内容