Rede de ponte Linux influenciada pela tabela de rotas

0

Eu estava fazendo um experimento sobre o Linux Bridge e minha topologia de rede é como:

Comovocêpodever,existemdoishostslocalizadosemumaLAN,Host1(10.74.68.58)eHost2(10.74.68.47).NoHost1,crieiumapontebr0eatribuíumIPparaela(192.168.3.101).Entãoeuanexeieth0àponte:

[[email protected]:~]#bridgelink2:eth0stateUP:<BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP>mtu1500masterbr0stateforwardingpriority32cost2

Euconfigureiarotapadrãocomobr0enãoháproblemaemping10.74.68.47:

[[email protected]:~]#iprdefaultdevbr0scopelink172.17.0.0/16devdocker0protokernelscopelinksrc172.17.42.1192.168.3.0/24devbr0protokernelscopelinksrc192.168.3.101

Masascoisassetornaraminexplicáveisquandoeudefiniarotapadrãoparaeth0:

[[email protected]:~]#iprdefaultdeveth0scopelink172.17.0.0/16devdocker0protokernelscopelinksrc172.17.42.1192.168.3.0/24devbr0protokernelscopelinksrc192.168.3.101

Quandoeth0éainterfacederotapadrão,eutentopingarohost2deduasmaneirasdiferentes:

1,ping10.74.68.47

comfalha.Depoisqueeuverifiqueioarquivotcpdump(capturadonainterfacebr0),descobriquebr0recebeuapenasrespostaARP.Portanto,nãoháinformaçõesARPnainterfaceeth0,portanto,nãoépossívelobteromacdehost2.Achoqueesseéocomportamentocerto,estácerto?

2,Entãoeutenteiping-Ibr010.74.68.47

Euqueriausaraopção-Iparameafastardarotapadrão,mastambémfalhei.Depoisdeverificaroarquivotcpdump(capturadonainterfacebr0),descobriquejáexisteumpardeicmpechorequesteechoreplypacket.Issomeconfundiumuito.Agoraqueobr0recebeuarespostaecho,porquenãopossopingarparaohost2comsucesso?

[[email protected]:~]#ping-Ibr010.74.68.472packetstransmitted,0received,100%packetloss,time1006ms

Vocês podem me dar algumas dicas?

    
por ruanhao 14.06.2017 / 16:38

1 resposta

3

Bridging não funciona da maneira que você acha que funciona. : -)

Uma ponte está relacionada apenas ao OSI nível 2 (quadros Ethernet). Neste nível, os endereços IP, etc., não existem. Conceitualmente, você pode pensar em uma ponte como uma coleção de interfaces Ethernet. Cada interface é chamada de porta e um pacote que entra em uma porta sai em todas as outras portas. (Na verdade, na implementação do Linux, há uma otimização que mantém uma tabela de endereços MAC vistos, mas conceitualmente, não importa).

Assim, uma ponte pode conectar ("ponte") vários segmentos de ethernet em um grande segmento.

Então, o que significa "dar a um Linux ponte um endereço IP"? Na implementação do Linux, a bridge não é um dispositivo de hardware separado (como eles eram originalmente), também é acessível a partir do próprio host. Isso significa que ele age como uma espécie de "interface super-ethernet" com muitas portas, mas os pacotes que entram no kernel ou saem desse kernel para ou de qualquer dessas portas chegam ao sistema operacional Linux sob um endereço IP único.

Então, assim que você faz uma interface ethernet com um escravo (porta) de uma ponte, ela deixa de ter seu próprio endereço. A única coisa que conta é o endereço IP da ponte.

Em outras palavras, fazer uma ponte com apenas uma única porta não faz sentido (você poderia ter usado a interface por si só). Tentar rotear pacotes para uma porta de uma ponte não faz sentido (no que diz respeito ao kernel, a ponte é um único dispositivo).

Se você quer brincar com uma ponte, precisa de uma estrutura como esta:

  10.0.2.1/23    10.0.2.2/23    10.0.3.254/23     10.0.3.1/23    10.0.3.2/23 

  ............   ............   ...............   ............   ............
  .  Host A  .   .  Host B  .   .  Host X     .   .  Host C  .   .  Host D  .
  .          .   .          .   . <-- br0 --> .   .          .   .          .
  .   eth0   .   .   eth0   .   . eth0   eth1 .   .   eth0   .   .   eth0   .
  .....|......   .....|......   ...|......|....   .....|......   .....|......
       |              |            |      |            |              |      
  -----+--------------+------------+      +------------+--------------+------

  <-------- left Segment  --------->      <------- right Segment ----------->

Aqui, o segmento esquerdo com os hosts A e B é vinculado pelo host X ao segmento direito com os hosts C e D, e cada host é acessível por um único endereço IP (que é atribuído às interfaces ou à ponte como um todo) .

    
por 15.06.2017 / 11:28