【问题标题】:Vagrant - Port forwarding behavior with private networksVagrant - 私有网络的端口转发行为
【发布时间】:2017-08-06 15:35:18
【问题描述】:

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

   # -*- 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

流浪文件

   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

【问题讨论】:

  • 尝试评论forwarded_port 行并执行vagrant up。并验证您是否可以访问?
  • 我做到了,它现在只转发端口 22。 ==> 网络服务器:转发端口...网络服务器:22(访客)=> 2222(主机)(适配器 1)。我仍然可以在 80 端口访问 nginx 测试页面。我似乎错过了关于转发机制的一些要点
  • 如果你能修复,那就太好了。如果仍然有问题,请告诉我,但我需要在本地系统中进行设置并尝试。 :) 如果您仍然遇到问题,我会尝试这样做并更新您。
  • 谢谢@Haranadh。现在这并不是真正的问题,而是好奇地了解行为是什么。如果您可以尝试一下,看看这是否也是您最后会发生的事情,那就太好了
  • 在我的本地机器上尝试了设置,并分享了我的发现作为答案。我也面临和你一样的情况。 forwarded_port 不像 docker 那样真正地完成它的工作。

标签: nginx vagrant virtualbox


【解决方案1】:

尝试分析,发现在vagrant site.

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

对于大多数提供程序,默认情况下转发端口绑定到所有接口。这意味着您网络上的其他设备可以访问转发的端口。如果要限制访问,请参阅下面的 guest_ip 和 host_ip 设置。

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


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

我的观察:

  • 您的 vagrant 文件的脚本部分未在我的本地 vagrant 中安装 nginx
  • 我尝试在本地vagrant 中手动安装nginx,并使其运行。
  • 我可以从主机浏览器看到nginx 来宾机的主页。
  • 在客机nginx 在默认80 端口上运行。并且在主机中可以从端口80本身访问。

链接的结论是:

对于大多数提供程序,默认情况下转发端口绑定到所有接口。


编辑: 即使尝试使用在guest-machine 中运行的示例 python 服务器,并且经过测试,也可以在 vagrant 设置中访问 python-webserver 而无需任何 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 -

【讨论】:

  • @f-z-n:如果我的回答澄清了你的问题,如果你喜欢我的回答,请接受。
猜你喜欢
  • 2016-01-13
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多