¿Cómo se borra el caché de arp en Linux?

13

Ambos:

sudo ip -s -s neigh flush all

Y:

sudo arp -d 192.168.0.102

En lugar de borrar el caché de arp, parecen invalidar las entradas (aparecerán como incomplete). Incluso después de algunos minutos, el caché ARP se ve así:

$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.103                    (incomplete)                              eth0
192.168.0.1              ether   DE:AD:BE:EF:DE:AD   C                     eth0

(El MAC de la puerta de enlace se ha actualizado, eso está bien)

¿Cómo puedo realmente borrar el caché ARP, como en "eliminar todas las entradas de la tabla"? Yo no quiero seguir entradas incompletas, quiero las retiren. es posible?

EDITAR

Este es mi sistema:

» arp --version
net-tools 1.60
arp 1.88 (2001-04-04)
+I18N
AF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE 
HW: (ether) +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 

» lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.2 LTS
Release:        14.04
Codename:       trusty

» uname -a
Linux polyphemus.xxx-net 3.13.0-46-generic #77-Ubuntu SMP Mon Mar 2 18:23:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
dangonfast
fuente
3
¿Qué estás tratando de lograr aquí? O más claramente, ¿qué problema estás tratando de resolver?
EEAA
¿Te faltan entradas para la tabla arp? Tal vez hay un programa pidiendo esa IP, renovando así esa entrada. Consulte con wiresharko tcpdump.
ott--
55
@MichaelMartinez porque xy problema . Parece probable que esa pregunta no sea el problema raíz y podría haber algún problema subyacente en el que el OP debería estar trabajando.
Zoredache
1
La razón por la cual esta información no está en la pregunta es porque no es relevante. Quiero un caché ARP limpio. Punto final. No confías en mí porque quiero eso, pero ese es tu problema, no el mío. Te aseguro: quiero un caché ARP limpio.
Dangonfast
2
Aquí hay una explicación detallada del mecanismo de caché ARP: stackoverflow.com/a/15511117/647991
dangonfast

Respuestas:

12
ip link set arp off dev eth0 ; ip link set arp on dev eth0

Asegúrese de hacerlo todo de una vez, para no interrumpir la conectividad de la red antes de poder volver a activar ARP.

nyet
fuente
2
Uno debe hacerlo en un script de shell o en la máquina, ya que parece romper la conectividad después del primer comando.
Louis
Lo hice en una línea, y funcionó: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. El sleeppuede no ser necesario.
mivk
5

Su primera solución funciona, solo toma un poco de tiempo (5-10 segundos en mi prueba en Kali) para pasar de "(incompleto)" a ninguna entrada.

Presumiblemente está en algún tipo de estado de transición en camino a ser eliminado.

armani
fuente
Para mí (Ubuntu 14.04) este no fue el caso: las entradas se mantienen durante mucho tiempo (¿para siempre?) En estado incompleto. Revisaré esto nuevamente hoy.
Dangonfast
Verificado: incluso después de algunos minutos, las entradas siguen ahí, en estado incompleto (arp 1.88, net-tools 1.60)
dangonfast
Bueno, entonces su problema es ciertamente un comportamiento no estándar, tal vez particular para Ubuntu 14.04. La forma correcta de hacerlo en Linux simplemente no funciona para usted. Espero que encuentres tu respuesta pronto. Puede eliminar este si lo desea.
armani
1
No, déjalo, da información para otros. Pero supongo que el comportamiento más "estándar" se encuentra en Ubuntu, no en Kali, que es una distribución para pruebas de penetración y tiene valores predeterminados específicamente ajustados para ese caso de uso.
dangonfast
1

En cierto sistema, el ipcomando no está disponible.

user@linux:~$ ip
-bash: ip: command not found
user@linux:~$

Entonces esta es la alternativa del ip link set arp off dev eth0; ip link set arp on dev eth0comando.

Si desea eliminar todas las entradas de la tabla en un solo comando, use for loopcomo en el siguiente ejemplo.

ANTES DE

user@linux:~$ arp
? (10.0.0.1) at 00:00:00:aa:aa:12 [ether]  on eth1
? (172.168.0.3) at 00:00:00:aa:aa:11 [ether]  on eth2
user@linux:~$ 

QUITANDO ARP CON ARP -D COMMAND

user@linux:~$ for i in 10.0.0.1 172.168.0.3; do sudo arp -d $i; done
user@linux:~$

DESPUÉS: LA DIRECCIÓN MAC SE QUITÓ DE LAS ENTRADAS CON MENSAJE INCOMPLETO

user@linux:~$ arp
? (10.0.0.1) at <incomplete>  on eth1
? (172.168.0.3) at <incomplete>  on eth2
user@linux:~$ 

Eso es cierto, al eliminar arp con el arp -dcomando, las entradas de arp siguen ahí con el incompletemensaje.

Para resolver este problema, use ifconfig ethx up/downasí

ANTES DE

user@linux:~$ arp
? (10.0.0.1) at <incomplete>  on eth1
? (172.168.0.3) at <incomplete>  on eth2
user@linux:~$ 

DESACTIVAR Y ACTIVAR LAS INTERFACES ETH1 Y ETH2 EN UN SOLO MANDO

user@linux:~$ for i in 1 2; do sudo ifconfig eth$i down; sudo ifconfig eth$i up; done
user@linux:~$ 

TADAAA ... PROBLEMA RESUELTO :)

user@linux:~$ arp
user@linux:~$ 
Charlotte Russell
fuente
0

Su solución mencionada es el enfoque correcto y seguro para vaciar la tabla ARP:

ip neigh flush all [dev <device>]

Si ciertas entradas se cambian a inválidas, eso es temporal y forma parte del protocolo ARP. El aspecto importante es que la asignación se ha ido, una entrada ARP marcada como incompleta no es una entrada IP-MAC en la tabla.

Acabo de probar esto y, en mi caso, borró inmediatamente la tabla y no dejó entradas incompletas.

Pedro
fuente
En algunos casos (poco claros), ip neigh flush all no es suficiente. En mi caso, no borró las entradas agregadas con arp -s.
MappaM