El comando ip, al igual que sirve para controlar las IPs de interfaces de red, rutas o túneles, también permite manipular la tabla ARP (Address Resolution Protocol). Sí, para ello tenemos el comando «arp» pero para algunas cosas el comando ip le toma la delantera y es una forma de combinar funcionalidades de muchos comandos (el obsoleto ifconfig, route, arp…) en un único comando.
La gestión de ARP con el comando IP se hace pasándole el parámetro «neigh» (neighbour/vecino) seguido del resto de parámetros específicos.
Ver la tabla ARP
El comando para visualizar la tabla de entradas ARP es:
# ip neigh show
Se puede abreviar del siguiente modo:
# ip n show
A diferencia que al ejecutar un «arp -a» o visualizar el contenido de /cat/net/arp, el comando ip nos muestra algo más de información. En la última columna nos indica el estado de la máquina (del «vecino») cuando se ha detectado algún problema de conexión:
- REACHABLE: la entrada ARP es válida y hay conectividad.
- STALE: la entrada ARP es válida pero no hay conectividad.
- FAILED: no hay conectividad y la MAC no ha sido detectada.
- DELAY: a la espera de confirmación tras el envío de un paquete.
Ejemplo:
~# ip neigh show 192.168.1.61 dev eth0 lladdr 78:45:c4:aa:52:4e STALE 192.168.1.56 dev eth0 FAILED 192.168.1.1 dev eth0 lladdr 00:0a:e4:8c:46:08 REACHABLE 192.168.1.68 dev eth0 FAILED
Salida del comando «arp -a» y también del archivo del filesystem /proc:
~# arp -a ? (192.168.1.61) at 78:45:c4:aa:52:4e [ether] on eth0 ? (192.168.1.56) at on eth0 ? (192.168.1.1) at 00:0a:e4:8c:46:08 [ether] on eth0 ? (192.168.1.68) at on eth0
~# cat /proc/net/arp IP address HW type Flags HW address Mask Device 192.168.1.61 0x1 0x2 78:45:c4:aa:52:4e * eth0 192.168.1.56 0x1 0x0 00:00:00:00:00:00 * eth0 192.168.1.1 0x1 0x2 00:0a:e4:8c:46:08 * eth0 192.168.1.68 0x1 0x0 00:00:00:00:00:00 * eth0
Flush de la ARP cache
El siguiente comando permite limpiar por completo la caché ARP:
# ip -s -s neigh flush all
Si queremos eliminar de la caché una entrada concreta, podemos hacerlo del siguiente modo:
# ip -s -s neigh flush 192.168.1.100 192.168.1.100 dev eth0 lladdr 00:0v:s4:23:f6:01 ref 132 used 0/0/0 DELAY *** Round 1, deleting 1 entries *** *** Flush is complete after 1 round ***
Añadir entrada ARP
Para añadir entradas a la tabla de ARP utilizamos la siguiente sintaxis:
# ip neigh add {IP-HERE} lladdr {MAC/LLADDRESS} dev {DEVICE} nud {STATE}
La sintaxis también vale para eliminar o modificar:
ip neigh { add | del | change | replace } { ADDR [ lladdr LLADDR ] [ nud { permanent | noarp | stale | reachable } ] | proxy ADDR } [ dev DEV ]
Podemos especificar el estado de la entrada con lo que pasemos a «nud». Para una entrada ARP permanente utilizamos permanent y así le indicamos que sea fija y sólo pueda ser eliminada manualmente. Otros parámetros son noarp (definir la entrada como válida y que no requiera validación), stale (definirla como válida pero con necesidad de validación) y reachable (válida hasta que expire por timeout)
Ejemplo de entrada permanente:
# ip neigh add 192.168.1.100 lladdr 00:5v:54:33:v8:02 dev eth0 nud perm
Con el comando arp sería así:
# arp -s 192.168.1.100 00:5v:54:33:v8:02
Eliminar entrada ARP
Eliminar una entrada ARP es más sencillo, únicamente hay que especificar la dirección IP y el dispositivo al que está asociada:
# ip neigh del 192.168.1.100 dev eth0
Con arp sería:
# arp -d 192.168.1.100
Básicamente esto es lo que debemos conocer para poder controlar las tablas ARP con el comando IP en sustitución (o como complemento) a «arp».