jueves, 6 de diciembre de 2007

Como hacer un puente (bridge) para máquinas virtuales VirtualBox


¿Qué es VirtualBox?


VirtualBox es un programa que permite crear máquinas virtuales con todo lo necesario para funcionar, es decir, simula un disco duro, memoria RAM, dispositivos de red, Video, Audio...para que puedas instalar sobre ella cualquier sistema operativo (Windows, Linux, BSD...).


Por supuesto todos los recursos (RAM,Disco Duro...) que utiliza los coge de tu ordenador real (anfitrión en la jerga VirtualBox) con lo cual deberá tener una máquina que pueda mover al menos los requisitos de los sistemas operativos del Anfitrión y de la máquina virtual (Huésped en la jerga de VirtualBox).


¿Porqué hacer un puente de red?


En un principio una máquina virtual puede tener acceso a internet configurando la red como acceso NAT. Pero esto es en muchos casos insuficiente. Al usar el modo NAT de red en una máquina virtual hacemos que no se pueda comunicar por red con la máquina anfitrión ni con otras máquinas en la red anfitrión.


Solamente se comunica con otras máquinas huésped y esto para hacer pruebas de nuevas funcionalidades es un inconveniente grande ya que no podríamos probar la nueva funcionalidad con el entorno que vamos a usar.


Sin embargo haciendo un puente de red integraríamos la máquina virtual en la red “real”, en el entorno en el que va a ser usado, de modo que todas las máquinas de la red se ven entre sí.


Basta de cháchara y empecemos de una vez, entiendo que VirtualBox ya ha sido instalado y está funcionando correctamente:


Lo primero de todo hay que instalar las uml-utilities que nos permitirán crear interfaces de red virtuales (conocidas normalmente como tap) y también instalar bridge-utils que permite hacer puente de red entre interfaces (tarjetas de red):


apt-get install uml-utilities bridge-utils


Acto seguido añadimos al usuario que va a usarse al grupo uml-net:


gpasswd -a adri uml-net


Copiamos la configuración antigua de red por si las moscas:


cp /etc/network/interfaces /etc/network/interfaces.old


Editamos el fichero de configuración de red:


vi /etc/network/interfaces


Y añadimos lo siguiente al final del archivo:


auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user usuario


Levantamos la interfaz tap0 que acabamos de crear:


ifup tap0


Creamos el puente o bridge:


brctl addbr br0


Y metemos en el puente a las interfaces que queremos se vean entre sí:


brctl addif br0 eth2


brctl addif br0 tap0


Ponemos como pasarela (gateway) la ip de nuestro router para el dispositivo puente y así tener comunicación con el exterior.


route add default gw 192.168.1.1 dev br0


Configuramos la interfaz de red virtual con la ip 0.0.0.0 , esto es muy importante que tenga esa ip y no otra. Si haces luego un ipconfig verás que no aparece ip aunque tu ya has puesto la 0.0.0.0


ifconfig tap0 0.0.0.0 up


Levantamos el puente:


ifup br0


Editamos el fichero de configuración de red para añadir las líneas en amarillo:


vi /etc/netwok/interfaces


auto br0
iface br0 inet dhcp
bridge_ports all tap0


Comentamos el resto de interfaces eth, de tal manera que tan solo queden las interfaces loopback (lo), los tap (en este caso tap0 solamente) y la interfaz bridge br0. Se pueden añadir más interfaces de red (tap1, tap2, tap3...)

Reiniciamos la red:


/etc/init.d/networking restart


Cambiamos la permisos de /dev/net/tun a lectura y escritura para todo el mundo:

chmod 666 /dev/net/tun


Configuramos cada máquina virtual en el apartado red (recuerda que no debe haber dos máquinas con misma dirección MAC así que pulsa al botón generar un par de veces):


Conectar a: Interface Anfitrión

Marcamos: Cable conectado

Nombre de la interface: tap0




That's All folks!!



P.D: A continuación pongo como lo tengo en mi ordenador y la salida de algunos comandos por si te pierdes. En mi caso hay un tap1 que realmente no uso pero está para el que necesite más de un interfaz virtual:


Fichero /etc/network/interfaces


# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).


# The loopback network interface

auto lo

iface lo inet loopback


# The primary network interface

allow-hotplug eth2

#auto eth2

#iface eth2 inet dhcp


#Interfaz virtual para VirtualBox

auto tap0

iface tap0 inet manual

up ifconfig $IFACE 0.0.0.0 up

down ifconfig $IFACE don

tunctl_user adri


auto tap1

iface tap1 inet manual

up ifconfig $IFACE 0.0.0.0 up

down ifconfig $IFACE down

tucntl_user adri


auto br0

iface br0 inet dhcp

bridge_ports all tap0



Salida del comando ifconfig (como puede verse paso olímpicamente del tap1):



br0 Link encap:Ethernet HWaddr 00:11:09:DD:CC:99

inet addr:192.168.1.5 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::211:9ff:fedd:cc99/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:16031 errors:0 dropped:0 overruns:0 frame:0

TX packets:17260 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:4906103 (4.6 MiB) TX bytes:8761298 (8.3 MiB)


eth2 Link encap:Ethernet HWaddr 00:11:09:DD:CC:99

inet addr:192.168.1.5 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::211:9ff:fedd:cc99/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:28191 errors:0 dropped:0 overruns:0 frame:0

TX packets:31426 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:10872769 (10.3 MiB) TX bytes:15032623 (14.3 MiB)

Interrupt:21 Base address:0x2000


lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:711 errors:0 dropped:0 overruns:0 frame:0

TX packets:711 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:128514 (125.5 KiB) TX bytes:128514 (125.5 KiB)


tap0 Link encap:Ethernet HWaddr 00:FF:2B:DC:86:71

inet6 addr: fe80::2ff:2bff:fedc:8671/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:166 errors:0 dropped:0 overruns:0 frame:0

TX packets:65 errors:0 dropped:265 overruns:0 carrier:0

collisions:0 txqueuelen:500

RX bytes:19316 (18.8 KiB) TX bytes:33168 (32.3 KiB)


Salida del comando route (Los destinos default tardan siempre un poco más en salir):


Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.0 * 255.255.255.0 U 0 0 0 eth2

192.168.1.0 * 255.255.255.0 U 0 0 0 br0

default 192.168.1.1 0.0.0.0 UG 0 0 0 br0

default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2

No hay comentarios: