Hacer accesible una imagen de QEMU en la red en Debian
Introducción
Muchos de vosotros, en vuestro día a día
de desarrollo de aplicaciones, o incluso para otras tareas,
necesitaréis servidores, como pueden ser mysql, sql server,
tomcat, jboss, o muchos otros… Si además desarrolláis
en grupo puede ser muy conveniente preparar un entorno de desarrollo
común al grupo de manera que todo el mundo trabaje sobre la
misma instancia de servidor y de base de datos, etc..
Una idea muy buena es para esta tarea es crear una
imagen del entorno de desarrollo ya preparado. Esto plantea varias
ventajas, la primera es que se puede poner dicha imagen en cualquier
servidor rápidamente y que todo el mundo se ponga a trabajar;
además la imagen puede estar grabada en DVD, con lo que cada
desarrollador podría utilizarla en sus propias máquinas
para trabajar desde casa o en un cliente… y lo mejor es que una
veza acabado el proyecto la imagen podría quitarse del
servidor para dejar espacio y recursos, y si tiempo más tarde
se necesita seguir desarrollando en ese proyecto, el volver a montar
el entorno es poco costoso.
Esta es la manera en la que trabajamos en Autentia,
y como nos gusta el software libre utilizamos QEMU para hacer
funcionar la imágenes creadas (tenéis tutoriales de
cómo instalar QEMU en linux y windows).
En este tutorial vamos a ver cómo podemos
hacer accesible una imagen de qemu a toda la red, para poder utilizar
los servicios de dicha imagen (para hacer lo mismo en windows tenéis
una guia aquí).
Al lio
Suponemos que tenéis instalado qemu y
configurado correctamente siguiendo los tutoriales de
adictosaltrabajo,
y hemos creado el tun/tap. Los pasos a seguir seran los siguientes:
crear un bridge en nuestro Debian y finalmente cambiar el fichero que
levanta la interfaz tun/tap de qemu para que utilice el bridge
creado.
Para poder crear el bridge debemos asegurarnos que
tenemos instalado el paquete bridge-utils (si
no lo teneis instalado lo podeis hacer desde synaptic, o desde
consola con apt-get install bridge-utils).
/etc/network/interfaces
En primer lugar vamos a editar el archivo
/etc/network/interfaces para
crear el bridge y desactivar eth0 (la interfaz de red de la intranet,
en mi caso):
#
This file describes the network interfaces available on your system
#
and how to activate them. For more information, see interfaces(5).
#
The loopback network interface
auto
lo
iface lo inet loopback
#
The bridge network interface(s)
auto
br0
iface br0 inet static
address 192.168.1.5
network
192.168.1.0
netmask 255.255.255.0
broadcast
192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_fd
9
bridge_hello 2
bridge_maxage 12
bridge_stp off
#
The primary network interface
#allow-hotplug eth0
#iface eth0
inet static
# address 192.168.1.5
# netmask 255.255.255.0
#
network 192.168.1.0
# broadcast 192.168.1.255
# gateway
192.168.1.1
# dns-* options are implemented by the resolvconf
package, if installed
# dns-nameservers 192.168.1.1
#
dns-search autentia
Resaltado en verde tenemos el código que
debemos introducir para crear el bridge (al que he llamado br0). Si
os dais cuenta las primeras lineas son como las de la interfaz eth0
(la seccion en azul comentada que se encuentra debajo de br0). Vereis
que tengo definida la ip de manera estática. Si lo quisierais
tener dinámicamente lo definís como lo tuvierais en
eth0. Lo importante son las líneas con prefijo bridge,
y sobre todo la siguiente linea:
bridge_ports
eth0
que es la que indica de que interfaz de red hay que
recoger los paquetes para pasárselos a las imágenes de
qemu.
/etc/qemu-ifup
Ahora modificamos la conexión de qemu para que
utilice la interfaz correcta y pueda utilizar el bridge y ser
accesible para la red. Modificamos el fichero /etc/qemu-ifup para
dejarlo de la siguiente manera:
#!/bin/sh
sudo
/sbin/ifconfig $1 0.0.0.0 promisc up
sudo /usr/sbin/brctl addif
br0 $1
sleep 2
Modificando el sistema operativo del qemu
Lo último que tendríamos que realizar
sería cambiar la ip del sistema operativo instalado en la
imagen de qemu y ponerle una dirección ip que no esté
utilizada en nuestra intranet, y claro está, que pertenezca a
la misma subred (si queremos ponerle una ip estática), o
configurarlo para que obtenga dicha ip por DHCP.
Resultado
El resultado de las operaciones anteriores es que
hemos conseguido tener en nuestra red interna una máquina más,
que sera aquella que tenemos en la imagen, y cuya ip será la
que hemos configurado anteriormente (por eso debe ser una ip libre en
nuestra intranet y en la misma subred). Podeis probarlo haciendo ping
a la imagen de qemu desde otra máquina de la intranet.