Duas placas de rede - duas tabelas de roteamento?

1

Eu tenho problemas de roteamento esporádicos na minha configuração, que eu suspeito ser um problema com o roteamento e duas interfaces de rede.

  • Estou executando duas máquinas com o XenServer
  • Os dois têm uma NIC pública com um IP próprio para o tráfego da Internet
  • Ambos têm um NIC privado com um Cross-Over-Cable para o tráfego local

As VMs também possuem duas NICs (virtuais), eth0 com seu próprio IP público e eth1 para o tráfego local.

Ocasionalmente, posso alcançar os servidores do lado de fora, mas eles não conseguem fazer o ping / alcançar um ao outro localmente.

Configuração:

          Public IP               local IP
xh01      aa.bb.10.214            192.168.1.1
xh02      aa.bb.10.215            192.168.1.2
lb01      aa.bb.10.242            192.168.1.3
lb02      aa.bb.10.241            192.168.1.4
be01      aa.bb.10.239            192.168.1.5
be02      aa.bb.10.240            192.168.1.6

Exemplos de rotas em lb01:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         aa.bb.10.215    0.0.0.0         UG    100    0        0 eth0
aa.bb.10.192    aa.bb.10.193    255.255.255.192 UG    0      0        0 eth0
aa.bb.10.193    0.0.0.0         255.255.255.255 UH    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

Agora, às vezes, por exemplo, não consigo pingar lb01 de be01.

Com 'tcpdump' em lb01, vejo que a solicitação de eco ICMP atinge lb01, mas não consigo ver uma resposta. Além disso, se eu emitir um tracepath em um dos hosts para o outro, o ping de repente recebe uma resposta.

Minha suspeita é que, uma vez que as máquinas podem alcançar umas às outras por meio de ambas as interfaces, o tráfego de saída de uma conexão não é roteado para a mesma interface que a entrada. Eu acho que isso significaria que eu tenho que configurar diferentes tabelas de roteamento?

Alguém com um conhecimento mais profundo em todo o material de roteamento me deu algumas dicas sobre como corrigir isso?

    
por Bannane 16.09.2013 / 09:25

1 resposta

2

Não há um problema de roteamento visível na tabela de roteamento no host que você postou. No entanto, percebo que você está usando um comportamento muito inadequado, pelo qual você define dois gateways que estão em sub-redes nas quais você não tem um endereço, um dos quais você não tem uma rota local, o que me faz pensar algum comportamento indefinido. Eu ficaria curioso em ver o conteúdo das tabelas ARP nos hosts enquanto o ping não está passando.

Acho que vejo o que você está tentando fazer aqui - esse tipo de coisa não é padrão. Parece um pouco inútil tentar forçar o tráfego através de um gateway em uma rede, mas fazê-lo apenas para hosts que estão conectados diretamente em outra sub-rede, embora se você quiser enviar tráfego através de um roteador, a solução correta é provisionar um / 30 sub-rede para cada host.

Se isso falhar, é possível que o gateway esteja fazendo algum tipo de processamento com estado (como m_conntrack, se estiver executando o linux) e esteja severamente desprovisionado, ou você pode estar com perda de pacotes. Alternativamente, o servidor Xen pode estar demorando para descobrir onde os pacotes vão, particularmente se você estiver usando o openvswitch, que tem um comportamento surpreendentemente significativo. Também pode ser necessário que algum tráfego de saída seja enviado antes que o tráfego de entrada possa ser recebido, embora isso seja incomum.

Certamente não é o caso de que o tráfego para a sua rede não-RFC1918 será transmitido pela eth1, se a tabela de roteamento parecer que sim. Não há rota que faria isso. Além disso, lembre-se de que cada host possui uma tabela de roteamento na qual as rotas são associadas às interfaces. Qualquer pacote que esteja precisando de roteamento (basicamente, um de saída) atravessa essa mesma tabela e segue as mesmas regras, correspondendo à rota mais específica, usando a métrica para quebrar os laços.

    
por 16.09.2013 / 10:58