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.
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 enp35s0
e enp9s0
, por considerá-los desnecessários, pois as pontes do meu exemplo deveriam operar apenas na camada 2 do OSI.