Configurando un puente en la interfaz de red para las KVM en Linux Ubuntu 9.10

Introducción.

Cuando se instala KVM se crea una red privada por defecto (192.168.122.0) para las máquinas virtuales las cuales sólo son accesibles desde el mismo huésped.

(revisar) Si lo que se desea, como en mi caso, es que las máquinas virtuales obtengan una dirección del servicio de DHCP y puedan ser accedidas desde la red LAN como un servidor real es necesario crear un puente en la interfaz de red del servidor para permitirle a las máquinas virtuales acceder a la red física a través de este.

El procedimiento para hacer esto es simple y se describe a continuación.

Advertencia acerca de la red inalámbrica.

Utilizando el método convencional para la creación de puentes no es posible utilizar interfaces de red inalámbricas ya que sus tarjetas no permiten realizar ip spoofing necesario para su implementación.  Es necesario entonces contar con un acceso alámbrico a la red LAN para poder realizar el procedimiento descrito en este artículo.

Investigando en Internet encontré varios foros en los que se menciona que es posible dar solución a este problema sin utilizar el procedimiento estándar sino utilizando aproximaciones alternativas que no estarían supeditadas a la red alámbrica, sin embargo después de cuatro días de intentos y pruebas no me funcionaron así que tuve que utilizar la red cableada.  Las aproximaciones alternativas que sugieren mayor posibilidad de éxito son las siguientes.

En mi caso lo que revisió mayor dificultad para realizar las pruebas de estos procedimientos resultó, mas que la implementación de los mismos que de por si es bastante simple, la configuración de las máquinas KVM (he utilizado libvirt para su manipulación) para que utilicen la nueva interfaz de red ya que los ejemplos mejor descritos que encontré hacían referencia a Virtualbox y para KVM su configuración es notoriamente diferente.

Procedimiento.

Configurar el huésped (servidor de máquinas virtuales).

Instalar el paquete de utilidades para la creación de puentes de red.

$ sudo apt-get install bridge-utils

Editar el archivo de configuración de interfaces de red para agregar la configuración del puente.

$ sudo vi /etc/network/interfaces

Este procedimiento se puede realizar de dos maneras: de manera estática especificando la información precisa de conexión a la red o de manera dinámica permitiendo adquirir la configuración automática desde un servidor DHCP.

De manera estática se realiza de la siguiente manera.

auto br0
iface br0 inet static
address 192.168.1.10
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

De manera dinámica se realiza de la siguiente manera.

auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

En ambos casos se está creando el puente br0 para acceder a la red a través de la interfaz eth0 (red alámbrica).

Reiniciar la configuración de red para tomar en cuenta los cambios recién realizados.

$ sudo /etc/init.d/networking restart

Verificar el estado de los cambios.

$ ifconfig

br0 Link encap:Ethernet  HWaddr 00:24:21:b6:12:11
inet addr:192.168.1.99 Bcast:192.168.1.255  Mask:255.255.255.0
inet6 addr: fe80::224:21ff:feb6:1211/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:991 errors:0 dropped:0 overruns:0 frame:0
TX packets:90 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:62573 (62.5 KB)  TX bytes:14537 (14.5 KB)

eth0 Link encap:Ethernet  HWaddr 00:24:21:b6:12:11
inet addr:192.168.1.99 Bcast:192.168.1.255  Mask:255.255.255.0
inet6 addr: fe80::224:21ff:feb6:1211/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:991 errors:0 dropped:0 overruns:0 frame:0
TX packets:898 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:77339 (77.3 KB)  TX bytes:67197 (67.1 KB)
Interrupt:27

Nótese como aparece la nueva interfaz de red del puente (br0) que toma igual configuración de red de su destino (eth0).

Configurar el invitado (máquinas virtuales).

Editar la información de especificación de la máquina virtual.

$ virsh edit IDENTIFICADOR_DOMINIO

Modificar la sección de la configuración de red (<interface>) con el siguiente estilo.

<interface type=’bridge’>
<source bridge=’br0‘/>
<model type=’virtio’/>
<mac address=’00:11:22:33:44:55’/>
</interface>

Actualice la información de la máquina virtual en el Hypervisor e iníciela.

$ virsh -c qemu:///system define /etc/libvirt/qemu/IDENTIFICADOR_DOMINIO.xml

$ virsh -c qemu:///system start IDENTIFICADOR_DOMINIO

Para confirmar el éxito de la configuración, en la máquina virtual consulte su dirección IP, la cual deberá coincidir con la especificada durante la configuración (estática) o la proporcionada por el servidor DHCP (dinámica).

Acerca de la dirección MAC de las interfaces virtuales.

Siempre es conveniente especificar una dirección MAC y que esta sea única entre las diferentes máquinas virtuales para evitar cualquier tipo de confusión.  Con respecto a esta dirección se recomienda que el primer valor sea par (como por ejemplo 00).

Para facilitar la generación de direcciones MAC al azar, la documentación de KVM en Ubuntu incluye un script muy útil.

$ sudo apt-get install randomize-lines

$ vi ~/bin/kvmGenMac               # Almacénelo donde desee.

#!/bin/sh
echo -n "54:52:00"
for i in 1 2 3; do
    echo -n ":"
    for j in 1 2; do
        for k in 0 1 2 3 4 5 6 7 8 9 A B C D E F; do
            echo $k
        done|rl|sed -n 1p
    done|while read m; do
        echo -n $m
    done
done
echo

$ chmod +x ~/bin/kvmGenMac

Para ejecutarlo simplemente invoque el shell y obtenga la dirección MAC al azar de la salida estándar.

$ ./bin/kvmGenMac

Enlaces.

4 thoughts on “Configurando un puente en la interfaz de red para las KVM en Linux Ubuntu 9.10”

  1. Bueno yo he levantado KVM en un servidor HP, y si estas usando KVM ya viene incluido el bridge utils etc incluyendo el script(sudo apt-get install kvm-qemu), ahora siento que la configuracion de tu puente es un poco incorrecta, ya que cuando haces esclavo a una interface esta NO debe tener IP, alcontrario se supone es esclava de la Master y solo la Master debe tener IP, otra cosita al configurar el XML tienes que hacer tambien unos cambios en la declaracion del manejador de maquinas virtuales(no solo en el VIRSH) es decir si usas visual (Virtual-Manager [apt-get instal virt-manager] necesitas configurarlo ya que en el esta otra declaracion de como esta configurada la maquina virtual y al cambiar el XML esta desaparece al siguiente reinicio de la Maquina Virtual.

  2. Hola Isaac, muchas gracias por tu comentario.

    La modificación en el XML la hice en las máquinas que ya tenía creadas para pasarlas a utilizar la interfaz en puente y si mal no recuerdo seguian funcionando después de reiniciarlas. Las nuevas máquinas las creaba utilizando virt-install con la opción –network bridge:br0 así que quedaban bien configuradas desde el comienzo.

    No soy experto en el tema pero recuerdo que esta configuración me costó bastantes pruebas para hacerla funcionar en Ubuntu. Inicialmente esperaba que se necesitara configurar la información en la interfaz de red real (eth0) y que el puente tomara esta información pero no me funcionaba así.

    Casualmente este fin de semana migré mi servidor de desarrollo a ArchLinux y tuve que volver a realizar este procedimiento en esta distribución. En este proceso obtuve la misma conclusión práctica que te menciono: fue necesario configurar la información de la dirección IP en la interfaz puente (br0) y no en la interfaz real (eth0).

    Documenté el procedimiento que tuve que seguir para configurar el puente en el siguiente post. Me gustaría que le echaras un ojito y me contarás si tienes alguna sugerencia al respecto tu que tienes mas experiencia al respecto.

    http://blog.jorgeivanmeza.com/2011/11/configurar-una-interfaz-de-red-en-puente-bridge-en-archlinux/

Leave a Reply

Your email address will not be published. Required fields are marked *