OpenWRT, Movistar y los leases del DHCP
Luis Peralta
El problema: Visibilidad de clientes en OpenWRT modo bridge
En casa de mis padres, donde intento tocar lo mínimo del setup que tienen montado pero siempre acabo trasteando algo, extiendo la WiFi con dos routers Netgear R7800 corriendo OpenWRT. Y digo extiendo porque la WiFi original del router de Movistar la dejo como está, por si las moscas.
Arquitectura de red
El setup es tal que así:
DHCP Server & Gateway]:::router %% --- Infrastructure Backbone (Wired Ethernet) --- %% Bridged routers connect via LAN ports to act as Access Points subgraph "Network Infrastructure" MainRouter ==>|Ethernet Backhaul| Bridge1[Wireless Router 1
Bridge Mode / AP]:::bridge MainRouter ==>|Ethernet Backhaul| Bridge2[Wireless Router 2
Bridge Mode / AP]:::bridge end %% --- Devices attached to Bridge 1 --- subgraph "Bridge 1 Zone (e.g., Upstairs)" Bridge1 --- OfficeDock[Laptop Docking Station]:::wiredDevice Bridge1 -.-> Phone1(Smartphone 1 Wi-Fi):::wifiDevice Bridge1 -.-> Tablet(Tablet Wi-Fi):::wifiDevice end %% --- Devices attached to Bridge 2 --- subgraph "Bridge 2 Zone (e.g., Living Room)" Bridge2 --- SmartTV[Smart TV]:::wiredDevice Bridge2 --- Console[Gaming Console]:::wiredDevice Bridge2 -.-> IoT_Thermo(Smart Thermostat Wi-Fi):::wifiDevice end
Los Netgear están configurados en modo bridge y no tocan la red local más que para tener su propia IP y ser accesibles desde la LAN. Además, ambos routers están configurados con el mismo SSID y con las features de roaming 802.11r activadas para permitir que los dispositivos cambien entre access points sin cortar la conexión.
El desafío: Obtener información de clientes DHCP
El problema: Los OpenWRT no saben nada de los clientes a los que sirven WiFi, porque el servidor DHCP lo gestiona el propio router de Movistar.
La solución: Extraer la lista de leases (asignaciones activas) del router de Movistar y sincronizarla con los OpenWRT.
La pega: Los routers de Movistar están bastante capados - no es trivial conseguir un shell con acceso completo ni saber dónde están almacenados los leases.
La solución (de verdad): Un poco de investigación y vibe coding.
Accediendo al router de Movistar
La gran complicación fue conseguir un shell funcional en el router de Movistar. Internet está plagado de información contradictoria o desactualizada, así que aquí van las credenciales que funcionan:
- Usuario:
1234 - Password: La que está impresa detrás del router
Movistar no es conocida por poner las cosas fáciles. Al hacer login con SSH, uno llega a un shell restringido desde el que poco se puede hacer y, para colmo, le han capado el comando help…
La solución en este caso es más simple de lo que parece - hay que especificar el shell directamente en el comando SSH:
ssh 1234@192.168.1.1 /bin/sh
¡Voilà! Ahora sí tenemos acceso a un shell completo (no del todo en realidad pero nos sirve).
Encontrando y procesando los leases DHCP
Desde aquí, encontrar el fichero de leases es cuestión de explorar el sistema de archivos. Acabó estando en /tmp/etc/udhcp_lease (el router usa udhcpc, el cliente DHCP de BusyBox).
Ahora solo nos faltaba generar un archivo /etc/ethers válido para OpenWRT de forma programática. Este archivo permite mapear direcciones MAC a nombres de host, facilitando la identificación de dispositivos en la red.
Requisitos del script
Para hacerlo bien, el script debía cumplir varios requisitos:
- Si ya hay hosts estáticos configurados en el OpenWRT, no añadirlos de nuevo (evitar duplicados)
- Si hay más de un host con el mismo nombre, concatenar
-XXal nombre, dondeXXes el último byte de la dirección MAC, para evitar colisiones de nombres - Mantener el formato correcto del archivo
/etc/ethers
El resultado
El script final está disponible aquí: update_ethers.sh. Vibe coded total una vez tuve claro lo que había que hacer.
Este script automatiza todo el proceso:
- Se conecta por SSH al router de Movistar
- Extrae los leases activos de DHCP
- Genera el archivo
/etc/ethersen los routers OpenWRT - Gestiona colisiones de nombres y evita duplicados
Ahora los OpenWRT pueden mostrar nombres de host legibles en lugar de solo direcciones MAC, lo que hace mucho más fácil identificar qué dispositivos están conectados a cada access point.
Nota: Este script se puede ejecutar periódicamente mediante un cronjob en cualquiera de los routers OpenWRT para mantener la lista de hosts actualizada automáticamente.