Añadir una interfaz a contenedor LXC v2.x

por | 15 enero, 2021

Y continua la batalla!, esta vez necesito hacer lo mismo que comenté en este post pero para el entorno de producción (o sea, versión 2.x)

Por temas de seguridad no puedo indicar el SO ni datos muy específicos donde esta montada la infraestructura. El Escenario es el siguiente.

Tengo un contenedor A el cual posee 1 interfaz física y otra interfaz en un bridge. Como la interfaz física esta directamente conectada desde el host base no veo esa interfaz

Tengo un segundo contenedor B el cual necesita acceder a la red de la interfaz física del contenedor A y ya posee una conexión hacia el bridge0.

Alternativas de solución

Se me ocurren 4 soluciones distintas

  1. crear enrutamiento y nateo entre contenedor A y contenedor B
  2. Enrutar desde un contenedor C el cual es un servidor VPN y ya se conecta a la misma red que necesito alcanzar desde contenedor B
  3. conectar físicamente un cable para el contenedor B
  4. eliminar la interfaz del contenedor A, crear un bridge con esa interfaz y unir en el bridge la interfaz con los 2 contenedores

la opción 1 sigue siendo una posibilidad, sin embargo creo que a la hora de thoubleshooting se dificulta ya que se tiene que revisar ambos contenedores.

La opción 2 es muy arriesgada ya que no conozco en profundidad el funcionamiento del contenedor C

Opción 3 es fácil y «decente» sin embargo creo recordar que el host base ya no cuenta con interfaces de red disponibles (el servidor cuenta con 4) y adicionalmente estamos en cuarentena por lo que no puedo realizar la conexión aunque quisiera.

Por lo que nos queda la opción n° 4 y de la cual vamos a entrar en detalle para su ejecución

Vamos a partir creando el bridge

sudo brctl addbr br1

Luego este mismo bridge lo vamos a vincular a los contenedores A y B

lxc config device add contenedor B eth1 nic nictype=bridged parent=br1

En el caso del contenedor A como ya cuenta con una interfaz eth1 (la que vamos a unir al bridge) decidí primero eliminar la interfaz y luego unir el bridge ya que obviamente lxc no me permitirá añadir otra interfaz con el mismo nombre

lxc config device remove contenedor A eth1 
lxc config device add contenedor A eth1 nic nictype=bridged parent=br1

La interfaz que elimine del contenedor A ahora es visible desde el host base por lo que procedo a añadirlo al bridge

sudo brctl addif br1 eno2

luego levanto la interfaz en el host base y el bridge creado

sudo ifconfig eno2 up
sudo ifconfig br1 up

Luego ya bastará con conectarse a ambos contenedores, configurar el correspondiente direccionamiento IP y levantar la nueva interfaz eth1

Persistencia

Para mantener los cambios luego del reinicio del host base debemos crear el bridge en el archivo /etc/network/interfaces

sudo nano /etc/network/interfaces

y agregamos

#br1
 auto br1
 iface br1 inet manual

bridge-ifaces eno2
bridge-ports eno2
up ifconfig eno2 up

y ya estamos listos con la nueva conexión

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *