¿Cómo puedo separar lógicamente las interfaces en un host?

¿Cómo puedo separar lógicamente las interfaces en un host?

Introducción al problema

Tengo una topología de red que se parece al siguiente diagrama. Todos los hosts ejecutan diferentes distribuciones de Linux y toda mi configuración (con suerte) debería realizarse en el Host A, que es RHEL7.

Gráfico de topología de red

con esta tabla de enrutamiento:

Destination     Gateway         Genmask         Flags Metric Ref    Use 

Iface
default         fw.gatename.    0.0.0.0         UG    100    0        0 enp34s0
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 enp9s0
10.0.1.2        0.0.0.0         255.255.255.255 UH    0      0        0 bridge1
10.12.0.0       0.0.0.0         255.255.255.0   U     100    0        0 enp2s0f1
10.14.0.0       0.0.0.0         255.255.255.0   U     100    0        0 enp2s0f0
10.17.0.0       0.0.0.0         255.255.255.0   U     100    0        0 enp7s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.2      0.0.0.0         255.255.255.255 UH    0      0        0 bridge2
172.18.0.3      0.0.0.0         255.255.255.255 UH    0      0        0 bridge0
172.18.0.4      0.0.0.0         255.255.255.255 UH    0      0        0 bridge1
192.168.3.0     0.0.0.0         255.255.255.0   U     100    0        0 enp34s0
192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 enp35s0
192.168.30.91   0.0.0.0         255.255.255.255 UH    0      0        0 bridge2
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

Mi objetivo principal es que cada interfaz física del Host A se asigne a un contenedor Docker, para que el tráfico pueda fluir libremente.soloentre ambos extremos de este mapeo (y sin tráfico hacia o desde interfaces fuera de este mapeo).

Por ejemplo, el Contenedor1 debería poder (solo) comunicarse con el Host B (a lo largo de los enlaces rojos del diagrama), y el Contenedor2 debería poder (solo) comunicarse con el Host C (a lo largo de los enlaces verdes del diagrama).

Un intento inicial

De forma predeterminada, Docker crea un puente br-97707d67f97c(por ejemplo), que eliminé (porque conecta todos los contenedores entre sí). Creé los tres puentes ( bridge0, bridge1, bridge2), porque pensé que podría haber alguna esperanza de alguna manera de hacer que el puente sea "privado".

Tal como está ahora, puedo hacer ping desde cualquier contenedor a cualquier interfaz en el Host A, B o C; No puedo hacer ping de un contenedor a otro, lo que supongo se debe a que están en la misma subred y confunden el puente.

Pregunta

¿Cómo puedo separar lógicamente las interfaces en un host para que solo puedan interactuar con las interfaces que quiero?

Respuesta1

Pude resolver este error comenzando desde cero y luego separando mis interfaces por subred.

Para usar el diagrama de mi pregunta como ejemplo, cambié la dirección IP del Contenedor2 para que esté dentro de la subred 10.0.0.0/24, es decir, 10.0.1.100, por ejemplo. Cambié la dirección del Contenedor1 para que esté en la subred 192.168.30/24.

También eliminé las direcciones IP de enp35s0y enp9s0, porque consideré que eran innecesarias, ya que los puentes en mi ejemplo solo deberían funcionar en OSI Capa 2.

información relacionada