Virtualbox "puerto hacia adelante" de invitado a host [cerrado]

162

He aquí mi arreglo:

- Host: Windows XP
- Guest: Ubuntu 10.04
- Networking: NAT

Estoy configurando un servidor web Apache en el Guest, pero quiero poder hacerlo en la máquina Windows:

- go to the browser, type http://localhost:8000

Además, intenté cambiar mi red a bridge y obtuve una nueva IP. Pero cuando intenté hacer http: //: 8000, dice que no se pudo conectar.

Carmen
fuente
1
Yo tuve el mismo problema. Resultó que el sistema operativo invitado tenía un firewall activo que estaba bloqueando el puerto 80.
Nicholas Shanks
149
Como desarrollador web que usa VirtualBox como parte de mi flujo de trabajo diario, no estoy de acuerdo con que esto esté marcado como fuera de tema. Por favor considere reabrir.
reciclar el
1
1. Vaya a la VM 2. ifconfig (obtenga IP local - debe ser 10.0.2.X) 3. ssh 10.0.2.2 para llegar a la máquina host
Mark Roberts
@deeperDATA Puede estar dentro del alcance del trabajo de un desarrollador web, pero el desbordamiento de la pila no está destinado a encapsular cada parte del trabajo. Es un testimonio de la complejidad de nuestra profesión que sus requisitos abarcan múltiples sitios de intercambio de pila.
Kevin Lawrence
1
Me llevó mucho tiempo hacerlo funcionar. Nuestro problema fue el enlace ip de la aplicación en el sistema invitado, se unió al nombre de la máquina, lo que significa 127.0.1.1 en ubuntu. Cambiamos el enlace a 0.0.0.0. Configuración de reenvío de puertos: Host IP = DNS Host IP, Host Port = 8080, Guest IP = IP of eth0, Guest Port = 8080.
lentamente

Respuestas:

222

Host de comunicación de red -> Invitado

Conéctese al Guest y descubra la dirección IP:

ifconfig 

ejemplo de resultado (la dirección IP es 10.0.2.15):

eth0      Link encap:Ethernet  HWaddr 08:00:27:AE:36:99
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

Vaya a la ventana de instancia de Vbox -> Menú -> Adaptadores de red:

  • el adaptador debe ser NAT
  • haga clic en "reenvío de puertos"
  • inserte un nuevo registro (+ icono)
    • para la IP del host, ingrese 127.0.0.1, y para la dirección IP del invitado que obtuvo de la anterior. paso (en mi caso es 10.0.2.15)
    • en su caso, el puerto es 8000; póngalo en ambos, pero puede cambiar el puerto de host si lo prefiere

Vaya al sistema host y pruébelo en el navegador:

http://127.0.0.1:8000

o su dirección IP de red (averigüe en la máquina host ejecutando: ipconfig).

Comunicación de red Invitado -> Anfitrión

En este caso, el reenvío de puertos no es necesario, la comunicación pasa por la LAN de regreso al host.

En la máquina host, encuentre su dirección IP de red:

ipconfig

ejemplo de resultado:

IP Address. . . . . . . . . . . . : 192.168.5.1

En la máquina invitada puede comunicarse directamente con el host, por ejemplo, verifíquelo con ping:

# ping 192.168.5.1
PING 192.168.5.1 (192.168.5.1) 56(84) bytes of data.
64 bytes from 192.168.5.1: icmp_seq=1 ttl=128 time=2.30 ms
...
Robert Lujo
fuente
11
ambos puertos no serán 8000. El puerto anfitrión será 8000 o lo que quieras, pero el puerto invitado debería ser 80
Yasin
55
En este caso, debería ser posible pasar de la VM al host yendo a la VM y obteniendo su dirección IP (10.0.2.15 como se muestra a continuación). Para llegar a la máquina host desde la VM, la IP es 10.0.2.2 (por convención).
Mark Roberts
55
Si usa NAT para el invitado ... Si el servicio que se ejecuta en el host está vinculado únicamente a 127.0.0.1, entonces el invitado no puede usar la IP pública del host para conectarse a ese servicio (servicio de ejemplo: privoxy). En su lugar, debe usar 10.0.2.2 como lo menciona Mark, o lo que sea 'route -n' (ejecutar en el invitado) como la puerta de enlace predeterminada.
desm
44
En el caso de CentOS, es posible que tengamos que desactivar el firewall o editar reglas específicas en el iptable
Reddy
2
Descubrí que no es necesario especificar las direcciones IP de Host o Guest, y puede dejar los cuadros en blanco. Aunque si solo desea conectarse desde localhost, probablemente sea una buena idea colocar 127.0.0.1 como Host.
mwfearnley
14

Eso no es posible. localhostsiempre está predeterminado en el dispositivo de bucle invertido en el sistema operativo local.
A medida que su máquina virtual ejecuta su propio sistema operativo, tiene su propio dispositivo de bucle invertido al que no puede acceder desde el exterior.

Si desea acceder a él, por ejemplo, en un navegador, conéctese a él utilizando la IP local:

http://192.168.180.1:8000

Esto es solo un ejemplo, por supuesto, puede averiguar la IP real emitiendo un ifconfigcomando en un shell en el sistema operativo invitado.

Chris
fuente
Intenté esto también, pero no funcionó tanto para NAT como para bridge. Los registros de apache en el invitado no dan ningún error y el apache está en funcionamiento en el invitado.
Carmen
¿Estás seguro de que estás utilizando la IP correcta? Puede verificar eso intentando acceder a la dirección desde el interior de la máquina virtual. Si eso falla, está utilizando una IP incorrecta o su apache no está configurado para escuchar en el puerto 8080.
Chris
Trabajó para mí, ¡gracias!
Matt Frear
Me funcionó a mi también. Antes de reemplazar "localhost" con la dirección IP del sistema operativo host, siempre recibí "El servidor rechazó su clave" y "Acceso denegado" sin explicación en /var/log/auth.log a pesar de LogLevel DEBUG3 en / etc / ssh / sshd_config
VR
@Chris, ¿significa esto que en el host, con entradas de host virtuales como mysite.localhostno serán accesibles para la máquina Invitado, porque debo referirme al Host usando solo una dirección IP?
danjah