Lihuen
RSSRSS AtomAtom

QEMU/KVM

El documento está centrado en kvm, pero como el monitor de kvm está basado en qemu, casi todo lo mencionado aquí funcionará en qemu.

Instalación de kvm

Verificación de soporte para virtualización. Para ver si nuestro procesador soporta virtualización podemos ejecutar el siguiente comando

cat /proc/cpuinfo

y verificar si aparece el flag "vmx" para intel, o "svm" para amd.

En el caso de los intel es muy probable que haya que habilitar la opción de virtualización desde el bios y luego apagar y prender la máquina (no reiniciarla, tiene que quedar sin corriente el microprocesador).

Simplemente debemos instalar el paquete kvm con Synaptic o apt-get

apt-get install kvm

Consola de Qemu/KVM

Qemu tiene una consola accesible con ctrl+alt+2, para volver a la vista normal ctrl+alt+1. Para ver el listado de comandos podemos escribir el comando help o presionar tab para autocompletar.

Cambiar el cd de una virtual sin reiniciarla

Para cambiar la imagen de cd "en caliente" vamos a la consola de Qemu.

Primero veremos el nombre de la unidad para esto podemos usar el comando

info block

Archivo:SalidaQemuInfoBlock.png?

En el ejemplo la unidad se llama ide1-cd, si tuviera una imagen cargada podemos sacarla con eject

eject ide1-cd0

Y luego podemos poner otra imagen con change

change ide1-cd0 nombreDeLaIso.iso

Configuración de la red

En kvm/qemu tenemos varias formas de configurar la red. Voy a nombrar solamente 2 de las más comunes.

Modo usuario

Una opción es la red en modo usuario. Este caso es ideal cuando no tenemos privilegios en la máquina anfitrión y no requiere configuración extra.

Desde la máquina huésped podremos usar esta red simplemente ejecutando dhclient o la herramienta correspondiente al sistema operativo que usemos.

Desde el anfitrión no es necesaria ninguna configuración extra, la desventaja de esto es que el anfitrión no podrá conectarse con el huésped (aunque el huésped podrá conectarse con él y con otras máquinas).

Para usar redes en modo usuario debemos ejecutar kvm como sigue:

kvm -net nic -net user maquinaHuesped.img

Interfaz virtual

Con interfaces virtuales podremos hacer que las máquinas virtuales sean visibles desde el anfitrión, desde otras máquinas virtuales e incluso desde otras máquinas físicas.

Si tenemos configuradas iptables las reglas de forward parecen aplicarse al tráfico que pasa por el bridge. Es conveniente poner como policy en forward accept, al menos en las primeras pruebas de estas configuraciones.

Para esto precisaremos permisos especiales, en esta guía haremos todo con permisos de root, queda como trabajo para el lector, si es necesario como otorgar permisos a usuarios comunes para que realicen alguna de estas tareas.

En este modo crearemos interfaces virtuales para las máquinas virtuales y les asignaremos un nombre así serán visibles desde el anfitrión con ifconfig. Luego conectaremos estas interfaces como si estuvieran conectadas con un switch con bridge-utils.

Para crear interfaces virtuales tap, debemos instalar uml-utilities y bridge-utils para conectarlas con otras interfaces.

Creamos una interfaz tap

tunctl -t virt0
ifconfig virt0 promisc up

Luego ejecutamos kvm pasándole el nombre de la interfaz creada y dentro de la virtual configuramos la red como corresponda (típicamente veremos la interfaz que creamos como eth0 en GNU/Linux)

 kvm -net nic -net tap,ifname=virt0,script=no maquinaHuesped.img

Creamos un switch (o bridge) virtual y agregamos nuestra interfaz

brctl addbr br0
brctl addif br0 eth0 # O la interfaz que corresponda
brctl addif br0 virt0
ifconfig br0 up

Configuramos br0 con la ip que tenía nuestra interfaz física

ifconfig eth0 0.0.0.0 # Desconfiguramos eth0 # O la interfaz que corresponda
ifconfig br0 ... # Configuramos br0 como si fuera eth0

Nota: Asegurarse que permite el tráfico en el chain FORWARD con iptables

Fuentes y referencias