Como posso separar logicamente interfaces em um host?

Como posso separar logicamente interfaces em um host?

Introdução ao problema

Eu tenho uma topologia de rede semelhante ao diagrama abaixo. Todos os hosts estão executando diferentes distribuições Linux e toda a minha configuração deve (espero) ser feita no Host A, que é RHEL7.

Gráfico de topologia de rede

com esta tabela de roteamento:

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

Meu principal objetivo é fazer com que cada interface física do Host A seja mapeada para um contêiner Docker, para que o tráfego possa fluir livrementeapenasentre ambas as extremidades deste mapeamento (e nenhum tráfego de ou para interfaces fora deste mapeamento).

Por exemplo, o Container1 deve ser capaz de se comunicar (apenas) com o Host B (ao longo dos links vermelhos do diagrama), e o Container2 deve ser capaz de se comunicar (apenas) com o Host C (ao longo dos links verdes do diagrama).

Uma tentativa inicial

Por padrão, o docker cria uma ponte br-97707d67f97c(por exemplo), que removi (porque conecta todos os contêineres entre si). Criei as três pontes ( bridge0, bridge1, bridge2), porque pensei que poderia haver alguma esperança de alguma forma de tornar a ponte 'privada'.

Da forma como está agora, posso executar ping de qualquer contêiner para qualquer interface no Host A, B ou C; Não consigo fazer ping de um contêiner para outro, o que presumo ser devido ao fato de eles estarem na mesma sub-rede e confundirem a ponte.

Pergunta

Como posso separar logicamente as interfaces em um host para que elas possam interagir apenas com as interfaces que eu desejo?

Responder1

Consegui resolver esse erro começando do zero e depois separando minhas interfaces por sub-rede.

Para usar o diagrama da minha pergunta como exemplo, alterei o endereço IP do Container2 para estar dentro da sub-rede 10.0.0.0/24, ou seja, 10.0.1.100, por exemplo. Alterei o endereço do Container1 para a sub-rede 192.168.30/24.

Também removi os endereços IP de enp35s0e enp9s0, por considerá-los desnecessários, pois as pontes do meu exemplo deveriam operar apenas na camada 2 do OSI.

informação relacionada