No se puede acceder al servidor Rails en la VM desde el host

12

Tengo un servidor rails en una máquina virtual y necesito acceder a localhost desde el host. He intentado tanto NAT (mediante el reenvío de puertos - puerto 80 y 3000 en el lado del invitado) como el adaptador en puente, pero nada parece funcionar.

En ambos casos pude acceder al puerto 80 pero no pude intentar conectarme a localhost en el puerto 3000 (por lo que no hubo ningún problema al acceder al servidor xampp).

Avíseme si tiene alguna idea de cómo se puede acceder al host local desde el host mientras el servidor está en el lado del invitado.

Tengo Linux (Debian) en el invitado y Windows 7 en el lado del host. Uso VirtualBox.

Hubert Siwkin
fuente

Respuestas:

10

Aquí hay al menos tres componentes separados en juego, cada uno de los cuales debe configurarse correctamente.

Dirección de enlace de rieles

Cuando Rails (u otra aplicación de servidor) se abre para recibir conexiones de red, se unirá tanto a una IP como a un puerto. Si una solicitud entrante no coincide con ambos, no aceptará la conexión. De rails server --help:

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
...

Entonces, por defecto, Rails solo aceptará solicitudes enviadas a su localhostadaptador de red (loopback) (llamado lo). Dado que solo se puede acceder a este adaptador desde la misma computadora, las únicas solicitudes que aceptará serán desde la propia máquina virtual de Debian: buenas y seguras para las pruebas, pero no útiles para la producción, o incluso pruebas desde una computadora diferente.

Si desea que sus Rails sean accesibles desde cualquier otra computadora (incluido su host de Windows 7), deberá decirle a Rails que se vincule a la dirección IP que Debian tenga que sea accesible desde el exterior (consulte a continuación).

Sin embargo, una manera más fácil es decirle a Rails que se una a la dirección IP especial 0.0.0.0, lo que significa cualquier adaptador de red . Entonces, iniciando su servidor Rails así:

rails server -p 80 -b 0.0.0.0

hará que su sitio web sea accesible para cualquiera que pueda ver su VM en la red.

Esto es probablemente lo que aún lo ha confundido, incluso si tenía los otros dos componentes funcionando.

Dirección IP de VM

Debe apuntar su navegador a la máquina virtual Debian, que es su propia computadora discreta.

La regla general con localhostes que siempre se refiere a la misma computadora. Sin embargo, para propósitos de red, su máquina virtual Debian es su propia computadora separada. Si está utilizando un navegador web en su host de Windows 7, localhostsiempre se referirá a su Windows 7 y nada más.

Tienes dos opciones aquí:

  • Configure el adaptador VirtualBox VM en modo Bridge (como mencionó en su pregunta). Esto colocará su Debian directamente en la misma red externa / doméstica / laboral que su host de Windows 7. Luego puede determinar la IP de su máquina virtual Debian ejecutando ifconfig. Busque la IP de su eth0o eth<something>adaptador. Conéctalo a la barra de direcciones de tu navegador.

  • Use un adaptador NAT y el reenvío de puertos VirtualBox . OMI, esto es más complicado.

Cortafuegos Debian

Ha pasado un tiempo desde que trabajé en Debian, así que no sé cuáles son los valores predeterminados actuales, pero si las dos cosas anteriores no funcionan, vale la pena analizarlo. Si Debian está ejecutando un firewall, deberá abrir cualquier puerto al que desee acceder desde otra máquina.

Espero que esto ayude :)

Samuel Jaeschke
fuente