Virtualización

Máquinas virtuales en interfaces TAP con Qemu

puertos red ordenador antiguo

Paquetes necesarios:

  • bridge-utils
  • UMLUtilities
  • Qemu

 

Tenemos un anfitrión en el que ejecutamos Qemu y queremos varias máquinas virtuales con direcciones IP de la misma red que la maquina anfitrión conectadas con un bridge.

Para ello necesitaremos en el sistema operativo anfitrión un puente (bridge) y asociado a éste, al menos, una interface tap. Conceptualemente, bridge-utils proporciona algo así como switch virtual de capa dos. Las interfaces tap serían los puertos de acceso en los que se conectan los dispositivos finales (las maquinas virtualizadas) y el interface br sería el enlace trunk, el cual conecta con la interface ethx.

Para crear un bridge en Debian Squeeze hemos de editar el archivo /etc/network/interfaces

Borramos o comentamos las líneas con los parametros de la interface ethx

Añadimos en el archivo las interfaces tap que serán utilizadas. Ejemplo:

auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user usuariolinux
auto tap1
iface tap1 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user usuariolinux

Con el parametro tunctl_user definimos qué usuario tendrá permiso para utilizar la interface tap.

Añadimos el puente. Ejemplo:

auto br0
iface br0 inet static
address 192.168.1.4
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth1 tap0 tap1
bridge_maxwait 0

Con el parámetro bridge_ports asociamos las interfaces tap0 y tap1 al br0, éste ultimo con eth1.

Así las interfaces tap0 y tap1 tendrán direcciones IP de la red 192.168.1.0/24

Para comprobar que las interfaces estén correctamente añadidas:

bridge name  bridge id            STP enabled  interfaces
br0          8000.1ae850.1fa9c4    no          eth1
                                               tap0
                                               tap1

Si alguna interface no se hubiera asociado al puente, utilizamos el comando brctl para añadir la interface al puente, por ejemplo:

#brctl addif br0 tap1

Con esto ya tenemos dos interfaces tap «a la escucha” en las que conectar dispositivos virtuales.

Para que un usuario del sistema utilice la interface tap es necesario que esté en el grupo uml-net.

Lanzamos el emulador, por ejemplo:

$qemu-system-i386 -hda 'drive.img' -m 256 -net nic,model=e1000, -net tap,ifname=tap0,script=no,downscript=no

No puede haber más de una maquina funcionando al mismo tiempo cuyas interfaces tap tengan el mismo nombre. En ese caso, solo tendrá acceso a la red la que haya sido lanzada en primer lugar.

Por último, tan sólo hay que configurar los parametros TCP/IP en los sistemas operativos invitados como si tuveran una conexion directa al medio fisico de transmisión.

 

Hi, I’m Gustavo Moreno