2011/06/07

Acceder a un Server en Virtualbox desde el Host

Virtualbox es una aplicación que permite instalar un sistema operativo dentro de otro. Por ejemplo, puedo instalar Ubuntu Linux dentro de Windows 7. En el caso que describo a continuación, está instalado Windows XP dentro de Ubuntu Linux (Natty Narwhal).

Por qué
Al requerir un entorno de desarrollo Drupal que sea portable, la solución que encontré fue usar XamppLite portable (disponible para Windows) en un USB.

Como trabajar directamente en el USB me parece muy lento, copio el directorio de xampplite al disco duro y trabajo allí. Luego, al final del día, sincronizo esa copia con el USB.

Como todo el estado de la base de datos MySQL está en los archivos generados, al copiarlos todas las bases de datos, tablas y cambios se reflejan idénticamente.

Al volver a trabajar en Linux, me interesó encontrar un modo de levantar el xampplite. Intenté con Wine y, aunque arranca el panel de control de xampp, no se puede iniciar el servidor apache. Entonces, lo hice con Virtualbox.

Instalé Virtualbox 4.0.8 para Ubuntu y allí instalé Windows XP.

De modo que, en la jerga de la virtualización, Ubuntu es el Host y Windows XP es el Guest.

Pude correr xampplite y funcionaba apache. Pero no encontraba el modo de acceder al servicio web del Guest desde el Host.

Usando VBoxManage
No logré encontrar en la interfaz de Virtualbox un modo de configurar eso.

Después de navegar un poco en Internet, encontré en Sitepoint el artículo Build Your Own Dev Server with VirtualBox. Allí, la solución consiste en editar a mano el archivo XML de la configuración de la máquina virtual.

Si uno revisa ese archivo (VirtualBox.xml) puede encontrar la advertencia de no editarlo a mano. Así que indagué un poco más para ver si había otro modo y lo encontré en el artículo How to access a server running in a VirtualBox guest, que indica cómo hacer los cambios usando el comando VBoxManage.

Primero hay que apagar la máquina virtual. Los cambios se harán efectivos al reiniciarla.

Para listar las máquinas virtuales:

VBoxManage list vms

Hay que establecer varios extradata en el Guest "Windows XP":

VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort" 8888
VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort" 80
VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/Protocol" TCP

Para verificar:

VBoxManage getextradata "Windows XP" enumerate

Si hubiera que eliminar alguno, bastaría con darle un valor en blanco. Por ejemplo:

VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort" 8888

A continuación inicié el Guest, y el servidor apache que contiene.

En el Host pude acceder al servicio web entrando a:

http://localhost:8888

Referencias

3 comentarios:

  1. Excelente tu post pero me sirvió medias, te explico:
    hice todo lo que explicas aqui pero igual no puedo acceder al localhost del guest...
    que configuracion de red hay que tener en el VM.
    ya deshabilite el firewall en windows y nada
    que otra cosa puedo hacer
    saludos

    ResponderBorrar
  2. Gracias. Lo que se me ocurre es que repitas los pasos haciendo las comprobaciones que puedas. También podrías verificar que el host (linux) no tenga algún firewall que esté interfiriendo.

    ResponderBorrar
  3. Buen post.. Yo ando buscando lo inverso a esto.. Es decir, acceder al localhost del host (linux) desde el guest (w7).. Tenés idea si se puede?

    ResponderBorrar