Author: Anonymous Category: education Date: 2021-05-08 05:00 Slug: como-agregar-o-eliminar-una-entrada-arp-estatica-en-gnu-linux Image: 2021/05/arp.jpg Lang: es Tags: arp, arp estática, arp quitar Title: Cómo agregar o eliminar una entrada ARP estática en GNU+Linux
ARP (abreviatura de "Protocolo de resolución de direcciones") es un protocolo de red que se utiliza para asignar una dirección de red IP a una dirección MAC de hardware correspondiente.
Cuando el host X quiere comunicarse con el host Y, X primero transmite una solicitud ARP en su red local para obtener la dirección MAC de Y.
Una vez que X recibe la respuesta ARP que contiene la dirección MAC de Y, X usa la información para construir tramas Ethernet destinadas a Y.
La información de mapeo de direcciones IP/MAC así obtenida se almacena en caché en la tabla ARP local, de modo que el proceso de consulta ARP se puede omitir posteriormente.
Pueden surgir problemas cuando, por cualquier motivo, el host X no recibe respuestas ARP para un host de destino Y con el que desea comunicarse. En otros casos, las respuestas ARP entran, pero contienen una dirección MAC asociada con un host Z incorrecto.
Tales respuestas ARP corruptas resultarán en secuestro de tráfico, donde el tráfico que debería haber sido enviado a Y termina llegando al host Z.
Al tratar con este tipo de situaciones anormales inducidas por ARP, es útil poder agregar entradas ARP estáticas manualmente en la tabla ARP almacenada en caché local. Cuando se encuentra una dirección MAC de un host de destino Y en la tabla ARP local, no es necesario enviar solicitudes ARP.
:::console
$ doas arp -s 10.0.0.2 00:0c:29:c0:94:bf
Este comando le dice a la tabla ARP local que el host con la dirección IP 10.0.0.2 tiene la dirección MAC 00:0c:29:c0:94:bf. Una vez que haya configurado una entrada ARP estática, puede verificar que
:::console
$ arp -a -n
salida:
:::bash
? (192.168.10.47) at e0:db:55:ce:13:f1 [ether] on eth0
? (192.168.10.1) at 00:e0:b1:cb:07:30 [ether] on eth0
? (10.0.0.2) at 00: 0c: 29: c0: 94: bf [ether] PERM on eth1
Como puede ver arriba, la entrada ARP configurada estáticamente aparece correctamente, marcada como "PERM" en la tabla ARP.
:::console
$ doas arp -d 10.0.0.2
Verificar:
:::console
$ arp -a -n
salida:
:::bash
? (135.112.29.47) at e0:db:55:ce:13:f1 [ether] on eth0
? (135.112.29.1) at 00:e0:b1:cb:07:30 [ether] on eth0
? (10.0.0.2) at <incomplete> on eth1
Tenga en cuenta que cualquier entrada de ARP agregada por el comando arp en tiempo de ejecución como el anterior no permanece de manera persistente entre los reinicios. Para agregar una entrada ARP estática de forma permanente, lo que puede hacer es cargar entradas ARP desde un archivo externo automáticamente cuando una interfaz de red está activa. Para eso, primero cree un archivo que contenga entradas ARP estáticas.
:::console
$ doas nano -w /etc/ethers
Entrada de ejemplo:
:::bash
00:0c:29:c0:94:bf 10.0.0.2
00:0c:59:44:f0:a0 10.0.0.5
. . . .
El comando arp
le permite cargar cualquier archivo
externo usando la opción -f
.
:::console
$ doas arp -f /etc/ethers
Ahora debe configurar el comando anterior para que se ejecute automáticamente cuando una interfaz de red determinada (por ejemplo, eth0) esté activa. Hay formas específicas de distribución para ejecutar un comando de inicio para interfaces de red. A continuación se muestran ejemplos específicos de la distribución.
Aquí supongo que no está utilizando NetworkManager en su sistema GNU con Linux. Entonces, si está utilizando NetworkManager, primero tendrá que deshabilitarlo.
En Trisquel o Debian, agregue la siguiente entrada
en /etc/network/interfaces
:
:::bash
iface wlan0 inet dhcp
. . .
post-up arp -f /etc/ethers
En CentOS, RHEL o Fedora, escriba el siguiente script ejecutable:
:::console
$ doas nano -w /sbin/ifup-local
Entrada:
:::bash
#!/bin/sh
if [[ "$1" == "eth0" ]]
then
arp -f /etc/ethers
else
#DO_NOTHING
fi
Asignamos persmisos de ejecución:
:::console
$ doas chmod +x /sbin/ifup-local
Tengo algunos dispositivos IP bastante tontos en una subred con un servidor Trisquel, y el servidor recibe datos de transmisión de cada dispositivo. Me he encontrado con un problema en el sentido de que cuando se emite una solicitud ARP al dispositivo mientras está transmitiendo datos al servidor, la solicitud se ignora, la entrada de caché se agota y el servidor deja de recibir la transmisión.
Entonces, para evitar que el servidor envíe solicitudes ARP a estos dispositivos por completo, me gustaría agregar una entrada ARP estática para cada uno, algo como
:::console
$ doas arp -i eth2 -s ip.of.the.device mac:of:the:device
Pero estas entradas ARP "estáticas" se pierden si la red está deshabilitada/habilitada o si se reinicia el servidor.
¿Cuál es el mejor lugar para agregar automáticamente estas entradas, preferiblemente en algún lugar que las vuelva a agregar cada vez que se abra la interfaz eth2?
Realmente no quiero tener que escribir un script que monitoree la salida de arp y vuelva a agregar las entradas de caché si faltan.
Edite para agregar cuál fue mi script final:
Escribí este archivo:
:::console
$ doas nano -w /etc/network/if-up.d/add-my-static-arp
Con el contenido:
:::bash
#!/bin/sh
arp -i eth0 -s 192.168.0.4 00:50:cc:44:55:55
arp -i eth0 -s 192.168.0.5 00:50:cc:44:55:56
arp -i eth0 -s 192.168.0.6 00:50:cc:44:55:57
Y luego, obviamente, agregue el permiso para permitir que se ejecute:
:::console
$ doas chmod +x /etc/network/if-up.d/add-my-static-arp
Y estas entradas arp se agregarán o volverán a agregar manualmente cada vez que se abra cualquier interfaz de red.