Add "Cómo agregar o eliminar una entrada ARP estática en GNU+Linux" article
This commit is contained in:
parent
35192dc549
commit
890686afec
@ -0,0 +1,192 @@
|
||||
Author: Anonymous
|
||||
Category: education
|
||||
Date: 2021-05-08 05:00
|
||||
Slug: como-agregar-o-eliminar-una-entrada-arp-estatica-en-gnu-linux
|
||||
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.
|
Loading…
x
Reference in New Issue
Block a user