¿Cómo puedo controlar el tráfico de mi router con OpenWRT?
La Conducción es el Arte que como hombres de la política hemos de
Ejercer. Esta nos permite interpretar los anhelos del pueblo, y hacer
llegar a cada quien lo que necesita para hacer grande e inmortal a la
Patria.
En un sistema telemático, esta acción es emulada por un Router: un
aparato de comunicaciones capaz de otorgar a cada equipo de la red los
paquetes que han solicitado, y encaminar los datos por la senda de la
Liberación.
Gracias al Justicialismo, podemos dotar a nuestro router con un firmware
libre mucho más potente que el firmware privativo original provisto por
el fabricante. Esto nos permitirá ejecutar directamente una distribución
Linux limitada pero funcional en el aparato, adecuada para afrontar
situaciones que antes no nos eran posibles. A tal fin, ya he indicado
cómo instalar OpenWRT en nuestro router TP-Link TL-WR941ND, y como
realizar ciertos rudimentos con dicho entorno operativo.
Una de las condiciones favorables que nos presenta el sistema operativo
de router OpenWRT, es la capacidad de ejecutar guiones de programación
(scripts) o miniprogramas dentro del mismo router, para realizar
diferentes acciones. Lejos de ser un sinsentido, vendrá de perillas para
ciertas actividades avanzadas.
Por ejemplo, en este caso el router TL-WR941ND opera como un potente
cortafuegos, cliente y servidor SSH, servidor DHCP programable, punto de
acceso Wifi, y también como unidad de registro de actividad de red. Sin
embargo, como la unidad permanece encendida 24x7, se encuentra en
posición ideal para encargarle que registre el tráfico telemático de la
red en Puerta de Hierro. En particular, se desea supervisar el tráfico
parcial de varios equipos conectados por cable al mismo, el tráfico
total en la red local (LAN) y en la red WAN (esto es, la conexión al
cablemódem), y la cantidad de días en que el aparato está encendido sin
reiniciarse.
Para esta tarea de registro automatizado, habremos de utilizar el
sistema OpenWRT instalado en el router TP-Link WR-941ND para programar
en su memoria una serie de scripts que se encargarán de cumplimentar
dicha tarea luego de intervalos de tiempo determinados.
Lo primero será acceder al router a través de una terminal. Si ya hemos
instalado OpenWRT correctamente y configurado las opciones de conexión,
podremos conectarnos y operar en el router por medio de una sesión
cifrada SSH. Lo haremos abriendo una terminal con Ctrl+Alt+T e
ingresando el siguiente Comando de Organización:
ssh root@ip_del_router
Para ello podremos utilizar el editor Vi, el minúsculo editor de texto
que se encuentra instalado en el mismo router. Para ello utilizamos el
comando:
vi /root/upt
Se abrirá el editor Vi. Se trata de un editor que nos mostrará un
archivo vacío. Para empezar a escribir debemos ingresar al modo de
inserción de texto, mediante la tecla i. Una vez en modo inserción,
podremos escribir o pegar texto. Podremos pegar el siguiente código:
#!/bin/sh
# Logueador en RAM del Uptime y Trafico del router peronista
# llamarlo con cron cada 15 min o algo asi
# 4ago2015 Ubuntu Peronista
# borra la version anterior
rm /tmp/log/uptime
# Genera el archivo
echo Archivo generado por el programa upt. > /tmp/log/uptime
date >> /tmp/log/uptime
uptime >> /tmp/log/uptime
echo TRAFICO TOTAL >> /tmp/log/uptime
echo Enlace puente LANx+WLAN0 y WAN >> /tmp/log/uptime
ifconfig br-lan >> /tmp/log/uptime
echo eth0 >> /tmp/log/uptime
echo TRAFICO DE LAN COMPLETO >> /tmp/log/uptime
ifconfig eth0 >> /tmp/log/uptime
echo Trafico desglosado por puertos LAN del Router: >> /tmp/log/uptime
ifconfig lan1 >> /tmp/log/uptime
ifconfig lan2 >> /tmp/log/uptime
ifconfig lan3 >> /tmp/log/uptime
ifconfig lan4 >> /tmp/log/uptime
echo TRAFICO AL MODEM - puerto WAN >> /tmp/log/uptime
echo resume datos de salida/entrada del puerto de red exterior. >>
/tmp/log/uptime
ifconfig wan >> /tmp/log/uptime
echo TRAFICO AL PUNTO DE ACCESO WIFI - wlan0 >> /tmp/log/uptime
ifconfig wlan0 >> /tmp/log/uptime
echo CESIONES DHCP >> /tmp/log/uptime
cat /tmp/dhcp.leases >> /tmp/log/uptime
# mensaje para mostrar
echo Tiempo de uptime actualizado en el archivo /tmp/log/uptime
echo Viva el Justicialismo!
Luego guardaremos el archivo y salimos del editor. Para hacer esto en el
editor Vi, debemos presionar la tecla Esc y a continuación ingresar :wq
seguido de Enter.
Debemos darle permiso de ejecución al programa ingresado. Podremos
hacerlo simplemente con:
chmod +x /root/upt
Dicho programa será capaz de crear en la memoria RAM del router (mas
precisamente, en la carpeta /tmp/log/) un archivo llamado uptime que nos
indicará el tiempo que lleva encendido el router, los datos de tráfico
desglosados por puerto, wifi, y el puerto WAN (de Internet). También nos
indicará qué máquinas tiene asociadas al router.
La finalidad es que este programa se ejecute automáticamente cada 10
minutos, lo que actualizará dicho registro con conteos parciales. El
problema es que este archivo se borrará de la memoria toda vez que se
apague o se reinicie el router.
Se preguntarán cual es el motivo de esto. Vean señores, notarán que no
actualizamos este fichero cada 10 minutos en la memoria EEPROM del
router sino en su memoria volátil, la RAM. Esto es así porque la memoria
EEPROM, como toda memoria de tipo Flash, puede llegar a sufrir un
proceso de deterioro si la estamos grabado (escribiendo) cada 10 minutos
sin ton ni son. Por tal motivo crearemos un segundo script llamado
uptflash, que no se ejecutará cada diez minutos sino una vez por día, y
que simplemente copiará el archivo de registro desde la memoria volátil
RAM a la memoria de masa EEPROM Flash. Una vez transferido el archivo,
el dato total del día se almacenará de forma imperecedera.
Para poder ingresar este nuevo script, volvemos a usar el editor Vi:
vi /root/uptflash
ingresamos en modo inserción presionando i, y le pegamos el siguiente
código:
#!/bin/sh
# Graba el log de uptime de la RAM a la memoria flash
# poner en cron una vez por dia, a las 12am o algo asi
# borra el archivo viejo
rm /root/uptime.log
# copia el archivo de la RAM a la FLASH del router
cp /tmp/log/uptime /root/uptime.log
..luego guardamos y salimos con Esc+:wq. No debemos darle permisos de
ejecución al fichero, con el comando:
chmod +x /root/uptflash
Pues bien, para que ambos guiones funcionen de la manera recomendada,
debemos hacer que el router los ejecute de forma programada y en
intervalos. Para ello usaremos la funcionalidad Cron (el cronómetro) del
router. Este nos permite ingresar una serie de acciones que dispararán
los guiones.
Nuevamente, usaremos Vi:
vi /etc/crontabs/root
Esto nos permitirá crear un archivo de configuración de los guiones
cronometrados. Ingreso en modo inserción mediante la tecla i, y le
pegamos el siguiente código:
# Ejecuta este script upt cada 10 min
# para loguear uptime y trafico a la RAM
*/10 * * * * /root/upt
# ejecuta el script uptflash a las 13:01pm
# para copiar el uptime de la RAM a la flash
# una vez por dia:
01 13 * * * /root/uptflash
Esta orden le indica al router que ejecute el script upt, el cual se
encarga de reemplazar el archivo bitácora antiguo (si lo hubiese) por
uno nuevo cada diez minutos, a toda hora, todos los días de la semana.
Finalmente todos los días a las 13:01 horas, ejecutará uptflash, que
transferirá la bitácora desde la memoria RAM volátil a la EEPROM estable
del router (lo cual nos permitirá conocer nuestro "récord" de tiempo de
encendido). Es interesante destacar que esta acción se realiza un minuto
después de la otra, para evitar que al realizarse al unísono, el primer
log no esté completo.
Ahora bien, para que los registros de bitácora se inicien según esta
consigna, es necesario reiniciar el router. Una vez reiniciado, puedo
dejarlo encendido todo el tiempo que sea necesario. El reinicio puede
hacerse con el comando:
reboot
Para revisar si la orden de acción cronometrada está activa, podremos
loguearnos al router e ingresar el siguiente comando:
logread | grep cron
Debería devolvernos dos instancias de Cron. En tanto, si queremos
estudiar el registro parcial, podríamos ingresar la orden:
cat /tmp/log/uptime | less
Y si queremos ver el último registro almacenado en la memoria EEPROM no
volátil, habremos de ordenar:
cat uptime.log | less
En el caso de requerir supervisar el tráfico en tiempo real, podremos
instalar en el router el programa iftop, una potente aplicación pensada
precisamente para ello. Lo haremos con:
opkg update
opkg install iftop
Y ejecutaremos el programa con
iftop:
En dicho programa, podremos activar la ayuda presionando h.