Vagrant - 私有网络的端口转发行为

Vagrant - Port forwarding behavior with private networks

我正在使用 vagrant 测试 nginx 设置,但我似乎遗漏了一些细节,因为当我尝试从静态 ip 上的主机访问 nginx 时,连接超时。我的 Vagrant 文件:

   # -*- mode: ruby -*-
   # vi: set ft=ruby :
   $script = <<-SCRIPT
     sudo apt-get -y update
     sudo apt-get install -y nginx
   SCRIPT

   ###################################
   Vagrant.configure("2") do |config|
   # webserver server
   config.vm.define "webserver" do |webserver|
      webserver.vm.box = "bento/ubuntu-16.04"
      webserver.ssh.insert_key = false
      webserver.vm.network "private_network", ip: "192.168.10.101"
      webserver.vm.network "forwarded_port", guest: 80 , host: 4000, host_ip: "127.0.0.1"
      webserver.vm.hostname = "webserver"
      webserver.vm.provision "shell", inline: "sed 's/127\.0\.0\.1.*webserver.*/192\.168\.10\.101 webserver/' -i /etc/hosts"
      webserver.vm.provider "virtualbox" do |vb|
      # Customize VM
       vb.name = "webserver"
       vb.memory = "1024"
       vb.cpus = "2"
      end
   end
 end

我可以访问 nginx vi localhost:4000,但是如果我访问 http://192.168.10.101:4000,连接就会超时。我也试过如下停止防火墙:

 vagrant@webserver:~$ sudo ufw disable
 Firewall stopped and disabled on system startup

没有帮助。请问有什么指导吗?

编辑 - 1

阅读 https://www.vagrantup.com/docs/virtualbox/networking.html 上的文档后,我删除了 virtualbox 专用网络。但是,这个问题有点令人困惑,因为现在我可以访问 nginx 测试页面: http://192.168.10.101 但不在 http://192.168.10.101:4000。虽然我可以访问http://localhost:4000。可能是我遗漏了什么。

编辑 - 2

运行 vm 中的 python simplehttpserver 和转发端口:

   python -m SimpleHTTPServer 8000

Vagrantfile

   dbserver.vm.network "forwarded_port", guest: 8000 , host: 5000, host_ip: "127.0.0.1"

但是我可以访问我的测试页面:

http://192.168.10.102:8000/

但不像

http://192.168.10.102:5000/

所以这让我觉得有一些规则允许我访问我的 virtualbox 端口,而无需在专用网络上进行实际端口转发。

  $> netstat -nr
  Routing tables

  Internet:
  Destination        Gateway            Flags        Refs      Use   Netif Expire
  default            192.168.0.1        UGSc           40        0     en0
  127                127.0.0.1          UCS             0        0     lo0
  127.0.0.1          127.0.0.1          UH              4    57934     lo0
  169.254            link#4             UCS             0        0     en0
  192.168.0          link#4             UCS             0        0     en0
  192.168.0.1/32     link#4             UCS             1        0     en0
  192.168.0.1        c0:a0:bb:c6:f5:58  UHLWIir        48     6051     en0   1188
  192.168.0.101/32   link#4             UCS             0        0     en0
  192.168.10         link#17            UC              2        0 vboxnet
  192.168.10.102     8:0:27:1b:d5:98    UHLWI           0       73 vboxnet    586
  224.0.0/4          link#4             UmCS            2        0     en0
  224.0.0.251        1:0:5e:0:0:fb      UHmLWI          0        0     en0
  239.255.255.250    1:0:5e:7f:ff:fa    UHmLWI          0     1067     en0
  255.255.255.255/32 link#4             UCS             0        0     en0

试图分析并在 vagrant site. 中找到。

尽管他们给出了Defining a Forwarded Port,但他们在以下内容中提到了免责声明。

For most providers, forwarded ports by default bind to all interfaces. This means that other devices on your network can access the forwarded ports. If you want to restrict access, see the guest_ip and host_ip settings below.

在这种情况下,virtualbox 提供程序似乎可以解决问题。默认转发来宾计算机端口。 我还觉得这个 forwarded_port 网络配置选项效果不佳。


我在我的机器上尝试了与上述 vagrant 文件相同的设置。

我的观察:

  • 你的 vagrant 文件的脚本部分没有安装 nginx 在我的本地 vagrant
  • 我尝试在我的本地 vagrant 中手动安装 nginx,并使其成为 运行。
  • 我能够从宿主机的浏览器中看到客户机的 nginx 主页。
  • 在来宾计算机中 nginx 运行 默认 80 端口。在主机中可以从端口 80 本身访问。

link的结论是:

For most providers, forwarded ports by default bind to all interfaces.


编辑: 即使在 guest-machine 中尝试使用示例 python 服务器 运行 并进行测试,也可以在 vagrant 设置中访问 python-web 服务器而无需任何 fwding 端口。

以下是 vagrant 中 python 服务器的输出:

(envflask) vagrant@webserver:~/test$ ls
flasktest.py
(envflask) vagrant@webserver:~/test$ python flasktest.py 
Starting RestServer at port 9595
 * Running on http://0.0.0.0:9595/ (Press CTRL+C to quit)
127.0.0.1 - - [08/Aug/2017 13:35:01] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [08/Aug/2017 13:35:16] "GET / HTTP/1.1" 200 -