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

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

Tengo un servidor Rails en una máquina virtual y necesito acceder al localhost desde el host. Probé tanto NAT (mediante reenvío de puertos: puertos 80 y 3000 en el lado del invitado) como un adaptador puenteado, pero nada parece funcionar.

En ambos casos pude acceder al puerto 80 pero no logré conectarme al localhost en el puerto 3000 (por lo que no hubo problemas para 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 invitado.

Tengo Linux (Debian) como invitado y Windows 7 como host; uso VirtualBox.

Respuesta1

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

Dirección de unión de rieles

Cuando Rails (u otra aplicación de servidor) se abre para recibir conexiones de red, se vinculará 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, de forma predeterminada, Rails solo aceptará solicitudes enviadas a su localhostadaptador de red (bucle invertido) (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 Debian: buena y segura para pruebas, pero no útil para producción, ni siquiera para pruebas desde una computadora diferente.

Si desea que se pueda acceder a Rails desde cualquier otra computadora (incluido su host de Windows 7), deberá indicarle a Rails que se vincule a cualquier dirección IP que tenga Debian y que sea accesible desde el exterior (ver más abajo).

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

rails server -p 80 -b 0.0.0.0

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

Es probable que esto sea lo que aún te haya estropeado incluso si tuvieras los otros dos componentes funcionando.

Dirección IP de la máquina virtual

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

La regla general localhostes que siempre se refiere a la misma computadora. Sin embargo, para fines de conexión en red, su máquina virtual Debian es su propia computadora independiente. 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 Puente (como mencionó en su pregunta). Esto colocará su Debian directamente en la misma red exterior/doméstica/de trabajo 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éctelo a la barra de direcciones de su navegador.

  • Utilice un adaptador NAT yReenvío de puertos de VirtualBox. En mi opinión, 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, entonces valdría la pena investigarlo. Si Debian ejecuta un firewall, deberá abrir cualquier puerto al que desee acceder desde otra máquina.

Espero que esto ayude :)

información relacionada