Como posso logicamente separar interfaces em um host?

0

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?

    
por karobar 14.06.2016 / 19:40

1 resposta

0

Consegui resolver esse erro iniciando 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, portanto, 10.0.1.100, por exemplo. Alterei o endereço do Container1 para estar na sub-rede 192.168.30 / 24.

Eu também removi os endereços IP de enp35s0 e enp9s0 , porque eu considerava que estes eram desnecessários, já que as pontes no meu exemplo devem operar somente na Camada 2 do OSI.

    
por 20.06.2016 / 21:21