viernes, 9 de mayo de 2008

Virtualizacion, usando Qemu en CentOS 4.X

Qemu, creado por Fabrice Bellard, es un emulador de procesador que permite ejecutar distintos sistemas operativos como máquinas virtuales (VM, o Virtual Machines) desde un sistema anfitrión. Se puede utilizar fácilmente en CentOS 4, y usar la imaginación para implementar toda una gama de servicios a través de servidores virtuales. A continuación, publico el guión /etc/qemu-ifup necesario para utilizar Qemu con virtualización completa. Incluye instrucciones.
Si utilizas LPT Desktop, solo necesitas instalar qemu:
yum -y install qemu
El módulo para el núcleo (kernel), tiene una licencia restrictiva que prohibe su distribución sin autorización de Fabrice Bellard. Requiere descargarse desde este enlace y compilarse del siguiente modo:
su - root
yum -y install kernel-devel gcc glibc-devel
wget http://fabrice.bellard.free.fr/qemu/kqemu-1.3.0pre9.tar.gz
tar -zxvf kqemu-1.3.0pre9.tar.gz
cd kqemu-1.3.0pre9
./configure
make
make install
El resto implica leer el manual de qemu (man qemu), crear una imagen de disco (ejemplo: qemu-img create algo.img 10GB), instalarle un sistema operativo y crear el fichero /etc/qemu-ifup con el siguiente contenido:
#!/bin/sh
# Contenido de /etc/qemu-ifup
# Qemu lo buscará en esta ruta, de modo predefinido.
#
# Requisitos de sustento lógico:
# qemu-0.8.2
# (disponible en: http://fabrice.bellard.free.fr/qemu/)
# kqemu-1.3.0pre9
# (disponible en: http://fabrice.bellard.free.fr/qemu/qemu-accel.html)
#
# Añadir esto en /etc/rc.local y ejecutarlo:
# echo 1024 > /proc/sys/dev/rtc/max-user-freq
# rm -f /dev/kqemu
# mknod /dev/kqemu c 250 0
# chmod 666 /dev/kqemu
# /sbin/modprobe kqemu major=0 &
#
# NOTA: Las direcciones IP se pueden cambiarse al gusto y necesidades.
# Anfitrión (Linux) usará para tap0: 10.0.0.200/255.0.0.0
# Invitado (qemu) usará para eth0: 10.0.0.50/255.0.0.0
#
# Suponiendo que se usará CentOS 4 como sistema invitado desde qemu...
# Configurar interfaz eth0 de qemu (la dirección MAC es la establecida
# de modo predefinido):
#
# DEVICE=eth0
# ONBOOT=yes
# BOOTPROTO=static
# HWADDR=52:54:00:12:24:56
# IPADDR=10.0.0.50
# NETMASK=255.0.0.0
# GATEWAY=10.0.0.200
#
# Considerando que se quieren utilizar 256 MB RAM, soporte USB, audio,
# virtualización completa (usando el módulo para el núcelo de Qemu) y
# una imagen de disco denominada centos4.img, ejecutar qemu de este
# modo:
#
# sudo qemu -usb -m 256 -soundhw es1370 \
# -kernel-kqemu -hda centos4.img \
# -net nic -net tap
#
# Se necesitan privilegios de root (sudo, recomendado) para poder
# utilizar e iniciar interfaz tap.
#
# Cargar el módulo tun.
sudo /sbin/modprobe tun
#
# Configurar la interfaz del dispositivo tun0 configure
sudo /sbin/ifconfig tap0 10.0.0.200
#
# Activar reenvío de IP
sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
#
# Establecer el ruteo hacia la IP invitada
sudo /sbin/route add -host 10.0.0.50 dev tap0
#
# Activar Porxy ARP hacia la dirección ARP "falsa".
sudo bash -c 'echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp'
#
# establecer una dirección ARP "falsa"
sudo /sbin/arp -Ds 10.0.0.50 eth0 pub
#
# Se puede utilizar un verdadero y robusto muro cortafuegos como
# shorewall y configurar eth0 como la zona net y tap0 como zona dmz o
# loc y hacer combinaciones con la política DNAT en
# /etc/shorewall/rules. Es decir, configurar un cortafuegos e
# iniciarlo a continuación.
#
# sudo /sbin/service shorewall start
#
# Reglas básicas de iptables.
# El ejemplo considera que el Anfitrión tiene como IP 192.168.1.254 y
# utiliza reglas de iptables MUY MUY MUY básicas.
#
# Limpiar reglas
sudo /sbin/iptables -t nat -F PREROUTING
sudo /sbin/iptables -t nat -F POSTROUTING
# Enmascaramiento para permitir salida
sudo /sbin/iptables -t nat -A POSTROUTING -s 10.0.0.0/16 \
-d 0.0.0.0/0 -j MASQUERADE
# Reenviar TODO el tráfico hacia la máquina virtual en Qemu.#
# Recomiendo usar reglas más específicas y u buen cortafuegos, como
# Shorewall.
sudo /sbin/iptables -t nat -A PREROUTING -d 192.168.1.254 -j DNAT \
--to-destination 10.0.0.50

No hay comentarios: