domingo, 4 de diciembre de 2011

Cómo accesar a un servidor corriendo en VirtualBox

Cuando instalamos una máquina virtual en VirtualBox tenemos acceso a internet sin problemas pero no podemos accesar desde la máquina host(la que alberga al equipo Guest o máquina virtual). Si tenemos un servidor corriendo en el equipo Guest y queremos accesar desde el equipo host debemos configurar algunas cosas con VBoxManage.

Ejecutaremos VBoxManage desde la consola o ventana de comandos, así que la abrimos y nos vamos al directorio donde se instaló VirtualBox, en mi caso:
cd C:\Program Files\Oracle\VirtualBox

Obtenemos el nombre del equipo Guest:
VBoxManage list vms

En mi caso obtendría:
"Debian_VBox" {...}


Ahora nos aseguramos que el equipo Guest esté apagado, y luego le agregaremos unos datos extra a su configuración:

VBoxManage setextradata "[nombreEquipoGuest]" "VBoxInternal/Devices/_VNA_/0/LUN#0/Config/[servicio]/HostPort" [puertoHost]
VBoxManage setextradata "[nombreEquipoGuest]" "VBoxInternal/Devices/_VNA_/0/LUN#0/Config/[servicio]/GuestPort" [puertoGuest]
VBoxManage setextradata "[nombreEquipoGuest]" "VBoxInternal/Devices/_VNA_/0/LUN#0/Config/[servicio]/Protocol" [protocolo]


Donde:
[nombreEquipoGuest] es, como bien dice, el nombre del equipo Guest o Máquina Virtual.

_VNA_ es elnombre del virtual network adapter, pcnet para PCnet-FAST III, e1000 para Intel PRO/1000 MT Desktop

[servicio] es el nombre del servicio que se expone en el equipo Guest y al que queremos acceder, puede ser el nombre que nosotros elijamos.

[puertoHost] es el puerto mediante el cual accederemos al servicio desde la máquina Host, es de nuestra elección, sólo debemos verificar que no esté coupado.

[puertoGuest] es el puerto que usa el servicio en el equipo Guest.

[protocolo] es el protocolo del servicio.

En mi caso tengo un servidor web más SSL(puerto 443) en el equipo Guest y quisiera ingresar desde el equipo Host usando el puerto 8877, los 3 comandos a ejecutar serían:

VBoxManage setextradata "Debian_VBox" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort" 8877
VBoxManage setextradata "Debian_VBox" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort" 443
VBoxManage setextradata "Debian_VBox" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/Protocol" TCP

Podemos ver la extradata agregada con el comando:
VBoxManage getextradata "Debian_VBox" enumerate


Luego Abrimos VirtualBox, vamos a Configuración/Red/Adaptador 1/Avanzadas/Tipo de Adaptador y elegimos:
PCnet-PCI II



Ahora puedo ingresar desde el equiipo Host al servidor web instalado en el equipo Guest con la dirección:
https://localhost:8877

VirtualBox se encargará de redireccionar mi petición al servidor de la máquina virtual.

Si quisieramos revertir estos cambios podemos hacerlo ejecutando los mismos comandos pero omitiendo los valores de [puertoHost], [puertoGuest] y [protocolo], por ejemplo si quisieramos quitar el puerto asignado al equipo Host:

VBoxManage setextradata "Debian_VBox" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort"

5 comentarios:

  1. muy buena explicacion, solo me queda la duda de como puedo obtener el puerto del servidor apache como lo indicas en la linea:
    VBoxManage setextradata "Debian_VBox" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort" 443
    Si lo mencionas, X fa, gracias.

    ResponderEliminar
    Respuestas
    1. Yo uso el puerto 443 porque Configuré apache, este al instarlo ocupa por defecto el puerto 80 por lo que puedes ingresar a la pagina que pone por defecto mediante la dirección:
      Http://localhost
      Como es 80 no hay necesidad de especificar el puerto en la dirección.
      De modo que si esa es la dirección entonces debes cambiar en el comando que pusiste el numero 443 por el 80.

      Eliminar
    2. saludos, pues no puedo accesar al equipo Guest, hice esto, tengo instalado en una maquina virtual a ubuntu 12.04, luego en las configuraciones de red, adaptador1, tengo conectado a NAT (no se si tiene que ver esto..), luego en tipo de adaptador: Intel PRO/1000 MT desktop (82540EM) y esta deshabilitado, apagada el equipo-virtual ubuntu12, pero no cerre el Oracle VM Virtual Administrador le asigne los datos extra a la configuracion configuracion:
      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/HostPort" 8070
      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/GuestPort" 443
      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/Protocol" TCP
      Ejecute la maquina virtual y a los puertos los cambie entrando como root: root@svrtprod:~# cd /etc/apache2/ports.conf
      NameVirtualHost *.8070
      Listen 8070
      y veo mas abajo que dice: # supported by MSIE on windows XP
      y se repite dos veces
      Listen 443 --> tambien tengo que cambiarlo

      Listen 443

      luego cd /etc/apache2/sites-enabled/000-default
      VirtualHost *:8070 los guarde y reinicie el servidor, desde el equipo ubuntu virtualizado ejecute http://localhost:8070/ y veo la pagina por default, ahora desde el equipo host que es windows7 ejecute en el mozila: http://localhost:8070/ o https://localhost:8070/ y nada, no se encuentra el servidor, que puedo hacer gracias.

      Eliminar
    3. Es que con la siguiente sentencia o comando le dices al vbox que cuando escribas en la maquina host http://localhost:8070 agarre esa petición y la redirija a la máquina guest, si en esta apache esta usando otro puerto no importa, vbox se encarga de redirigir:
      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/HostPort" 8070

      Con este comando le dices a vbox que el servidor apache en la máquina guest está usando el puerto X, en tu caso es el puerto 8070, de esta forma vbox sabrá a qué puerto redirigir: (ojo que este puerto puede ser diferente al del primer comando, es decir al que se usará en la máquina host)
      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/GuestPort" 8070

      Y con esto específicas el protocolo, para el caso es TCP:
      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/Protocol" TCP


      Entonces, los comandos finalmente quedarían:
      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/HostPort" 8070

      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/GuestPort" 8070

      VBoxManage setextradata "ubuntu12" "VBoxInternal/Devices/e1000/0/LUN#0/Config/apache/Protocol" TCP

      Eliminar
    4. ok, muchas gracias ya quedo, si quisiera conectarme desde windows hacia postgres que esta en la maquina virual seria lo mismo.

      Eliminar