Introdução ao problema
Eu tenho uma topologia de rede que se parece com o 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 é o 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 é ter cada interface física do Host A mapeada para um contêiner do Docker, para que o tráfego possa fluir livremente somente entre as duas extremidades desse mapeamento (e nenhum tráfego para ou de interfaces fora desse mapeamento).
Por exemplo, o Container1 deve ser capaz de (apenas) se comunicar com o Host B (ao longo dos links vermelhos do diagrama) e o Container2 deve ser capaz de (apenas) se comunicar 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 uns aos outros). Eu criei as três pontes ( bridge0
, bridge1
, bridge2
), porque achei que poderia haver alguma esperança de alguma forma de tornar a ponte 'privada'.
Como está agora, posso pingar de qualquer contêiner para qualquer interface no Host A, B ou C; Não consigo pingar de um contêiner para outro, o que suponho ser devido a eles estarem na mesma sub-rede e confundirem a ponte.
Pergunta
Como posso logicamente separar interfaces em um host para que eles possam interagir apenas com a (s) interface (s) que eu quero?