ARP responde com um único endereço MAC no servidor Linux com várias interfaces na mesma rede

4

O servidor Linux tem duas interfaces de rede ativas:

IF:eth1    IP:192.168.1.1/24    MAC:11:11:11:11:11:11   (1GbE)
IF:eth2    IP:192.168.1.2/24    MAC:22:22:22:22:22:22   (10GbE)

A idéia é que a interface 10GbE (eth2) é a principal interface para comunicação com hosts na rede. Eu quero deixar a segunda interface 1GbE (eth1) como um fail-safe. No caso de a interface 10GbE ficar inativa: eu ainda teria uma maneira fácil de entrar, posso atualizar o DNS para que os hosts possam se conectar, etc.

Enquanto observava as estatísticas da interface, notei que todo o tráfego estava enviando / recebendo na eth1 em vez da eth2, apesar do fato de que todos os hosts da rede estão lidando com essa interface. Confirmei o DNS Um registro aponta para o IP da interface correta. Além disso, confirmei que endereçar a interface por IP em vez de FQDN produz o mesmo resultado.

Limpei o cache do ARP em minha máquina e executei ping na interface eth1 por endereço IP. Eu inspeciono minha tabela ARP e encontro o endereço MAC de eth1. Limpei o cache do ARP novamente e executei ping na interface eth2 por endereço IP. Mais uma vez, inspeciono minha tabela ARP e encontro o endereço MAC de eth1 (não eth2).

Se eu derrubar a eth1, desconectar fisicamente a interface ou colocá-la em uma rede lógica diferente - obtenho o comportamento esperado, o tráfego passa pela minha interface eth2.

Minha pergunta: Por que isso acontece? Eu estou vendo algumas evidências de que este é o comportamento esperado no kernel do Linux devido ao seu "modelo host fraco".

Como posso manter ambas as interfaces na mesma rede e fazê-las funcionar da maneira esperada?

    
por sardean 06.03.2014 / 02:55

2 respostas

3

O Linux foi projetado para responder a solicitações ARP em qualquer interface. Supõe-se que o host possua o endereço IP e não a interface específica. O que você está vendo é chamado ARP Flux.

Você pode alterar esse comportamento usando sysctrl

arp_ignore - INTEGER

Define different modes for sending replies in response to received ARP requests that resolve local target IP addresses:

0 - (default): reply for any local target IP address, configured on any interface

1 - reply only if the target IP address is local address configured on the incoming interface

2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender's IP address are part from same subnet on this interface

3 - do not reply for local addresses configured with scope host, only resolutions for global and link addresses are replied

    
por 06.03.2014 / 03:17
3

Se o seu switch suportar, eu usaria a agregação de links 802.1ad para fornecer failover.

Com esse recurso, você une as duas interfaces e pode definir uma como ativa e uma como interface passiva. Seu endereço IP residiria na interface de ligação, portanto, não haveria alterações no endereço IP se uma NIC falhar.

    
por 06.03.2014 / 09:55