195 lines
5.9 KiB
Markdown
195 lines
5.9 KiB
Markdown
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.
|
|
|
|
## Agregar una entrada ARP estática a la tabla ARP local
|
|
|
|
:::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.
|
|
|
|
## Eliminar una entrada ARP estática de la tabla ARP local
|
|
|
|
:::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.
|