Os NICs da máquina Linux Multi-NIC estão respondendo aos ARPs uns dos outros, independentemente da configuração arp_filter

2

Eu tenho uma máquina Linux antiga rodando um kernel 2.4.37. Na máquina, existem duas placas NIC na mesma rede com IPs diferentes. Para alguns testes, queremos que o tráfego de cada IP seja roteado por meio dessa NIC, mas o que realmente está acontecendo é que todo o tráfego para os dois IPs está sendo roteado por meio de um dos dispositivos Ethernet e o outro não é usado. Se eu pego outra máquina na rede com um cache ARP vazio e faço o ping de ambos os IPs e, em seguida, verifico o Cache ARP, vejo que ele tem o MAC de uma das duas NICs em ambos os IPs. Basicamente, a caixa do Linux permite que ambas as NICs respondam a solicitações ARP uma para a outra - que é o comportamento padrão. No entanto, eu tenho arp_filter habilitado para ambos os NICs que é suposto para eliminar isso, mas parece não ter efeito. Eu também tentei desabilitar o rp_filter, mas isso também parece não ter efeito. Aqui estão as minhas entradas sysctl relevantes:

net.ipv4.conf.eth1.arp_filter = 1
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.eth0.arp_filter = 1
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.lo.arp_filter = 1
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.default.arp_filter = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.rp_filter = 0

Eu encontro toneladas de links para pessoas com o mesmo problema no google, mas uma vez que eles definem arp_filter = 1, o problema desaparece para eles, mas não para mim.

Editar : Eu também tenho jogado com várias configurações de arp_ignore e arp_announce, mas não importa o que eu faça, não consigo fazer com que cada interface responda apenas a ARPs para seu próprio IP

    
por bk. 22.09.2011 / 21:08

1 resposta

1

Do Guia para administração de redes na camada IP com Linux :

One method for preventing ARP flux involves the use of net/ipv4/conf/$DEV/arp_filter. In short, the use of arp_filter causes the recipient (in the case below, real-server) to perform a route lookup to determine the interface through which to send the reply, instead of the default behaviour (shown above), replying from all Ethernet interfaces which receive the request.

The arp_filter solution can have unintended effects if the only route to the destination is through one of the network cards.

Assim, o arp_filter trabalha consultando as tabelas de roteamento para determinar qual interface deve ser usada para enviar pacotes ao host solicitante. Se sua tabela de roteamento tiver uma única rota padrão como esta:

default dev eth0 src 192.168.0.10

então ele sempre enviará respostas ARP em eth0, independentemente de a eth0 ter o IP correspondente ou não.

Uma possível solução (não testei isso) é configurar o encaminhamento da política de origem que seleciona a interface de saída com base no IP de origem:

echo 10 eth0 >> /etc/iproute2/rt_tables
echo 11 eth1 >> /etc/iproute2/rt_tables
ip route add 192.168.0.0/24 dev eth0 table eth0
ip route add 192.168.0.0/24 dev eth1 table eth1
ip rule add from 192.168.0.10 lookup eth0
ip rule add from 192.168.0.11 lookup eth1
    
por 14.02.2013 / 02:20