Automatizar el acceso a la red de Qemu mediante tun/tap
Continuo el tutorial acerca de la creación de máquinas virtuales con Qemu. En esta parte voy a comentar la automatización de la creación del puente (bridge) en nuestro Linux para que Qemu utilice el dispositivo tun/tap sin que antes debamos escribir todos los comandos uno por uno. Utilizaré la imagen de windows xp que creé en la entrada anterior.
El primer paso es cargar los módulos necesarios en memoria (en el caso que no los tengamos compilados directamente en el kernel). Para ello, los añadimos a la lista de módulos que se van a cargar durante el arranque de nuestro sistema
su -c ‘echo tun >> /etc/modules’
su -c ‘echo bridge >> /etc/modules’
El siguiente paso es instalar sudo (si no lo tenemos instalado) y dar los permisos correspondientes para que un usuario normal (sin privilegios) pueda ejecutar qemu con soporte tun/tap.
su -c ‘apt-get install sudo’
Utilizando la herramienta visudo con el usuario root editamos el archivo sudoers y damos permisos de ejecución de los comandos que necesitaremos al usuario en cuestión que ejecutará qemu. El archivo, al final, quedará así:
# /etc/sudoers
#
# This file MUST be edited with the ‘visudo’ command as root.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
# Host alias specification
# User alias specification
#
# Cmnd alias specification
Cmnd_Alias QEMU=/sbin/ifconfig, /usr/sbin/brctl, /usr/sbin/tunctl, /sbin/route
#
# User privilege specification
root ALL=(ALL) ALL
jordi ALL=NOPASSWD: QEMU
En este ejemplo, jordi es el nombre de mi usuario, y debe cambiarse por el nombre de usuario que vayas a utilizar.
Seguidamente, crearemos un par de scripts. El primero, llamado qemu-bridge-up nos va a crear el puente y a añadirle nuestro dispositivo de red (eth0)
#!/ bin/sh
sudo ifconfig eth0 down
sudo brctl addbr br0
sudo ifconfig eth0 0.0.0.0 up
sudo brctl addif br0 eth0
sudo ifconfig br0 192.168.1.12 up # indica aquí la IP de tu host
sudo route add default gw 192.168.1.1 # indica aquí la IP de tu puerta de enlace (router)
El segundo script que crearemos lo he llamado runwin y es el que va a ejecutar qemu.
#!/ bin/sh
USERID=`whoami`
iface=`sudo tunctl -b -u $USERID`
./qemu-bridge-up
qemu -hda /home/$USERID/vms/windows -m 384 -localtime -net nic -net tap,ifname=$iface
sudo tunctl -d $iface &>/dev/null
En este script, el parámetro /home/$USERID/vms/windows es el path al archivo que contiene la imagen que creamos anteriormente de windows xp. Esto debes cambiarlo por el camino donde se encuentra la imagen que tu has creado.
Si lo crees conveniente, puedes cambiar la llamada a qemu a tu gusto, pero manteniendo siempre los parámetros -net nic -net tap,ifname=$iface
Ahora damos permisos de ejecución a estos dos scripts
chmod 700 qemu-bridge-up runwin
Finalmente solo queda añadir unas lineas al script que qemu ejecuta por defecto cuando arranca y que se encuentra en /etc/qemu-ifup. Lo editamos con root
#!/ bin/sh
echo “$1 device up”
sudo ifconfig $1 0.0.0.0 promisc up
sudo brctl addif br0 $1
Esto activa y añade el dispositivo tap0 al puente br0 que hemos creado en el script anterior, qemu-bridge-up. Nos aseguramos que qemu-ifup tenga suficientes permisos de ejecución para cualquier usuario
su -c ‘chmod 755 /etc/qemu-ifup’
Una vez hecho todo esto, comprobamos que funciona ejecutando el script runwin. Una vez sabemos que funciona, podemos incluir un acceso directo en el escritorio, por ejemplo, que ejecute este script.
En la siguiente entrada comentaro como acelerar la ejecución de qemu mediante kqemu.
[…] Microsoft, la informática y el futuro Automatizar el acceso a la red de Qemu mediante tun/tap » Martes 11 de Marzo, […]