¿Por qué en mi caso no puedo acceder a la interfaz física conectada al puente por Internet?

¿Por qué en mi caso no puedo acceder a la interfaz física conectada al puente por Internet?

Tengo una topología de red como esta:

Verá, em1(1.1.8.209) es una interfaz física con la que puedo comunicarme a través de Internet. y creé dos instancias de VM: PID 8740y PID 8817ambas usan la IP de la red 1.1.8.210/29y 1.1.8.211/29ambas direcciones IP públicas.

Ahora puedo comunicarme con em1 a través de Internet.

pero tengo un requisito: quiero acceder a las dos máquinas virtuales directamente, así que quiero adjuntar em1 a br0.

luego ejecuté esto:

brctl addif br0 em1

la topología se convierte en esto:

ingrese la descripción de la imagen aquí

1.1.8.209sin embargo, después de ejecutar este comando, aparece un error y ya no puedo comunicarme . Luego eliminé el archivo adjunto brctl delif br0 em1y ahora puedo acceder 1.1.8.209.

¿Por qué tengo este problema? No entiendo, por favor ayuda a explicar por qué.

Respuesta1

Cuando la interfaz se convierte en un puerto puente, ya no participa en el enrutamiento.

Los detalles de bajo nivel se describen en este blog.Aislamiento adecuado de un puente Linux:

  1. entregue la trama a un controlador de protocolo global o específico del dispositivo (por ejemplo, IPv4, ARP, IPv6).

    Para una interfaz puenteada, el kernel ha configurado un controlador de recepción específico del dispositivo, br_handle_frame(). Esta función no permitirá ningún procesamiento adicional en el contexto de la interfaz entrante, excepto para tramas STP y LLDP o si la "generación" está habilitada. Por lo tanto, laLos controladores de protocolo nunca se ejecutan.en este caso.

La dirección IP de dicho puerto puente se vuelve irrelevante para el paquete entrante. Dejarlo configurado donde está aún puede interrumpir el enrutamiento adecuado de los paquetes salientes, porque aún pueden enviarse directamente a través del puerto puente (cuando ya no deberían).

Lo que se debe hacer es mover la dirección IP a un sistema (o espacio de nombres de red, o incluso al otro extremo libre de un quinto par en el mismo lugar) que tenga su otro extremo conectado al puente, o al puerto propio del puente, es decir, al puente mismo. . Siempre habrá una pequeña ventana de tiempo en la que existirá una interrupción durante este movimiento, por lo que las acciones realizadas localmente para cambiar esta configuración no deben depender del acceso a la red (por ejemplo, no deben depender de escribir comandos de forma remota a través de un shell usando la ruta interrumpida).

Usaré solo herramientas más nuevas con una sintaxis más nueva a continuación.

Por ejemplo:

ip address flush dev em1
ip address add 1.1.8.209/29 dev br0

En cambio, otra forma de dejar el puente sin participar en el enrutamiento y usar un extravethEl extremo del par (en el mismo espacio de nombres de red) para participar en el enrutamiento podría ser:

ip address flush dev em1
ip link add name em1twin type veth peer name br0portem1twin
ip link set br0portem1twin master br0 up
ip link set em1twin up
ip address add 1.1.8.209/29 dev em1twin

En ambos casos, si de la existencia de esta dirección dependiera una ruta por defecto (u otras rutas), también se debe volver a agregar esta ruta, porque desapareció.

información relacionada