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_port
pará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:hostport
opción. Por lo tanto, si desea conectarse al puerto12345
del 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:80
Esto 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 -N
En 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 Networks
overForwarded Ports
Las 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 Port
Cómo configurar
Host-Only Networks
config.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
Vagrantfile
voluntad le indicará al vagabundo que cree una red privada que tenga una dirección IP estática:192.168.0.0
La 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 hacerloifconfig
en la máquina virtual para encontrar su dirección IP.192.168.0.0
no 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.1
tiempos de espera de conexión. Configurando la red que se192.168.50.4
resolverá, 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.2
sea 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
(oipconfig
en 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
ifconfig
yip address
no me estaban consiguiendo lo que necesitaba, pero lonetstat -rn
hice.Agregue lo siguiente a su
~/.ssh/config
en 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 -lt
má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).
curl
Probé 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_network
y reenviar desde el puerto 22 de laVagrantfile
siguiente 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