Ubuntu 22.04
Tenho um IPv6
registro marcado como INCOMPLETE
:
$ip neigh
xxxx::xxxx dev eth0 INCOMPLETE
Tentando excluí-lo como
$sudo ip neighbo del xxxx::xxxx dev eth0
não o apaga de fato, já que ip neigh
o reporta da mesma forma. Existe uma maneira de remover o INCOMPLETE
registro vizinho?
Não, tenho 98% de certeza de que ele exclui o registro, mas durante o tempo diferente de zero que você leva para verificar
ip neigh
novamente, o sistema já adicionou um novo registro para o mesmo endereço. O que você vê noip neigh
relatório não é o registro antigo; é um novo registro com os mesmos valores.Se você observar
ip monitor neigh
(ou talvezwatch -d -n .1 "ip neigh | grep $addr"
), provavelmente verá o registro antigo sendo excluído e quase imediatamente um novo sendo criado, com os mesmos parâmetros.Por que o sistema adiciona o registro de volta? Pelo mesmo motivo que adicionou o original: ele tem alguns pacotes IP que precisam ser entregues para aquele endereço.
Por que o registro está sendo adicionado no estado 'INCOMPLETO'? Esse é o estado normal enquanto o sistema está esperando por uma resposta de descoberta de vizinho (nesse caso, um ICMPv6 Neighbor Advertisement solicitado). Se houvesse um host com esse endereço, ele faria a transição para 'ALCANÇÁVEL' assim que o ICMPv6 NA fosse recebido.
Se não houver tal host, a entrada fará a transição para 'FAILED' em alguns segundos e todos os pacotes na fila serão liberados. No entanto, o SO reiniciará imediatamente o processo enquanto continuar recebendo novos pacotes destinados a esse endereço, então você verá quase instantaneamente uma nova entrada 'INCOMPLETE' em seu lugar.
Isso cheira a um problema XY. Não há quase nenhuma razão para excluir esta entrada.
O
ip neighbor
comando está exibindo o cache ARP do sistema. Uma entrada incompleta indica que uma solicitação de transmissão ARP foi enviada para consultar o endereço ethernet do endereço IP de destino, mas nenhuma resposta foi ouvida ainda.As formas normais de excluir uma entrada incompleta são:
Isso acontece bem rápido, então não há necessidade de apagar uma entrada incompleta. E uma entrada incompleta não bloqueará o endereço IP -- quando uma resposta for recebida, ela será resolvida automaticamente.
Às vezes, excluí entradas completas quando havia um conflito de IP (duas máquinas físicas respondendo a um IP) e eu queria o outro, mas isso nunca deveria acontecer.
Presumivelmente, o kernel mantém a entrada incompleta por perto para que ele tenha um lugar para armazenar os temporizadores relevantes para o envio de novas tentativas ARP e evitar que ele envie uma tempestade de solicitações ARP para cada pacote que vai para aquele endereço IP desconhecido.
Então, a única razão para excluir a entrada é que você deseja enviar imediatamente outro ARP... e os temporizadores de nova tentativa são curtos o suficiente para que isso não seja necessário e provavelmente não é humanamente possível excluir manualmente a entrada mais rápido do que o temporizador de nova tentativa.
Então você está corrigindo o problema errado. Não se incomode em apagar esta entrada, descubra por que a máquina remota não está respondendo na rede! Ou descubra por que há um processo local tentando contatar um endereço IP inexistente.