Bridges de red para VirtualBox y QEMU

networking

Si alguna vez habéis utilizado VirtualBox, QEMU, VMWare o similares, puede que os hayáis encontrado con el problema de que no podéis acceder a servidores que se ejecutan en el SO huésped desde otros equipos externos.

Eso es porque estas máquinas virtuales suelen traer soporte para NAT pero no siempre para bridging. Una solución es crear un dispositivo que haga de puente entre el interfaz de red del SO huésped y el del SO anfitrión. En esta receta veremos cómo hacerlo.

Ingredientes

  • uml-utils
  • bridge-utils

El Puente

Necesitamos crear un dispositivo en nuestro sistema anfitrión que haga las veces de puente. Lo podemos poner directamente en el archivo /etc/network/interfaces, de forma que se cree en el arranque y esté disponible en el sistema. Añadiremos las siguientes líneas al fichero:

#dispsitivo puente para virtualización
iface br0 inet dhcp
bridge_ports eth0
up chmod 0666 /dev/net/tun

A continuación, reiniciamos la red con:

# /etc/init.d/networking restart

Si miramos ahora las interfaces de red, veremos que tenemos un nuevo dispositivo llamado br0, que es el puente entre nuestra eth0 y los SO huésped.

El Enlace

Antes de nada, nos aseguramos de tener cargados el módulo tun y el kqemu (en caso de utilizar QEMU, claro).

# modprobe tun kqemu

Antes de arrancar la máquina virtual, será necesario crear un dispositivo que será el que se comunique con el interfaz del SO huésped, y añadirlo al puente br0.

# tunctl -u $USER
Set 'tap0' persistent and owned by uid 1000
# ifconfig tap0 up
# brctl addif br0 tap0

Si volvemos a mirar las interfaces de red, además del br0 encontraremos también el tap0. Cuando vayamos a arrancar la máquina virtual, hay que configurarla para que utilice el dispositivo tap0 como interfaz de red. Las siguientes imágenes muestran cómo hacerlo en VirtualBox y QEMU:




En ambos programas hay un campo de texto que pide el nombre de un script. Si hemos colocado las instrucciones anteriores de creación y configuración de los dispositivos br0 y tap0 en un script, podemos poner aquí el nombre del mismo. Así, supuestamente, se ejecutará el script antes de arrancar la máquina virtual, aunque a mí no me ha funcionado muy bien y he tenido que ejecutar el script manualmente.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Script automatico

Hola Nacho, agrego en este hilo, un script que me curré hace tiempo, hace algo parecido al tuyo pero sin tener que dejar nada fijo....

Os dejo la configuracion y el script para que al lanzarlo se cree automáticamente el bridge y así solucionar el único problema que le veo a esta magnífica aplicación, muy pero que muy dura competidora de VmWare, por lo menos en la versión workstation.......­

Para la utilización del script necesitaremos un par de paquetes:

root@juanmi:~# apt-get install uml-utilities bridge-utils

Con estos dos paquetes seremos capaces de crear tuneles y bridge, ahora el simple script:

root@juanmi:~# vi /usr/local/bin/crea_bridge_para_virtual_box

#!/bin/bash
echo "Usar así: 'crea_bridge_para_virtual_box tap2'"
sudo tunctl -t $1 -u juanmi
sudo brctl addbr br0
sudo ifconfig eth0 0.0.0.0 promisc
sudo brctl addif br0 eth0
sudo dhclient br0
sudo brctl addif br0 $1
sudo ifconfig $1 up
sudo chmod 0666 /dev/net/tun

La forma de utilización crea_bridge_para_virtual_box tap2 que será el que tenemos definido en virtual box, configuración de red, como Interfaz Anfitrión y Nombre de la Interfaz.

No olvideis cambiar el "juanmi" del script por el usuario que ejecutará el VirtualBox.

Hay que darle permisos de ejecución:

root@juanmi:~# chmod a+x /usr/local/bin/crea_bridge_para_virtual_box

Si quereis que se ejecute tendreis que poner el script en el inicio, algo asi:

root@juanmi:~# vi /etc/init.d/crea_tuneles.sh

#!/bin/bash
crea_bridge_para_virtual_box tap1
crea_bridge_para_virtual_box tap2
crea_bridge_para_virtual_box tap3

Podeis leer el artículo completo en Improvisa :: Bridge automático para Virtual Box

Imagen de oscarah

Hombre...

Un apunte, esto no siempre pasa. Generalmente no es necesario hacer un bridge para tener red, porque se dispone de un bonito NAT a tal efecto. Sólo es imprescindible hacerlo si quieres eliminar el NAT (lease, quieres poner un servicio a la escucha en el guest). Sólo eso, por lo demás, perfecto Sticking out tongue

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1