Estoy trabajando en una arquitectura de servicios web. Tengo un software que necesito ejecutar en la máquina host nativa, no en Vagrant. Pero me gustaría ejecutar algunos servicios al cliente en el invitado.
El config.vm.forwarded_portparámetro de Vagrant abrirá un puerto en el host y enviará los datos al invitado. Pero, ¿cómo puedo abrir un puerto en el invitado y enviar los datos al host? (Sigue siendo un reenvío de puertos, pero en la dirección inversa).
vagrant
portforwarding
Dan Fabulich
fuente
fuente

Respuestas:
Cuando ejecuta
vagrant ssh, en realidad está usando este comando subyacente:ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]SSH admite el reenvío de puertos en la dirección que desee con la
-R guestport:host:hostportopción. Por lo tanto, si desea conectarse al puerto12345del invitado y reenviarlolocalhost:80, debe usar este comando:ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]Como comenta correctamente Eero, también puedes usar el comando
vagrant ssh -- -R 12345:localhost:80, que tiene el mismo efecto en un comando mucho más conciso.fuente
vagrant ssh -- -R 12345:localhost:80Esto sigue la sintaxis de la opción ssh -R [bind_address:] port: host: hostport , donde el primer número es el número de puerto para escuchar dentro de la máquina invitada, y los dos últimos son la dirección de servicio como visible desde la máquina host.vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -NEn el libro
Vagrant: Up and Running(fecha de publicación: 12 de junio de 2013), escrito por el creador de Vagrant, mencionó que no es posible que la máquina invitada acceda a los servicios que se ejecutan en la máquina host.En lugar de usar
Forwarded Ports, puede configurar una red privada usandoHost-Only Networks.Ventajas de usar
Host-Only NetworksoverForwarded PortsLas máquinas invitadas pueden acceder a los servicios que se ejecutan en la máquina host
Esta característica solucionaría su problema.
Las máquinas invitadas pueden acceder a los servicios que se ejecutan en otra máquina invitada
Esta función es muy útil para separar servicios en varias máquinas para imitar con mayor precisión un entorno de producción.
Seguro
Las máquinas externas no tienen forma de acceder a los servicios que se ejecutan en las máquinas invitadas
Menos trabajo
No es necesario configurar cada uno
Forwarded PortCómo configurar
Host-Only Networksconfig.vm.network :"hostonly", "192.168.0.0"# Vagrant Versión # 1config.vm.network :private_network, ip: "192.168.0.0"# Vagrant Versión # 2Tener esta línea en su
Vagrantfilevoluntad le indicará al vagabundo que cree una red privada que tenga una dirección IP estática:192.168.0.0La dirección IP del host es siempre la misma dirección IP pero con el octeto final como 1. En el ejemplo anterior, la máquina host tendría la dirección IP
192.168.0.1.fuente
Vagrant: Up and Running), podría configurar una red en puente. En una red con puente, otras máquinas de su red local pueden acceder a su máquina virtual y viceversa. Pero dado que la dirección IP se asigna a través de DHCP, tendría que hacerloifconfigen la máquina virtual para encontrar su dirección IP.192.168.0.0no funcionó: curvar / hacer ping en la máquina host estaba dando como resultado una conexión t / o. El uso de la dirección de @ Nucleon (de acuerdo con los documentos de Vagrant sobre el tema) funcionó como se anunciaba.config.vm.network :private_network, ip: "192.168.0.0"y el encrespamiento / ping en el host generaba192.168.0.1tiempos de espera de conexión. Configurando la red que se192.168.50.4resolverá, es decir, host disponible en192.168.50.1.Puede acceder a los puertos de la máquina host a través de la puerta de enlace predeterminada dentro del sistema operativo invitado. (Que normalmente tiene una IP de
10.0.2.2).Por ejemplo, si tiene un servidor web ejecutándose en el puerto 8000 en su máquina host ...
Puede acceder a él desde el interior de la máquina virtual Vagrant en
10.0.2.2:8000(siempre que10.0.2.2sea la IP de la puerta de enlace predeterminada del invitado):Para encontrar la IP de la puerta de enlace predeterminada dentro del sistema operativo invitado, ejecute
netstat -rn(oipconfigen un invitado de Windows) y busque la fila con una IP de destino de0.0.0.0(o el campo etiquetado como "Puerta de enlace predeterminada" en Windows):Puede extraer esta IP mediante programación con
netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2.Fuentes: Cómo conectarse con el host PostgreSQL desde la máquina virtualbox vagabunda ; ¿Conectarse a la máquina host desde un SO invitado de VirtualBox?
fuente
ifconfigyip addressno me estaban consiguiendo lo que necesitaba, pero lonetstat -rnhice.Agregue lo siguiente a su
~/.ssh/configen la máquina host:Le permite acceder a un servicio en el puerto 52698 de la máquina host de Vagrant, siempre que haya iniciado sesión a través de
vagrant ssh.Puede confirmar que funciona ejecutando una
netstat -ltmáquina virtual vagabunda y tomando nota de las siguientes líneas:fuente
Puedo acceder a los servicios que se ejecutan en mi máquina host a través de su dirección IP local (no su dirección de bucle de retorno).
curlProbé creando un servidor http en el puerto 80 (y luego en el puerto 987) y en 197.45.0.10:80 y 197.45.0.10:987 (la dirección IP real cambió para proteger a los inocentes). Funcionó en ambas ocasiones, y no tengo ninguna configuración especial de vagabundos (ni red_pública, ni puerto_enviado) y aunque tengo algunos puertos reenviados a través de PuTTY, no tengo reenviados los puertos 80 y 987. Entonces, tal vez intente usar la dirección IP pública o local de la máquina host.Y si desea acceder (ssh a) una instancia de vagabundo invitado desde otra, puede habilitar
public_networky reenviar desde el puerto 22 de laVagrantfilesiguiente manera:Entonces, mientras ese puerto esté abierto (es decir, haga más reenvío de puertos en la configuración de su enrutador), puede acceder a esa máquina desde cualquier lugar, incluso el mundo exterior.
fuente