que para library curso boxes macos centos firewall vagrant portforwarding

macos - para - Vagrant no reenviará SOLAMENTE el puerto 80



vagrant manual (7)

Reenvío de puertos para Vagrant en OSX: ipfw se deprecia

Además de la respuesta de @ sgarbesi, ipfw se depreció a partir de OS X Mavericks. Lamentablemente no pude acceder a la solución que publicó, ya que el enlace parece estar roto.

Sin embargo, se le acredita en la solución que se describe aquí: https://www.danpurdy.co.uk/web-development/osx-yosemite-port-forwarding-for-vagrant/

Estoy pegando la solución aquí para completarla, con la esperanza de que ayude a alguien:

Configurar el control de puertos en la máquina virtual

Agregue lo siguiente a su Vagrantfile, según la documentación de Vagrant :

config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "forwarded_port", guest: 443, host: 4443

Instalar disparadores Vagrant

Para instalar vagrant-triggers, debe navegar en una ventana de terminal a la carpeta donde se guarda su Vagrantfile y ejecutar el siguiente comando:

vagrant plugin install vagrant-triggers

Use Vagrant Triggers para habilitar automáticamente el reenvío de puertos

Agregue lo siguiente a su Vagrantfile:

config.trigger.after [:provision, :up, :reload] do system(''echo " rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080 rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 443 -> 127.0.0.1 port 4443 " | sudo pfctl -ef - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080, 443 -> 4443 & Enabling pf"'') end config.trigger.after [:halt, :destroy] do system("sudo pfctl -df /etc/pf.conf > /dev/null 2>&1; echo ''==> Removing Port Forwarding & Disabling pf''") end

Esto une los puertos 80 y 443 a los puertos 8080 y 4443, respectivamente, en Vagrant Provision, los carga y vuelve a cargar y los elimina al detenerlos o destruirlos. Tenga en cuenta que pf no está habilitado de forma predeterminada en OSX, por lo que pasamos la marca -e cuando agregamos las reglas para habilitar pf y la bandera -d para deshabilitarla nuevamente cuando eliminamos el reenvío de puertos.

He configurado el reenvío de puertos para 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

El puerto 80 está abierto desde mi caja virtual errante

[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

Pero está cerrado desde mi máquina host

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

Nada más está escuchando en el puerto 80 en mi máquina host

Ben-Fischer:~ bfischer$ sudo lsof -n -i4TCP:80 | grep LISTEN [no output]

Las iptables están apagadas y mi cortafuegos mac

[vagrant@www ~]$ sudo service iptables stop

Y todos los demás puertos reenviados funcionan bien (8443,9443,8445,8000)

La caja es una imagen de vagrant, centOS 6.3 con chef.

Entonces ... ¿por qué no puedo conectarme al puerto 80 desde mi máquina local?


La respuesta de Terry diagnosticó correctamente el problema. Aquí está mi solución:

En lugar de ejecutar VirtualBox como root, reenvíe el puerto dos veces. Configure vagrant para reenviar el host: 8080 a guest: 80. Combine eso con algunas reglas de reenvío de puertos en la máquina host (usando la utilidad ipfw) para que 80 pase a 8080 en la máquina host. Luego, 8080 se enviará de vuelta a 80 en la máquina invitada.

Parece complicado, pero este artículo describe la configuración con mayor claridad http://www.dmuth.org/node/1404/web-development-port-80-and-443-vagrant


No creo que pueda reenviar a puertos de host <1024, a menos que VirtualBox se ejecute como root en el host.

El Manual de VirtualBox dice esto acerca de la limitación del modo NAT:

Reenvío de puertos host <1024 imposible :

En hosts basados ​​en Unix (por ejemplo, Linux, Solaris, Mac OS X) no es posible enlazar a puertos por debajo de 1024 desde aplicaciones que no son ejecutadas por root. Como resultado, si intenta configurar dicho reenvío de puerto, la máquina virtual se negará a iniciar.

Estas limitaciones normalmente no afectan el uso estándar de la red. Pero la presencia de NAT tiene efectos sutiles que pueden interferir con los protocolos que normalmente funcionan. Un ejemplo es NFS, donde el servidor a menudo está configurado para rechazar las conexiones de puertos no privilegiados (es decir, puertos por debajo de 1024).


Puede configurar el reenvío de puertos en VirtualBox:

Su VM -> Configuración -> Red -> Avanzada -> reenvío de puertos

Aquí puedes agregar los puertos que necesites.


Puede usar un adaptador de puente y luego apuntar a la dirección IP local en lugar de usar localhost. Ya que esto puede variar según el host (como la dirección IP local en uso, etc.) pondré todo en un archivo config.yml externo.

# ... require ''yaml'' current_dir = File.dirname(File.expand_path(__FILE__)) configs = YAML.load_file("#{current_dir}/config.yml") vagrant_config = configs[''config''][configs[''config''][''use'']] VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # http://docs.vagrantup.com/v2/virtualbox/networking.html config.vm.network vagrant_config[''vm''][''network_type''], ip: vagrant_config[''vm''][''network_ip''], bridge: vagrant_config[''vm''][''network_bridge''], virtualbox__intnet: vagrant_config[''vm''][''network_intnet''] config.vm.network "forwarded_port", guest: 80, host: vagrant_config[''http_server''][''host_port''] # ...

Sigue el archivo config.yml:

config: use: "public" private: # this is the old configuration that doesn''t let you forward on port 80 vb: cpus: 2 memory: 4096 vm: network_type: "private_network" network_ip: "192.168.33.10" network_intnet: true network_bridge: "" synced_folder: "/home/francesco/whatever/vagrant-synced-folder" http_server: host_port: 8080 public: # here follows the new bridged configuration that let you use port 80! vb: cpus: 2 memory: 4096 vm: network_type: "public_network" network_ip: "192.168.1.123" network_intnet: false network_bridge: "eth0" # or whatever is your adapter name! synced_folder: "/home/francesco/whatever/vagrant-synced-folder" http_server: host_port: 80

Luego solo ve a http://192.168.1.123:80/ :-)


Una alternativa al uso de ipfw, que no tenía instalado en mi máquina (Arch Linux), es SSH.

Si está ejecutando el servidor web en el puerto 80 en el invitado, puede ejecutar un puerto hacia adelante en segundo plano utilizando SSH.

sudo ssh -p 2222 -gNfL 80:localhost:80 vagrant@localhost -i ~/.vagrant.d/insecure_private_key


ACTUALIZAR:

ipfw ha quedado en desuso a partir de OS X Mavericks. Deberías estar usando pfctl lugar. Escribí un artículo que explica en detalle cómo lograr esto aquí:

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

En Mac OS X a través de Terminal:

sudo ipfw add 100 fwd 127.0.0.1,8080 tcp de cualquiera 80 me

Esto redireccionará todo el tráfico entrante en 127.0.0.1:80 a 127.0.0.1:8080