Servidor virtual en Intrepid Ibex

Llevo ya tiempo estudiando las distintas soluciones más populares de virtualización para GNU/Linux: VMWare, VirtualBox, Qemu. Finalmente y después de algunas pruebas (nada científicas o exhaustivas) me decidí por VirtualBox. No porque las otras no sirvan para nada, la verdad es que las tres son excelentes, pero la decisión se basó en el nivel de intrusión que se genera en el sistema operativo local... el cual es mi estación de trabajo y es muy importante para mi.
Por ejemplo, VMWare tiene la manía de querer modificar mi kernel, y eso no me mola nada. VirtualBox utiliza un módulo que ya viene en el kernel Linux.
En fin, la idea de esta entrada es la de un HOWTO para hacer que la máquina virtual sea accesible desde Internet y de la LAN, porque de hecho, será un servidor de aplicaciones de pruebas (Jboss, HTTP/modpy, FTP).
Después de instalar VirtualBox (en Intrepid Ibex la versión es la 2.0.4 OSE) creamos una máquina virtual. A la hora de configurar la red, vamos a utilizar la opción "Host Interface" e introducimos en el campo "Host Interface" lo siguiente: vth0
Genial, ahora tenemos que crear vth0. Esta es sencillamente, una tarjeta de red virtual. Para que ésta tenga conexión, necesitamos crear un "puente" entre vth0 y eth0. Para lo cual creamos el siguiente script:




#!/bin/bash

if [ -z $1 ]; then
echo "Usage: $0 [start|stop]"
exit 1
fi

#Check root

USER=$(id -u)

if [ "$USER" -ne "0" ]; then
echo "Must be root"
exit 1
fi

USER=ubersoldat
TAP=vth0
BR=br0
ETH=eth0

function doStart {
#No parece ser necesario ya que el usuario
#pertenece al grupo virtualbox
#chmod 0666 /dev/vboxdrv
#chmod 0666 /dev/net/tun

#Create the bridge
brctl addbr $BR
ifconfig $ETH 0.0.0.0 promisc
brctl addif $BR $ETH
dhclient $BR

tunctl -t $TAP -u $USER
brctl addif $BR $TAP
ifconfig $TAP up

echo "$TAP ready"
}

function doStop {
ifconfig $BR down
ifconfig $TAP down
tunctl -d $TAP
brctl delbr $BR
dhclient $ETH

echo "Cleaned"
}

case $1 in
start)
doStart
;;

stop)
doStop
;;

*)
echo "Usage: $0 [start|stop]"
;;
esac

exit 0




Ejecutamos como root y tendremos lista vth0 siempre que el DHCP funcione. Al ejecutar la maquina virtual y darle como parámetro nuestra interfaz virtual, el servidor podrá conectarse a Internet y viceversa. Sólo tendréis que configurar un dirección IP estática para la maquina virtual y abrir los puertos en el router.



Me parece importante recalcar que todo el tráfico pasará por eth0 por lo que podemos hacer cualquier modificación o capturarlo desde la estación de trabajo.


Nota:
Según tengo entendido, la versión 2.1 de VirtualBox se "engancha" directamente a eth0 sin la necesidad de realizar todo esto. Pero no es la versión que está en los repositorios de Ubuntu, por lo que hay que apañarse.