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"
但是我可以访问我的测试页面:
但不像
所以这让我觉得有一些规则允许我访问我的 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 -
我正在使用 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"
但是我可以访问我的测试页面:
但不像
所以这让我觉得有一些规则允许我访问我的 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 -