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.


blog comments powered by Disqus