libvirt en Debian: jugando con la red …

debian-logo… porque hasta ahora ha sido de verdad un juego de niños.

No es la primera vez que utilizo virtualización pero estaba deseando que existiese algún sistema más o menos normalizado en Debian para gestionarla. Y lo he encontrado en libvirt, un nombre rarito para un mecanismo muy bien organizado.

De momento he creado dos máquinas virtuales con Debian en el ordenador de mi casa: la primera servirá para disponer de una UCS aislada y la segunda para realizar pruebas de paquetes en escritorios.

La instalación ha sido limpia y rápida empleando una imagen ISO de Debian 7.3 (variedad netinst, arquitectura amd64), pero cuando las he puesto en marcha me he dado cuenta de que las necesito más integradas en mi red. La configuración predeterminada crea un puente ajeno a mi red y no es eso lo que espero. Así que me he puesto manos a la obra.

Creando un puente de red

Siguiendo las instrucciones del wiki de libvirt procedo a crear el puente para que las máquinas virtuales se conecten a la misma red y tenga acceso sencillo a ellas.

  1. Detener network-manager que en mi caso ha sido tan sencillo como desinstalarlo. No me hace falta alguna para una máquina de escritorio con conexión cableada a la red.
  2. Añadir una etiqueta al repositorio que tengo en /etc con etckeeper.
  3. Cambio el interfaz de red eth-lan por un puente llamado br0 y se lo asigno.
  4. Retoco algunos ajustes del núcleo empleando sysctl con un archivo concreto por si acaso situado en /etc/sysctl.d/local.conf.
auto br0 
iface br0 inet static
address 192.168.100.2
netmask 255.255.255.0
network 192.168.100.0
gateway 192.168.100.1
bridge_ports eth-lan
bridge_stp on
bridge_maxwait 0
bridge_fd 0

de manera que el puente queda como:

falcata:/etc/network# brctl show 
bridge name bridge id STP enabled interfaces
br0 8000.f81a6702df84 yes eth-lan
virbr0 8000.000000000000 yes

Se edita la configuración de la máquina virtual con virsh edit y se cambia la configuración del interfaz de red para que use el puente de red. La MAC y la dirección PCI se asignan automáticamente así que no hay que preocuparse más que por el atributo source y el atributo model.

<interface type='bridge'>
      <mac address='00:16:3e:1a:b3:4a'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

Se reinicia la máquina virtual y listo. Ella solita pide una dirección de red a mi servidor interno y como éste es dnsmasq registra también el nombre de cliente. Ya sabemos quién es y dónde está.

Uso de las máquinas virtuales

En Debian Wheezy es de lo más sencillo. No sólo porque el sistema registra dichas máquinas a nivel global y no hay que andarse con directorios específicos por cada usuario y un cruce endemoniado de permisos de acceso entre ellos. También separa el funcionamiento de las máquinas de su acceso por lo que es muy cómodo de poner en marcha y conectarte cuando quieras a las mismas.

Ahora tengo un reto por delante. Aunque a nivel más o menos personal la virtualización empleando estas herramientas no suponga ningún problema, dado que son equipos con Debian, a nivel laboral la cosa se complica: en el trabajo tengo que conseguir virtualizar de esta forma un Windows 7 Home Edition y un Linux Suse 7.2 en el que corren las aplicaciones de la empresa.

Escribiré sobre el resultado (bueno o aterradoramente malo) porque sería un enorme adelanto tener dichas máquinas disponibles de esta forma.