Uso de Arp.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org/

Licencia de este documento: Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2022 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción

ARP significa Address Resolution Protocol o protocolo de resolución de direcciones. ARP se utiliza para supervisar y modificar la tabla de asignaciones de direcciones IP y direcciones MAC (Media Access Control). ARP utiliza un cache que consiste en una tabla que almacena las asignaciones entre nivel de enlace de datos y las direcciones IP del nivel de red. El nivel de enlace de datos se encarga de gestionar las direcciones MAC y el nivel de red de las direcciones IP. ARP asocia direcciones IP a las direcciones MAC, justo a la inversa del protocolo RARP que asigna direcciones MAC a las direcciones IP. Para reducir el número de peticiones ARP, cada sistema operativo que implementa el protocolo ARP mantiene una cache en la memoria RAM de todas las recientes asignaciones.

Ejecute lo siguiente para consultar el manual detallado de arp:

man 8 arp

Equipamiento lógico necesario.

Arp forma parte del paquete net-tools, el cual se instala de modo predeterminado en CentOS, Red Hat™ Enterprise Linux, openSUSE™ y SUSE™ Linux Enterprise, pues se trata de un paquete obligatorio.

Procedimientos.

El tiempo de duración predeterminado para el cache de la tabla de ARP es de 60 segundos. Puede cotejarse ésto examinando el contenido de /proc/sys/net/ipv4/neigh/default/gc_stale_time.

cat /proc/sys/net/ipv4/neigh/default/gc_stale_time

Lo anterior debe devolver el valor 60.

Cambiar el valor de la duración del cache de la tabla de ARP puede impedir se desborde ésta cuando se trabaja en redes compuestas por centenares o miles de sistemas que en conjunto hacen demasiadas peticiones ARP que pudieran saturar las capacidades de un servidor.

El valor puede modificarse utilizando sysctl para cambiar el valor de la variable net.ipv4.neigh.default.gc_stale_time. En el siguiente ejemplo se cambia el valor predeterminado y el de la interfaz enp0s8 a 3600 segundos (1 hora):

sysctl -w net.ipv4.neigh.default.gc_stale_time=3600
sysctl -w net.ipv4.neigh.enp0s8.gc_stale_time=3600

Ejecute lo siguiente para cotejar los cambios:

cat /proc/sys/net/ipv4/neigh/default/gc_stale_time
cat /proc/sys/net/ipv4/neigh/enp0s8/gc_stale_time

Lo anterior debe devolver en ambos casos el valor 3600.

Edite el archivo /etc/sysctl.conf para que el cambio sea permanente:

vim /etc/sysctl.conf

Añada al final del archivo el siguiente contenido, conservando un espacio antes y después del signo = (igual):

net.ipv4.neigh.default.gc_stale_time = 3600
net.ipv4.neigh.enp0s8.gc_stale_time = 3600

Uso básico de arp.

Ejecute arp con la opción -a para ver el cache ARP actual:

arp -a

Lo anterior debe devolver algo similar a lo siguiente —en el caso de tratarse de un único sistema:

? (192.168.100.84) at d0:37:45:bd:17:46 [ether] on enp0s8
? (192.168.100.73) at 4c:91:0c:3f:ca:71 [ether] on enp0s8
? (192.168.100.1) at f4:9e:ef:5c:ec:6a [ether] on enp0s8
? (192.168.100.75) at 60:8d:26:19:f1:8a [ether] on enp0s8
? (192.168.100.66) at 00:9e:9a:9d:a3:9c [ether] on enp0s8

La salida de la tabla puede ser similar a lo siguiente cuando se trata de un servidor que sirve como puerta de enlace para una red de área local:

m051.redlocal.net (10.1.1.51) at 00:13:20:D0:09:1E [ether] on enp0s8
m046.redlocal.net (10.1.1.46) at 00:0F:1F:B1:71:14 [ether] on enp0s8
m073.redlocal.net (10.1.1.73) at 00:11:25:F6:93:F1 [ether] on enp0s8
m070.redlocal.net (10.1.1.70) at 00:11:25:F6:A2:52 [ether] on enp0s8
m040.redlocal.net (10.1.1.40) at 00:0D:60:6E:27:34 [ether] on enp0s8
m036.redlocal.net (10.1.1.36) at 00:0D:60:6E:25:FB [ether] on enp0s8
m011.redlocal.net (10.1.1.11) at 00:11:2F:C7:D0:D7 [ether] on enp0s8

Ejecute arp se utiliza sin opciones para ver la información en estilo Linux:

arp

Lo anterior debe devolver una salida similar a la siguiente:

Address                  HWtype  HWaddress           Flags Mask            Iface
m84.alcancelibre.org     ether   d0:37:45:bd:17:46   C                     enp0s3
m73.alcancelibre.org     ether   4c:91:0c:3f:ca:71   C                     enp0s3
m01.alcancelibre.org     ether   f4:9e:ef:5c:ec:6a   C                     enp0s3
m75.alcancelibre.org     ether   60:8d:26:19:f1:8a   C                     enp0s3
m66.alcancelibre.org     ether   00:9e:9a:9d:a3:9c   C                     enp0s3

Ejecute arp con la opción -n para observar lo anterior en formato numérico

arp -n

Lo anterior debe devolver una salida similar a la siguiente:

Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.100.84           ether   d0:37:45:bd:17:46   C                     enp0s3
192.168.100.73           ether   4c:91:0c:3f:ca:71   C                     enp0s3
192.168.100.1            ether   f4:9e:ef:5c:ec:6a   C                     enp0s3
192.168.100.75           ether   60:8d:26:19:f1:8a   C                     enp0s3
192.168.100.66           ether   00:9e:9a:9d:a3:9c   C                     enp0s3

Ejecute arp con la opción -i y el nombre de una interfaz como argumento para ver el caché específico para ésta. Ejemplo:

arp -i enp0s3

Lo anterior debe regresar algo similar a lo siguiente:

Address                  HWtype  HWaddress           Flags Mask            Iface
m84.alcancelibre.org     ether   d0:37:45:bd:17:46   C                     enp0s3
m73.alcancelibre.org     ether   4c:91:0c:3f:ca:71   C                     enp0s3
m01.alcancelibre.org     ether   f4:9e:ef:5c:ec:6a   C                     enp0s3
m75.alcancelibre.org     ether   60:8d:26:19:f1:8a   C                     enp0s3
m66.alcancelibre.org     ether   00:9e:9a:9d:a3:9c   C                     enp0s3

Ejecute arp con la opción -s con un nombre de anfitrión y una dirección MAC como argumentos para añadir manualmente un registro a la tabla de ARP. Ejemplo:

arp -s m200.redlocal.net 00:08:A1:84:18:AD

Ejecute arp con la opción -d y un nombre de anfitrión o dirección IP como argumento para eliminar manualmente un registro de la tabla de ARP. Ejemplo:

arp -d m200.redlocal.net

Ejecute lo siguiente para limpiar todo el cache:

for i in $(arp -n | awk '{print $1}' | grep -v Address);
do
   arp -d $i
done

Lo anterior se pide crear la variable i a partir de la salida de la ejecución de arp con la opción -n, para devolver las direcciones numéricas, mostrando a través de awk, sólo la primera columna de la tabla generada y eliminando la cadena de caracteres Address. Ésto genera una lista de direcciones IP que se asignan como valores de la variable i en el bucle, donde se elimina cada una de estas direcciones IP utilizando arp -d.

El objeto de limpiar el cache de ARP es permitir corregir los registros de la tabla en ciertos escenarios donde, por ejemplo, un equipo fue encendido con una dirección IP que ya esté en uso.