Ao final do processo, faltavam alguns patches importantes:
- 4157198 inconsistência de cache ARP entre os módulos arp e ip A opção
- 4978063 SO_DONTROUTE causa o tráfego ARP para cada quadro
- 4653899 Problema de processamento de pacotes ARP
Tenho notado que um servidor Solaris 9 continua enviando solicitações ARP para um endereço IP que pertence ao nosso servidor DNS.
O servidor DNS responde com seu endereço MAC, mas o Solaris 9 não registra o endereço na tabela ARP. Você pode fazer o ping do servidor DNS bem, mas para cada pacote que sai, ele precisa solicitar o endereço MAC novamente.
Aqui está a saída do snoop:
10.0.0.12 -> (broadcast) ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e
10.0.0.12 -> (broadcast) ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e
10.0.0.12 -> (broadcast) ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e
Apesar de estar respondendo, 10.0.0.4 nunca é exibido na tabela ARP, mas o ping funciona o tempo todo (presumivelmente porque solicita o endereço MAC para cada solicitação e, portanto, pode enviar o pacote ICMP).
Confirmei que o endereço MAC de origem nas solicitações é realmente do servidor Solaris 9 e as respostas também têm o endereço de origem correto do servidor DNS. Basicamente tudo parece estar funcionando bem ... envenenamento por ARP?
O que torna isso ainda mais estranho é que ele funciona bem para todos os outros endereços IP na rede 10.0.0.0/24. Seus endereços MAC são armazenados em cache na tabela ARP, mas este não.
Existe alguma coisa especial sobre os endereços IP apontados como servidores DNS em /etc/resolv.conf que fariam o ARP se comportar assim? Os outros 2 servidores DNS não estão na mesma sub-rede, por isso não posso testar se isso acontece com outros endereços.
# ndd -get /dev/arp arp_cleanup_interval
60000