Funcionamiento básico de Linux Bridge

Índice

Un bridge o puente en Linux es un dispositivo de red virtual que permite que las máquinas virtuales alojadas en una máquina física usen su tarjeta de red. En este post se muestra un ejemplo de configuración de un Bridge en una máquina Debian.

Configuración de un bridge en una máquina Debian

Para configurar un Bridge en Linux que permita que la interfaz externa se pueda utilizar por máquinas virtuales se debe conocer, en primer lugar, el nombre de esta interfaz. En este caso, es ens3. Con esta información se puede crear un primer bridge que incluya esta interfaz. Para ello, se crea primero un bridge. A continuación, se le añade la interfaz externa del equipo físico.

brctl addbr br0
brctl addif br0 ens3

Cuando se añade la interfaz al bridge, el equipo se desconecta de la red porque la interfaz bridge no está funcionando en ese momento. Para solucionarlo, sólo hay que levantar la interfaz

ip l set dev br0 up

Además se le puede asignar una dirección IP al bridge:

ip a add 10.0.0.166/24 dev br0

De esta manera, el direccionamiento queda definido en el dispositivo br0 y la interfaz ens3 está incluida como un puerto del mismo.

Sin embargo, con esta configuración la máquina no se puede volver a conectar a la red y la interfaz ens3 queda inutilizada. Ante la imposibilidad de solucionar este problema, se opta por intentar hacer la práctica en otra máquina.

En este caso, tras instalar el paquete bridge-utils, se crea el bridge br0 directamente desde el fichero de configuración /etc/network/interfaces. De esta forma, además, la configuración del bridge se hace persistente a los reinicios.

auto br0
iface br0 inet dhcp
bridge_ports ens18

Y, posteriormente se levanta la interfaz con ifup br0:

ifup br0

La configuración establecida en el fichero se aplica, de manera que con el comando brctl show ya se puede ver el bridge br0 en el sistema:

Además, la interfaz toma una configuración TCP/IP por DHCP y obtiene su propia dirección IP con la que la máquina tiene acceso a Internet.

Funcionamiento del bridge con una máquina virtual

Para comprobar el funcionamiento del bridge con una máquina virtual es necesario crear una en el equipo local en el que se ha creado el bridge. Primero se debe descargar el fichero de imagen .iso del sistema operativo que va a usar la máquina virtual.

wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso

A continuación se usa kvm para crear una imagen qcow2 de este sistema. Para poder trabajar con el virtualizador qemu/kvm en la máquina Debian primero se deben instalar los paquetes necesarios.

apt install qemu-utils qemu-system-x86 qemu-system-gui

Una vez que las herramientas de qemu/kvm se han instalado en el equipo se puede convertir la imagen ISO de Debian a un fichero de imagen de tipo qcow2.

qemu-img create -f qcow2 deb12.qcow2 10G

Info

Para una información más detallada sobre la instalación de las herramientas de virutalización qemu/kvm y VirtManager puedes consultar este post.

El siguiente paso es crear una interfaz de tipo tap y después se añade la interfaz al bridge.

tuntap add mode tap user user
brctl addif br0 tap0
ip l set dev tap0 up

Posteriormente, se genera una MAC aleatoria para la máquina virtual.

mac0=$(echo "02:"`openssl rand -hex 5 | sed 's/\(..\)/\1:/g; s/.$//'`)

Con esta información, ya se puede crear la máquina virtual.

kvm -m 512 -hda deb12.qcow2 -cdrom debian-12.5.0-amd64-netinst.iso -device virtio-net,netdev=n0,mac=$MAC0 -netdev tap,id=n0,ifname=tap0,script=no,downscript=no

Este comando lanza una ventana para la instalación del sistema operativo de la máquina virtual:

Tras la instalación de la máquina virtual, ésta cuenta con una interfaz, ens3, que ha solicitado una dirección IP por DHCP en el arranque:

Y a través de la cual se puede conectar a Internet:

comments powered by Disqus

Relacionados

Cómo simular un servidor web en GNS3

Existen varias formas de crear un servidor web en un escenario de GNS3. En este post se optará por añadir una máquina Linux con Debian 11 en la que se instalará el servidor Nginx para que pueda actuar a forma de servidor web en el escenario.

Leer

Despliegue de aplicaciones escritas en Python

En este post se muestra un ejemplo de flujo de trabajo para desplegar aplicaciones escritas en Python desde el entorno de desarrollo hasta el entorno de producción.

Leer

Convulsión en el mundo del software libre

En este post se repasa el conflicto generado en el mundo del software libre tras las decisiones de Red Hat sobre el proyecto CentOS y las consecuencias para otras distribuciones derivadas.

Leer