lunes, 5 de octubre de 2015

Virtualbox: Acceso en dos direcciones

Virtualbox, en mi opinión, es el mejor programa para virtualizar. Hace poco encontré manera de poder acceder a la máquina virtual, a la que llamaremos 'guest', desde el 'host' (donde está instalado Virtualbox), a través de un navegador, o algo por el estilo.

Básicamente hay tres tipos de adaptadores de red para Virtualbox:

- NAT: Maquina virtual puede acceder a Internet. 'Host' no puede acceder a ella
- Host-only adapter: Maquina virtual no puede acceder a Internet. 'Host' puede acceder a ella
- Bridged: Supuestamente, una mezcla de NAT y Host-only adapter.

Sin embargo, al menos en Ubuntu 14.04, al configurar una máquina virtual con Bridged, se quedaba el arranque en 'Waiting for network configuration'. Al final arrancaba, pero no funcionaba como debía. Asi que Bridged está descartado.

Entonces, como hacer para que el 'host' pueda acceder a la máquina virtual, y que el 'guest' tenga acceso a Internet?

Así:

Damos clic derecho a la máquina virtual -> Settings -> Network.


Dejamos esto tal como está (Attached to NAT). Seleccionamos la pestaña Adapter 2 y habilitamos Enable Network Adatper. Seleccionamos 'Attached to Host-only adapter'.


Ya esta. Acepta y ahora arranca la máquina virtual.

Mi 'guest' es Ubuntu 14.04, así que una vez dentro, veo la configuración de Internet con el comando ifconfig


Esto da dos direcciones IP:
10.0.2.15
127.0.0.1

La segunda dirección es 'home', asi que no nos sirve para acceder a ella. La primera dirección no nos deja acceder tampoco.

Pero si hacemos ping (ej. a 8.8.8.8, Google):


Vemos que sí tiene salida. Bien, sólo falta que tenga una IP a la cual el 'host' pueda acceder.

Como ya configuramos los adaptadores de red, solo falta que Ubuntu los use. Si estás haciendo ping, presiona Control + C para detenerlo.

Ahora escribe:

sudoedit /etc/network/interfaces

Te pedirá la contraseña. Escríbela y verás un archivo:


Debajo de las líneas:

auto eth0
iface eth0 inet dhcp

Escribe lo mismo, pero con eth1 en vez de eth0.

Así quedará:

auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet dhcp


Presionamos Control + X. Nos preguntará si queremos grabar, presionamos 'y'. Presionamos Enter para confirmar el archivo que estamos grabando.

Ahora escribimos sudo reboot para reiniciar la máquina virtual.

Una vez reiniciada, escribimos ifconfig



En la seccion de 'eth1' podemos ver que tenemos una nueva dirección IP: 192.168.56.104, en mi caso. Esa es la dirección IP del 'guest' que podemos acceder desde el 'host'.

Si hacemos ping, vemos que aun tenemos Internet:


Y desde Windows (o el 'host' que sea), podemos hacer ping a esa maquina virtual con la IP que obtuvimos:


Así, podemos dejar listo un servidor dentro de la maquina virtual, instalando paquetes desde Internet, y accediendo desde Windows. Por ejemplo, dentro del 'guest' instalé Gitlab. Como tiene Internet, el servidor se pudo descargar los paquetes y configurarlo. Y desde el 'host', escribo la dirección IP y veo la página configurada.


Si configuras otra máquina virtual con estos mismos ajustes, te dará una dirección IP diferente, y las maquinas virtuales pueden acceder entre ellas.