Como transmitir a atualização do ARP para todos os vizinhos no Linux?

21

Alguns clientes na sub-rede armazenaram em cache o IP com o endereço MAC antigo. Quero que eles atualizem o novo valor fazendo uma transmissão ARP. É possível no Linux?

Howard
fonte

Respostas:

27

Sim, é chamado de "ARP não solicitado" ou "ARP gratuito". Verifique a página de manual para arping para obter mais detalhes, mas a sintaxe é mais ou menos assim:

arping -U 192.168.1.101

Se você está falsificando um endereço, talvez seja necessário executá-lo primeiro:

echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind

Por fim, devido à sua capacidade de falsificação, o envio de pacotes ARP não solicitados às vezes é considerado uma atividade "hostil" e pode ser ignorado ou pode levar ao bloqueio de alguns firewalls de terceiros.

tylerl
fonte
8
No debian, o comando para mim era arping -S ip.to.update -i ethX destination.host. Exemplo:arping -S 10.0.0.2 -i eth0 10.0.0.1
radicand
3
Eu achei necessário fazer um arping para um roteador como descrito acima no Linux quando o IP é um alias no dispositivo (ou seja, uma NIC secundária está usando o IP ou se é um alias em um NIS existente que foi configurado usando um ifconfig ethx:xtipo de pseudônimo). Se é o primário, nunca parece ser necessário.
8

O que você está procurando é chamado " ARP gratuito " e pode ser feito usando "arping". Se o seu endereço IP for 10.0.0.1 em eth0, você usaria este comando:

arping -A -I eth0 10.0.0.1

Você pode verificar se o ARP está sendo enviado usando "tcpdump" enquanto o "arping" está em execução; neste caso, estou assistindo "wlan0":

laptop:~$ sudo tcpdump -lni wlan0 arp    
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:14:11.219936 ARP, Reply 172.16.42.161 is-at a4:77:03:d2:9b:c4, length 28
12:14:12.220119 ARP, Reply 172.16.42.161 is-at a4:77:03:d2:9b:c4, length 28
12:14:13.220288 ARP, Reply 172.16.42.161 is-at a4:77:03:d2:9b:c4, length 28
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
laptop:~$ 
Sean Reifschneider
fonte
-1

Não é necessário. Como em: quando você alterou o IP, o computador deveria ter feito isso automaticamente. Se os clietns forem codificados, uma transmissão não mudará a substituição do código codificado.

Faço isso há cerca de 20 anos e, durante todo esse tempo, NUNCA (!) Aconteceu sem equipamentos defeituosos.

TomTom
fonte
O problema é que atribuo acidentalmente uma nova máquina com um IP usado, para que entrem em conflito com o IP. Não consigo acessar a máquina antiga usando SSH. Agora, desliguei remotamente a máquina (nova) errada, mas ainda não consigo acessar a máquina antiga, suspeito que o roteador tenha armazenado em cache o endereço MAC em sua tabela ARP.
289 Howard
11
Isso é chamado de '' ARP gratuito '' - veja en.wikipedia.org/wiki/…
Kimvais
Deve funcionar depois que o cache do arp expira. Você também pode tentar liberar a tabela arp na máquina da qual está tentando acessar a máquina antiga.
Kimvais
4
@ TomTom - talvez você não esteja trabalhando no ambiente certo para vê-lo. O envio de pacotes ARP não solicitados é uma maneira comum de redirecionar rapidamente o tráfego para um novo servidor em uma situação de failover. Muitos switches e roteadores de última geração podem levar alguns minutos para reconhecer que um endereço IP foi movido para uma porta física diferente. Os switches da Cisco são notórios por isso.
tylerl
4
@ TomTom: Sim, se você fizer failover por meio de pulsação / corosync, o que seja. No entanto, se você mover serviços manualmente de uma máquina para outra, principalmente se estiver usando o equipamento Cisco, o envio manual de um ARP gratuito será extremamente útil. Concordo que não é algo que você faz com frequência, mas como alguém que também faz TI há 20 anos, me deparei com várias situações em que precisava fazer isso.
Sean Reifschneider