Cómo obtener la dirección IP de una máquina si conoces su dirección ethernet

En Wake On Lan, o cómo encender ordenadores de forma remota explico cómo despertar una máquina concreta de la cual conoces su dirección ethernet. El último paso que necesito en mi entorno es obtener la dirección IP a partir de esa dirección ethernet.

En mi caso no puedo recurrir al típico truco de asignación fija de dirección IP porque no tengo control de la infraestructura y mi padre cambia de router con frecuencia. Puedo conectarme a la Raspberry PI que tengo en su red local a través de una VPN y, desde ella, saltar al servidor una vez que lo haya encendido.

La dirección IP local del servidor puede cambiar, así que tengo que localizarla. Existen muchas formas de hacerlo: arrancar una VPN cuando se enciende el servidor, registrarse en un servicio DNS, enviar paquetes de identificación en la red local, etc.

En mi caso, lo más simple es usar el protocolo ARP, que hace exactamente lo contrario a lo que necesito: convertir una dirección IP a una dirección ethernet [1].

[1] La resolución de direcciones en IPv6 es diferente, pero ahora mismo no me interesa. Mi padre y una abrumadora mayoría de redes locales utilizan IPv4.

Podemos enviar un paquete a todas las direcciones IP de la red local y observar luego la tabla ARP para ver qué direcciones IP existen realmente y cuáles son sus direcciones ethernet [2] asociadas.

Por ejemplo, para determinar la dirección IP de la dirección ethernet 64:51:06:7f:11:9a podemos hacer algo como:

# for i in {1..254}; do ping -c 1 192.168.0.$i & done | arp -n | grep -i 64:51:06:7f:11:9a
192.168.0.12             ether   64:51:06:7f:11:9a   C                     eth0

Aquí vemos que el servidor tiene la dirección IP 192.168.0.12, al menos en este momento. Con esta información procedo a reconfigurar la redirección de puertos, el cortafuegos y demás en la Raspberry PI de la red local.

[2] Hablo en general de direcciones ethernet, pero en realidad me refiero a direcciones MAC, a las direcciones a nivel físico. Otras redes no ethernet también tienen direcciones MAC, como las redes WIFI o las redes Bluetooth.