Vagrant不会只转发80端口

The*_* GS 22 macos firewall centos portforwarding vagrant

我为流浪者设置了端口转发功能

Vagrant.configure("2") do |config|
  config.vm.box = "centOS"
  config.vm.network :forwarded_port, guest: 80, host: 80
  config.vm.network :forwarded_port, guest: 8443, host: 8443
  config.vm.network :forwarded_port, guest: 8443, host: 9443
  config.vm.network :forwarded_port, guest: 8445, host: 8445
  config.vm.network :forwarded_port, guest: 8000, host: 8000 
  config.vm.hostname = "www.vagrant.com"
end
Run Code Online (Sandbox Code Playgroud)

端口80从我的流浪虚拟盒子打开

[vagrant@www ~]$ nmap -sT 0.0.0.0 -p 80 

Starting Nmap 5.51 ( http://nmap.org ) at 2013-07-02 22:25 UTC
Nmap scan report for 0.0.0.0
Host is up (0.000063s latency).
PORT   STATE SERVICE
80/tcp open  http
Run Code Online (Sandbox Code Playgroud)

但它从我的主机关闭

Ben-Fischer:~ bfischer$ nmap -sT 0.0.0.0 -p 80 

Starting Nmap 6.25 ( http://nmap.org ) at 2013-07-02 17:38 CDT
Nmap scan report for 0.0.0.0
Host is up (0.000086s latency).
PORT   STATE  SERVICE
80/tcp closed http
Run Code Online (Sandbox Code Playgroud)

在我的主机上没有其他东西正在侦听端口80

Ben-Fischer:~ bfischer$ sudo lsof -n -i4TCP:80 | grep LISTEN
[no output]
Run Code Online (Sandbox Code Playgroud)

Iptables关闭,我的mac防火墙也是如此

[vagrant@www ~]$ sudo service iptables stop
Run Code Online (Sandbox Code Playgroud)

所有其他转发端口都可以正常工作(8443,9443,8445,8000)

这个盒子是来自vagrant,centOS 6.3和厨师的图片.

那么......为什么我不能从本地机器连接到端口80?

Ter*_*ang 36

我不认为您可以转发到主机端口<1024,除非VirtualBox root在主机上运行.

VirtualBox的手册说,这个关于NAT模式的限制:

转发主机端口<1024 不可能:

在基于Unix的主机(例如Linux,Solaris,Mac OS X)上,无法从非root运行的应用程序绑定到1024以下的端口.因此,如果您尝试配置此类端口转发,VM将拒绝启动.

这些限制通常不会影响标准网络使用.但是NAT的存在会产生微妙的影响,可能会干扰正常工作的协议.一个示例是NFS,其中服务器通常配置为拒绝来自非特权端口(即1024以下的端口)的连接.

  • 我尝试用sudo virtualbox启动VirtualBox,但我得到了相同的结果.有什么想法吗? (3认同)
  • 请注意,至少从Vagrant 1.4.1开始,VM将启动,即使`autocorrect`设置为true,但端口将不会转发. (2认同)

The*_* GS 23

特里的回答正确地诊断出了这个问题.这是我的解决方案:

而不是以root身份运行VirtualBox,而是前进两次.成立流浪汉转发主机:8080嘉宾:80.再加上与主机上的一些端口转发规则(使用IPFW实用程序),使80前进到8080主机上.然后8080将在客户机上发回80.

似乎令人费解,但本文介绍的设置更清晰 http://www.dmuth.org/node/1404/web-development-port-80-and-443-vagrant


Dav*_*ish 12

使用ipfw的替代方法是SSH,我没有在我的机器上安装(Arch Linux).

如果您在guest虚拟机上的端口80上运行Web服务器,则可以使用SSH在后台运行端口.

sudo ssh -p 2222 -gNfL 80:localhost:80 vagrant@localhost -i ~/.vagrant.d/insecure_private_key
Run Code Online (Sandbox Code Playgroud)


sga*_*esi 7

更新:

ipfw自OS X Mavericks起已被弃用.你应该使用pfctl而不是.我写了一篇文章,详细介绍了如何在此完成此任务:

http://salvatore.garbesi.com/vagrant-port-forwarding-on-mac/


在Mac OS X上通过终端:

sudo ipfw从80加入100 fwd 127.0.0.1,8080 tcp到80

这会将127.0.0.1:80上的所有传入流量重定向到127.0.0.1:8080