Mostrando entradas con la etiqueta WR941ND. Mostrar todas las entradas
Mostrando entradas con la etiqueta WR941ND. Mostrar todas las entradas

miércoles, 9 de septiembre de 2015

¿Cómo puedo ejecutar programas en OpenWRT?

¡Trabajadores!

Como verdaderos apóstoles, hemos de instalar software libre en todos los dispositivos que tengamos a mano. Solo así nos aseguraremos de transitar la real senda de la Liberación.

He comentado ya del caso del router TP Link WR491ND y de su firmware de control alternativo y abierto OpenWRT. Gracias a el nuestro router dejará de ser un dispositivo bobo, y pasará a convertirse en un verdadero router peronista capaz de correr otras aplicaciones. OpenWRT es un firmware abierto, pensado para controlar enrutadores. Como tal, es un sistema operativo que convierte a nuestro router en una computadora de pequeñas dimensiones y potencia reducida, pero programable para conducir efectivamente una serie de tareas.

Por medio de OpenWRT y un router compatible, podremos crear un servidor de archivos, servidores pequeños de correo de status, controlar en horarios determinados dispositivos electrónicos a través de interfaces seriales, USB, o Ethernet.

Con un poco de dificultad, se pueden programar entonces dispositivos controlados a partir del router, como por ejemplo, aspersores que trabajen a horario, unidades de medición del clima que lean las condiciones de temperatura y humedad y la transmitan por internet, podremos controlar cámaras de seguridad, relays que enciendan luces, abran o cierren portones eléctricos, enciendan bombas o motores eléctricos, o con más software libre podremos convertir nuestro router en un dispositivo de transmisión de medios (fotos, audio e incluso video) para operar dentro de la red local, y muchso etcéteras

Sin embargo, no necesitamos tanta dificultad, aún así podremos desarrollar nuestras propias "aplicaciones caseras" por medio de código Ash. Dicho código comprende comandos y condicionales, de manera de poder realizar ciertas acciones útiles, con poco ingenio y habilidad.

Es importante si bien los guiones los almacenaremos dentro del directorio /root del router, los mismos han de concentrarse en operar dentro del directorio /tmp/ del router, ya que el mismo es la memoria RAM volátil. Esto es así pues los routers disponen de muy poco espacio físico (un chip EEPROM de 4 megabytes, y raramente más).

Para disponer nuestros scripts, crearemos dentro del router un directorio a tal efecto:

mkdir /root/scripts/
Por ejemplo, si nuestro proveedor nos da IP dinámica y quisiéramos saber cuáles nuestra dirección IP de salida actual para montar un servidor de juego o por cualquier motivo, podríamos crear un script que lo haga.

Para ello, hemos de utilizar siempre el básico editor Vi. Se trata de un editor mínimo incorporado dentro del router. Para editar texto debemos llamarlo con vi nombredelarchivo.

En este caso podriamos hacer:

vi /root/scripts/decimelaip

Presionamos i para entrar al modo edición, y le pegamos el siguiente código peronista:

#!/bin/sh
# Scropt decimelaip Informa la IP de salida.
rm -f /tmp/log/ipactual.log
wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log
echo La direccion IP actual de salida a internet es:
echo '' >> /tmp/log/ipactual.log
cat /tmp/log/ipactual.log


Para guardar el archivo y abandonar el editor, debemos presionar Esc y escribir :wq seguido de Enter.

Ahora podremos darle permisos de ejecución con:

chmod +x /root/scripts/decimelaip

y ejecutarlo con:

sh ~/scripts/decimelaip
 
También podríamos configurar un script que revise por medio de un ping a google.com, para saber si hay conexión WAN (al cablemódem), y si no la encuentra, que reinicie el router. Este microprograma puede ser útil para una tarea de administración remota.

Para ello editaríamos el archivo:

vi /root/scripts/pingreset

Activamos el modo de edición con i y le pegamos el siguiente código:

#!/bin/sh
# Programa para probar la conexion o resetear.
if ping -c 1 google.com > /dev/null ; then
echo "Todo OK, el cliente funciona y no necesita reiniciarse"
pingfail=0
else
 pingfail=$(($pingfail+1))
echo $pingfail " ping fracasados"
if [ $pingfail -gt 10 ];
then
echo "mas de 10 ping a google fracasados. RESETEANDO EL ROUTER!!"
reboot
fi
fi


Luego guardamos y salimos con Esc +:wq, y le damos permisos de ejecución con:

chmod +x /root/scripts/pingreset

Podremos ejecutarlo con:

sh ~/scripts/pingreset

Un script que conviene tener en el directorio root de nuestro router es uno que active o desactive la red wifi. Para ello editamos:

vi ~/wifionoff

Se abrirá el editor Vi con el archivo en blanco. Presionamos i y le insertamos el siguiente código:

#!/bin/sh
# Crea un archivo con el registro de estado del Wifi (on u off)
# Si el wifi está on lo apaga, si está off lo enciende.

STATEFILE="/tmp/wifionoff.state"
 
if [ $# -eq 1 ]; then
  case $1 in
    "up"|"on")
      STATE=off
      ;;
    "down"|"off")
      STATE=on
      ;;
  esac
else
  if [ ! -e ${STATEFILE} ]; then
    STATE=on
  else
    . ${STATEFILE}
  fi
fi
if [ -z ${STATE} ]; then
  STATE=on
fi
 
if [ ${STATE} == "on" ]; then
  /sbin/wifi down
  STATE=off
else
  /sbin/wifi up
  STATE=on
fi
 
echo "STATE=${STATE}" > ${STATEFILE}


Una vez realizado esto, podremos darle permiso con:

chmod +x /root/wifionoff

Con este archivo creado, podremos ahora apagar o encender el wifi con dicho comando (siempre que estemos conectados por cable, claro está).

En vista de dicho archivo y si por algún motivo necesitásemos reiniciar solamente la red inalámbrica, pero queremos hacerlo estando conectados por wifi, podremos crear un script a tal efecto.

Para ello ingresamos

vi /root/scripts/resetearwifi

Y le pegamos el siguiente código:

#!/bin/sh
#Programa para resetear el wifi estando conectado por wifi
# requiere script wifionoff en /root/
cd /root/
./wifionoff && ./wifionoff


Lo guardamos y salimos con Esc + :wq, y le asignamos permisos de escritura con chmod + /root/scripts/resetearwifi.

En el caso de necesitar scripts puros para encender o apagar el wifi (por ejemplo, para utilizarlos a través de una orden cronometrada Cron, y activar o desactivar el wifi en determinadas horas del día), podremos utilizar Vi para incorporar dos archivos:

Un archivo /root/script/wifion que contenga el siguiente código:

#!/bin/sh
# Enciende la WLAN (sin detener el dispositivo de emision radio0)
wifi up


...y un archivo /root/script/wifioff que contenga el siguiente código:


#!/bin/sh
# Apaga la WLAN (sin detener el dispositivo de emision radio0)
wifi down



Es siempre útil contar con un script que nos presente el status del router. Para ello podremos crear con Vi un archivo /root/status e insertarle el código:

#!/bin/sh
# Programa que devuelve datos de estado del router
date
uptime
echo Detalle de las Conexiones del router
ifconfig
echo Direcciones IP cedidas por DHCP
cat /tmp/dhcp.leases
rm -f /tmp/log/ipactual.log
wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log
echo '' >> /tmp/log/ipactual.log
echo La dirección IP actual de salida a internet es:
cat /tmp/log/ipactual.log


Guardamos el archivo con Esc + :wq y le damos permisos de ejecución con chmod +x /root/status.

Para ejecutarlo, podremos utilizar el comando ./status o sh /root/status.

Podremos crear otro programa de información aún mas detallado con facilidad. Por ejemplo, podríamos escribir un guion llamado /root/scripts/info con el siguiente contenido:

#scripts para detalles
echo INFORMACION DEL ROUTER - presione q para salir > /tmp/log/info
echo Dispositivo >> /tmp/log/info
cat /tmp/sysinfo/model >> /tmp/log/info
cat /proc/version >> /tmp/log/info
uname -mnrs >> /tmp/log/info
cd /tmp/
rm -f /tmp/log/ipactual.log
wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log
echo '' >> /tmp/log/ipactual.log
echo La IP actual de salida a Internet es >> /tmp/log/info
cat /tmp/log/ipactual.log >> /tmp/log/info
echo INFORMACION DE LA CPU DEL ROUTER >> /tmp/log/info
cat /proc/cpuinfo >> /tmp/log/info

echo '' >> /tmp/log/info
echo ESTADO DE LA MEMORIA >> /tmp/log/info
cat /proc/meminfo >> /tmp/log/info

echo '' >> /tmp/log/info
echo MODULOS CARGADOS EN MEMORIA >> /tmp/log/info
cat /proc/modules >> /tmp/log/info

echo '' >> /tmp/log/info
echo DMESG DEL ROUTER >> /tmp/log/info
dmesg >> /tmp/log/info

echo '' >> /tmp/log/info
echo LOG INTERNO DEL APARATO >> /tmp/log/info
logread >> /tmp/log/info

echo '' >> /tmp/log/info
echo Generando archivo nuevo en tmp/log/info
cat /tmp/log/info | less
# Comentar para que no elimine el archivo al terminal el proceso:
rm /tmp/log/info


Con ello, al darle permisos de ejecución y ejecutar el script, nos devolverá una gran cantidad de información de status, en un paginador con le cual podremos movernos usando las flechas del cursor.
Para cerrar el paginador, debemos presionar q.

Red de invitados
En mi residencia de Puerta de Hierro dispongo de un único router que utilizo para mis quehaceres, pero en ocasiones debo montar el wifi para que mis invitados puedan utilizar sus dispositivos móviles. Es verdad que existen configuraciones específicas para el tema que nos aislan la red wifi de la red local, pero en mi caso no lo considero necesario de momento, por lo que simplemente dispongo una red wifi con una clave simple, diferente a la utilizada regularmente.

En tal caso, podremos preveer dos scripts que cambien la configuración de la red, y la activen. Cada uno de ellos depende de distintos archivos de parámetros generales.

En OpenWRT la red inalámbrica se configura a través del archivo /etc/config/wireless, el cual delimita las opciones de la red wifi, entre ellas el nombre de red (ssid) y la contraseña (key).

Para el funcionamiento adecuado crearé dos archivos de configuración. En el archivo /etc/config/wireless.normal indicaremos nuestros datos normales de la red, incluyendo su nombre de red y su contraseña. Por ejemplo, indicaré:

# configuracion de la red Wifi normal
config wifi-device 'radio0'
    option type 'mac80211'
    option hwmode '11ng'
    option path 'platform/ath9k'
    option disabled '0'
    option country 'AR'
    option txpower '20'
    option htmode 'HT40'
    option channel 'auto'

config wifi-iface
    option device 'radio0'
    option network 'lan'
    option mode 'ap'
    option ssid 'Wifi de Peron'
    option key 'eStA cLabe nO lA Bas A DeScUBrIr nI LoCO'
    option encryption 'psk2+ccmp'


En tanto, en el archivo /etc/config/wireless.invitado pondremos los datos que corresponderán a la red temporal para invitados:

# configuracion del Wifi para invitados
config wifi-device 'radio0'
    option type 'mac80211'
    option hwmode '11ng'
    option path 'platform/ath9k'
    option disabled '0'
    option country 'AR'
    option txpower '20'
    option htmode 'HT40'
    option channel 'auto'

config wifi-iface
    option device 'radio0'
    option network 'lan'
    option mode 'ap'
    option ssid 'Puerta de Hierro - Invitados'
    option key 'vivaperon'
    option encryption 'psk2+ccmp'
# Activarlo con el programa /root/scripts/confwifiinvitado
# Para volver a la wifi normal usar /root/scripts/wifinormal


Estos archivos de configuración no requieren permisos de ejecución.

Para poder activar la red Wifi de invitados o la red Wifi normal, debemos crear dos scripts y darles permisos de ejecución que las den de alta. En el archivo /root/scripts/confwifiinvitado ingresamos el siguiente código:

#!/bin/sh
#activa wifi invitado siguiendo el archivo /etc/config/wireless.invitado
cd /root
wifi down
rm -f /etc/config/wireless
cp /etc/config/wireless.invitado /etc/config/wireless
wifi up
echo Se activo la wifi de invitado!

Luego en el archivo /root/scripts/confwifinormal, le incorporamos el siguiente código:

#!/bin/sh
#activa wifi normal segun archivo /etc/config/wireless.normal
cd /root
wifi down
rm -f /etc/config/wireless
cp /etc/config/wireless.normal /etc/config/wireless
wifi up
echo Se reestablecio la wifi normal...


Tras editar ambos scripts, les otorgamos sus necesaarios permisos de ejecución con:

chmod +x /root/scripts/confwifiinvitado /root/scritps/confwifinormal:

Ahora, si ejecutamos el script confwifiinvitado, la red se llamara "Puerta de Hierro - Invitados" y la contraseña será "vivaperon". Y si ejecutamos confwifinormal, la red se llamará "Red de Peron" y la contraseña será la dificultosa "eStA cLabe nO lA Bas A DeScUBrIr nI LoCO".

viernes, 7 de agosto de 2015

¿Como puedo programar un botón de mi router con OpenWRT?

En la necesidad de modernizar diferentes industrias del país, Juan Perón invitó a un número de personalidades de la técnica, que estableciendo vínculos con la Argentina, pudieron mejorar los prospectos de la industria. De entre las enseñanzas, guardamos aquella de cómo programar los botones de nuestro router a través del firmware OpenWRT para darle nuevos usos.

(...)
Muchas veces me preguntaron porqué traje a los hombres de ciencia de un país derrotado a nuestro Vergel de Paz. Pero la respuesta era simple: los científicos Alemanes nos enseñaron los rudimentos de ciencia en la que nuestros hombres atrasaban, y nos permitieron afianzar la industria del país en un camino de grandeza como lo han tenido las Grandes Naciones del Tierra.


Todo lo que hemos aprendido ha sido bueno, y de lo que no hemos sacado rédito instantáneo, lo hemos hecho al tiempo. Así es como ha de lograrse un verdadero progreso. En ocasiones, nos hemos valido de la improvisación para encontrar un uso a la técnica y utillaje que siquiera sus creadores preveían.

La industria mecánica de Córdoba es un claro ejemplo, con su rastrojero iniciado a partir de utillaje aeronáutico y de circunstancias. Si este ejemplo puede encontrarse en el desarrollo de la industria pesada, cómo no va a haberlo en la telemática. Encontraremos ejemplos en lo que algo pensado para una cosa, termina siendo mejor aplicado para otra.

La mayoría de los enruteadores modernos disponen de un botón nomenclado como WPS. Dicho botón activa una funcionalidad telemática capaz de "asociar" un dispositivo Wifi a nuestra red local inalámbrica cifrada con contraseña sin necesidad de compartir la clave. Explicado de manera sencilla, al presionar el botón se dará inicio a una ventana de tiempo de dos minutos, durante el cual el router - en confianza - asociará a cualquier dispositivo Wifi en el que también se presione dicho botón. Una vez transcurrido los dos minutos, volverá a cifrarse y cerrarse la red inalámbrica.
La idea original estaba bien intencionada. Sin embargo, muchas cosas malas pueden hacerse en dos minutos, y si lo sabrá su madre. Nada impide que durante dicha ventana temporal, usuarios malévolos en las cercanías puedan asociarse a la red sin que tuviésemos maneras obvias de saberlo. Por lo tanto, la funcionalidad WPS - en lugar de hacer la vida más fácil al Pueblo - terminó perjudicándolo y llevándole inseguridad por partes iguales...

Pues bien, en tratados anteriores he relatado a la Masa que muchos routers (como por ejemplo, el TP-Link TL-WR941ND peronista) pueden ser dotados de un firmware libre que reemplaza al limitado programa interno original. He explicado como instalar dicho firmware libre OpenWRT en nuestro router y cómo configurarlo para hacer de él una potente máquina multifunción. ¡Lo hemos dicho! En vista de las mencionadas deficiencias con el sistema de asociación WPS, el firmware libre OpenWRT no usa esta característica, y ello significará que el botón WPS del router (nomenclado como "QSS" en los routers TP-Link) quedará "como cenicero de Pochoneta".

Sin embargo, gracias al Justicialismo y a nuestra doctrina de Software Libre, nos será bien posible utilizar el botón QSS para realizar otras acciones que nos plazcan, si sabemos configurarlo. Podremos programar el botón WPS/QSS para que nos sirva para apagar o encender el radioemisor de Wifi (y por lo tanto, de la red inalámbrica). Esto presenta algunas ventajas: podríamos dejar el router encendido 24x7 realizando tareas de enrutamiento por cable, servicio de correo, o un mini-servidor web, etc, pero decidir apagar el Wifi cuando no estamos en el hogar, o apagarlo de forma manual cuando nadie lo vaya a utilizar, o apagarlo automáticamente siguiendo un patrón de horarios.


Naturalmente que en primer lugar, debemos tener ya instalado y configurado OpenWRT en nuestro aparato (en este caso tomaré como referencia el TP-Link TL-WR941ND). Hemos de notar también que por la característica de esta tarea, nos convendrá conectarnos al router de manera cableada.

Acto seguido, será útil asegurarnos de que el botón QSS del router funciona, y conocer en particular cuál es su "nombre de hardware".

Para ello nos logueamos al router como se ha explicado en otros tratados (normalmente con ssh root@dirección_ip_del_router). Una vez dentro del router (el prompt podría indicar root@OpenWrt o similar) crearemos una carpeta donde irán las rutinas autoejecutables para los botones. Lo haremos ingresando en el router,:

mkdir -p /etc/hotplug.d/button

Ahora usaremos el editor peronista Vi para crear un archivo llamado buttons en dicho directorio, con el comando:

vi /etc/hotplug.d/button/buttons

Es importante conocer bien el funcionamiento del editor, para ser práctico a la hora de configurar el router. El editor Vi normalmente opera en modo revisión, por lo cual no podremos modificar ni agregar ningún texto. Para pasar al modo de inserción de texto hemos de presionar la tecla i. Solo entonces podremos escribir o pegar en la Terminal el texto que querramos. En este caso, hemos de pegar allí el siguiente código, pensado para evaluar el funcionamiento de los botones del router:

#!/bin/sh
# Script para que los botones reporten sus acciones.
logger el boton $BUTTON reporta accion $ACTION


Para guardar los cambios en el archivo recién editado en Vi, hemos de presionar Esc, y tipear el comando :wq que se encargará de grabar (w) y salir (q) del editor. Nos devolverá a la línea de comandos del router.

Conforme estemos en el prompt de nuestro enruteador, habremos de evaluar el botón correspondiente: en el caso del TP-Link TL-WR941ND presionamos el botón "QSS" que se encuentra en la derecha del panel frontal (es el único botón).
Hecho esto, en la terminal del router ejecutaremos el comando:

logread

...y nos devolverá un largo archivo, el cual al final debería indicarnos final algo como:

user.notice root: el boton wps reporta accion pressed
user.notice root: el boton wps reporta accion released


Esta información recabada es importante pues nos confirma el nombre de hardware del botón QSS, que en realidad es "wps", y los estadíos que puede tomar dicho botón de software: "pressed" (presionado) y "released" (soltado).

Sabiendo esto, agregaremos dos archivos nuevos para configurarlo. Unos es el archivo /etc/hotplug.d/button/00-button, que configura el funcionamiento general de los botones, y otro es el que especificará el funcionamiento particular el botón QSS. Para ello los agregamos con Vi:

vi /etc/hotplug.d/button/00-button

Una vez en el editor, presionamos i e insertamos el siguiente código:

#!/bin/sh
. /lib/functions.sh
do_button () {
        local button
        local action
        local handler
        local min
        local max
 
        config_get button $1 button
        config_get action $1 action
        config_get handler $1 handler
        config_get min $1 min
        config_get max $1 max
 
        [ "$ACTION" = "$action" -a "$BUTTON" = "$button" -a -n "$handler" ] && {
                [ -z "$min" -o -z "$max" ] && eval $handler
                [ -n "$min" -a -n "$max" ] && {
                        [ $min -le $SEEN -a $max -ge $SEEN ] && eval $handler
                }
        }
}
 
config_load system
config_foreach do_button button

Guardamos los cambios y salimos de Vi con Esc + :wq.


Acto seguido, agregaremos la especificación de funcionamiento del botón QSS en el fichero configuración correspondiente, que es /etc/config/system. Para ello ingresamos el comando:

vi /etc/config/system

Las especificaciones de funcionamiento del botón QSS/WPS será la de apagar el emisor Wifi y la red inalámbrica al presionarlo brevemente (durante menos de un segundo). Si lo presionamos entre uno y cinco segundos, encenderá el Wifi y la red inalámbrica. Considerando esto, en Vi pasamos al modo inserción con la tecla i, y al final del archivo /etc/config/system, habremos de agregarle las siguientes lineas de configuración:

# Agregado al archivo /etc/config/system 
# para configurar el botón OSS/WPS del Router TP-Link
# Esto apaga el emisor Wifi y la red inalámbrica
# al presionar el boton QSS/WPS menos de 1 segundo.
config button
    option button 'wps'
    option action 'released'
    option handler 'uci set wireless.@wifi-device[0].disabled=1 && wifi'
    option min '0'
    option max '1'
 

# Esto enciende el emisor Wifi y la red inalámbrica
# si se presiona el boton QSS/WPS entre 1 y 5 segundos.
config button
    option button 'wps'
    option action 'released'
    option handler 'uci set wireless.@wifi-device[0].disabled=0 && wifi'
    option min '1'
    option max '5'



...guardamos los cambios y salimos del editor Vi con la consabida combinación de teclas Esc + :wq

Para probar los cambios, debemos reiniciar el router con:

reboot

Una vez que el router se reinicie, debemos presionar y soltar el botón QSS durante menos de un segundo, y se apagará el Wifi (podremos comprobarlo al comprobar el apagado de la luz "WLAN" del panel frontal del router. Para reencender el Wifi, debemos presionar el botón QSS entre 1 y 5 segundos (se encenderá la luz WLAN y podremos conectarnos inalámbricamente).

Configurar el encendido / apagado del Wifi a un horario determinado:

Hemos mencionado la potencia y versatilidad que nos permiten los scripts de Cron para activar o desactivar el Wifi en horarios particulares. Por ejemplo, supongamos que según nuestros horarios de trabajo y sueño nos conviene que el Wifi se apague automáticamente a la 23:30PM y se encienda a diana, a las 6:30 AM durante los días de semana.

Para ello será necesario crear dos scripts ejecutables, uno para encender el Wifi y otro para apagarlo, y programar el cronómetro del router (cron). Todo ello lo haremos también desde la terminal del router. Una vez logueados en él, podremos ingresar:

vi /root/wifioff

...presionamos i y le pegamos el siguiente código

#!/bin/sh
# Apaga la WLAN (sin detener el dispositivo de emision radio0)
wifi down


Una vez guardado el fichero y salido del editor (Esc + :wq), utilizaremos el siguiente comando para crear el archivo de encendido:


vi /root/wifion

...y nuevamente usamos i para pegarle su código correspondiente que figura a continuación:

#!/bin/sh
# Enciende la WLAN (sin detener el dispositivo de emision radio0)
wifi on


Guardamos y salimos con Esc + :wq


Conforme hayamos ingresado ambos archivos, nos será imprescindible otorgarles permisos de ejecución para que dichos guiones puedan utilizarse. Lo haremos con el comando:

chmod +x wifionoff wifion wifioff

Ahora podremos programar el cronómetro de ejecución (cron). Esto se hace por medio de una tabla de texto (crontab), modificando el archivo /etc/crontabs/root. Para hacer la tabla crontab editamos el archivo referenciado usando Vi, con el comando:

vi /etc/crontabs/root

...presionamos i para configurar al siguiente texto al final del archivo:

# Ejecuta este script wifioff todos los dias
# a las 23:30pm
30 23 * * * /root/wifioff
# ejecuta el script wifion a las 06:30am
# a las 6:30am

30 06 * * * /root/wifion

...guardamos la tabla de cron recién creada con Esc + :wq y al volver al prompt del router, debemos ejecutar el comando reboot para que surta efecto. Veremos que con ello el Wifi se apagará automáticamente a las 23:30 y se encenderá a las 06:30. Si necesitásemos encenderlo durante ese horario, bien podríamos presionar el botón del aparato durante 1 y 5 segundos para activarlo.


Podría ser que en determinadas ocasiones necesitemos un script distinto, que  si el Wifi está encendido lo apague, y si está apagado, lo encienda. Para ello, debemos ingresar el siguiente script:

vi /root/wifionoff

y le pegamos el siguiente código:

#!/bin/sh
STATEFILE="/tmp/wifionoff.state"

if [ $# -eq 1 ]; then
  case $1 in
    "up"|"on")
      STATE=off
      ;;
    "down"|"off")
      STATE=on
      ;;
  esac
else
  if [ ! -e ${STATEFILE} ]; then
    STATE=on
  else
    . ${STATEFILE}
  fi
fi
if [ -z ${STATE} ]; then
  STATE=on
fi

if [ ${STATE} == "on" ]; then
  /sbin/wifi down
  STATE=off
else
  /sbin/wifi up
  STATE=on
fi

echo "STATE=${STATE}" > ${STATEFILE}


Guardamos y salimos del editor Vi con Esc + :wq.

miércoles, 6 de noviembre de 2013

¿Cómo instalo OpenWrt en un router TP-Link WR941ND con Ubuntu?

Durante su tercera presidencia, Juan Perón ajustó el rumbo que habría de tomar el movimiento, y lo hizo mediante la instalación del firmware libre OpenWrl para el router TP-Link WR941ND, y desde Ubuntu.

¡Vean señores!

No se trata de limitar las aspiraciones ni los pensamientos del hombre, Se trata de educar al hombre, y de darle el sentido de equilibrio sin el cual nosotros no vamos a ninguna parte.
Tenemos que volver a la Grecia de Pericles, donde en cada frontispicio había una leyenda que decía "Todo en su medida y armoniosamente". Nosotros somos un Movimiento de izquierda. Pero la izquierda que propugnamos es una izquierda justicialista por sobre todas las cosas, no es una izquierda comunista ni anáquica. Es una izquierda justicialista que quiere reaizar una comunidad dentro de la cual cada argentino tenga la posibilida de realizarse. No mas allá.

Aquí tenemos al Partido Comunista, que si se coloca dentro de la ley y acciona dentro de la ley, será amparado y defendido por nosotros Pero dentro de la ley. Cuidado con sacar los pies del plato, porque entonces tendremos el derecho de darle con todo.

No admitimos la guerrilla, porque yo conozco perfectamente el origen de esa guerrilla. Los partidos comunistas que en otros países han visto que dentro de la ley iban a su destrucción, han querido salirse de la ley para defenderse mejor. Eso no es posible. No es posible dentro de un pais donde la ley ha de imonerse. Porque la única manera de no ser esclavos, es ser esclavos de la ley, y eso nosotrros tendremos que imponerlo, de cualquier manera.

Lo mismo ha sucedido con el software integrado en los aparatos de consumo. Han querido salvarse empleando firmwares privativos. Este firmware no es otra cosa que un programa que controlan su funcionamiento y está firmemente guardado en una memoria pequeña ROM grabable eléctricamente (EEPROM) y adosada como una chip electrónico. Pero aún así, a ellos también les daremos con todo.

Tenemos OpenWrt, una imagen libre pensada para instalarse en routers compatibles dotados de arquitectura MIPS. Flasheando la memoria del router, podremos reemplazar el firmware propietario del router por uno libre y justicialista. Incluso podríamos usar la CPU del router para correr pequeñas aplicaciones a través de una consola terminal.

OpenWrt no es compatible con todos los routers, pero si con una apreciable cantidad. Solamente hemos de instalarlo si nuestro módem está positivamente comprobado y aceptado como posible receptor del mismo, pues si no, corremos el riesgo cierto de dejarlo inutilizado. Como la mayoría de los cambios ahora se harán a través de una consola de texto, recomiendo proceder a quienes - además de desear el máximo de libertad, administran el sistema - tienen los conocimientos necesarios para operar GNU con Linux desde la consola Terminal. Una vez que meditamos y tomamos conciencia de los peligros de la lucha y las responsabilidades que ello acarrea, ponemos manos a la obra.

En mi caso, hago uso de un router de tres antenas TP-Link WR-941ND. Asumiremos también que el aparato ya está configurado, funcionando y conectado a internet empleando su firmware original.

Conectaremos nuestro equipo con Ubuntu al router empleando un cable Ethernet común conectado a alguna de las fichas de color amarillo que éste tiene. De momento no utilizaremos Wifi ya que la radio del router se desactivará temporalmente.

Indudablemente, en primer lugar habremos de loguearnos a la interfaz web original de fábrica que se encuentra en la memoria ROM del router. Como sabemos, esta interfaz web nos es provista por la gente de TP-Link para que cualquier neófito pueda configurar el aparato desde una PC conectada al mismo y dotada de cualquier navegador de internet.

Desde el equipo que utilizaremos para configurar todo abrimos nuestro navegador favorito, y en el campo de "dirección URL" ingresaremos la dirección IP correspondiente al router. Normalmente la misma será:

192.168.0.1

Para poder entrar a la configuración del router, este nos solicitará autenticación por medio del usuario del router y su contraseña. Si no hemos cambiado los valores de fábrica, en ambos campos deberíamos poner "admin".

Se presentará la interfaz web que permite modificar las opciones del router. Lo necesario es asegurarnos de qué tipo de router y qué versión de hardware tenemos.


Para ello vamos a System Tools ("herramientas del sistema") y escojo Firmware Update ("actuaizar firmware").

La pantalla nos indicará la "versión de hardware" (ej. V3). Es importante pues no es raro que existan varias versiones del mismo router, y si bien la carcasa exterior puede ser igual entre todos ellos, su interior, microprocesador y memoria pueden ser diferentes y en algunos casos hasta incompatibles. En mi caso, veo que se trata del WR941ND versión V3.

Antes de ponernos a instalar el firmware libre no oficial, conviene siempre guardar los archivos de configuración del router, y también guardar una copia del firmware de fábrica, por las dudas. Con esto en vista, en la página de la Interfaz Web al apartado System Tools / Backup & Restore, y presionamos el botón Backup. Debemos indicarle dónde lo queremos guardar (podemos elegir nuestra carpeta de usuario). Esto nos creará un archivo llamado config.bin con las configuraciones propias: lo conservarán por las dudas de querer volver al firmware oficial más tarde. También iremos a la web oficial de TP-Link y descargamos el firmware oficial para la versión V3 o la que nos corresponda.

Ahora ya podremos descargar el firmware libre OpenWrt correspondiente a nuestra versión. Podremos hacernos con el desde la web de OpenWrt o descargarlo directamente  usando la Terminal. En este caso, abro una consola con Ctrl+Alt+T e ingreso los siguientes comando de organización:

sudo apt-get install openssh-client telnet scp

cd ~/Escritorio

wget https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/openwrt-15.05.1-ar71xx-generic-tl-wr941nd-v3-squashfs-factory.bin

En breves instantes se descargará en nuestro /Escritorio un archivo binario precompilado llamado openwrt-15.05.1-ar71xx-generic-tl-wr941nd-v3-squashfs-factory.bin. Indudablemente, se trata de la imagen libre de OpenWrt, pero compatibilizada especialmente para nuestro router TP-Link WR941ND V3.

Para sobreescribir el firmware original por el OpenWrl libre debemos ir nuevamente a la interfaz web de configuración del router, y en el apartado "System Tool" presionamos el botón "Browse" ("explorar"). Nos tocará indicar la ruta al Escritorio donde descargaron el archivo openwrt-15.05.1-ar71xx-generic-tl-wr941nd-v3-squashfs-factory.bin. Conforme lo hayamos encontrado, podremos oprimir el botón Aceptar. Surgirá un cuadro advirtiéndonos del peligro inherente de flashear una memoria ROM, las consecuencias perniciosas para el aparato si lo apagamos antes de que se produzca el refresco de la memoria, etc. Si estamos seguros, presionamos Ok, y se dará inicio al cambio revolucionario que el Pueblo anhela.

La carga del nuevo software libre será patente mediante una barra de progreso, hecho que se extenderá por aproximadamente dos minutos. Luego, el aparato ser reiniciará solo, proceso que dura otros 2 minutos mas.

No sería extraño que el router no de red al cabo de este procedimiento. Esperamos un par de minutos desconectamos la alimentación eléctrica del router. Conviene también apagar y volver a encender nuestro cablemódem. Esto hará que el mismo ponga a cero su conexión (también podríamos presionar el botón trasero WPS/Reset, introduciendo un clip en su orificio).


Al reiniciarse el router y el cablemódem, se pondrá a cero todas sus configuraciones del router. (Si hubiésemos desconectado todos los dispositivos, recordemos que en la entrada WAN va conectada al cablemódem, y las entradas LAN1 a LAN4 se enlazan el resto de los dispositivos).

La mecánica a operar es la siguiente: al conectarnos por primera vez debemos configurar una contraseña de administrador del router por medio de la consola insegura Telnet. Una vez establecida esta contraseña, ya podremos ingresar y configurar el resto de las opciones por el método de consola cifrada segura SSH.

la dirección IP original de nuestro router TP-Link era 192.168.0.1, mientras que la IP que toma por defecto el firmware libre OpenWrt es 192.168.1.1. Por ello emplearemos la Terminal para loguearnos, con el siguiente Comando de Organización:

telnet 192.168.1.1

Si todo va bien, debería presentarse la siguiente pantalla y el prompt root@OpenWrt, indicándonos que estamos logueados dentro del router, con todo el poder telemático que ello representa.

Acto seguido, escribimos el comando necesario para cambiar la contraseña:

passwd

Nos aparecerá el mensaje

Changing password for root
New Password:

Tipeamos "a ciegas" una contraseña que se nos ocurra para las sesiones de configuración del router. Debemos repetirla para no tener problemas. Una vez que el procedimiento esté completo, nos indicará con el mensaje "Password for Root changed by root" ("contraseña para root cambiada por el root"). Es importante saber que una vez configurada nuestra clave a través del sistema de consola insegura telnet, la misma se desactivará, de modo que a partir de este momento sólo podremos utilizar el método de logueo seguro cifrado SSH.

Salimos de la sesión telnet con:

exit

Y nos volvemos a loguear, pero usando SSH:

ssh root@OpenWrt

Tengamos presente que también podríamos usar la dirección IP que corresponda al router, la cual normalmente sería:

ssh root@192.168.1.1

Es natural que la primera vez nuestra terminal no pueda enlazarse al router hasta autenticar la clave cifrada del mismo. Esto nos será advertido con el siguiente mensaje:

The authenticity of host 'openwrt (192.168.1.1)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xxx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?

...debemos escribir:

yes

Así habremos establecido la conexión segura autenticada. De tener cablemódem con una conexión LAN DHCP, ya deberíamos contar internet compartida a través de la conexión cableada LAN, sin más trámite...


Configurar una conexión con usuario y contraseña (ADSL).
...Si en cambio, tuviésemos un servicio que requiere usuario y contraseña para conectarnos, tales como el servicio ADSL telefonico, redes WiMAX o similares, habremos de configurarlas primero según esos datos proporcionados por el proveedor. Para ello ingresamos los siguientes comandos:

uci set network.wan.proto=pppoe
uci set network.wan.username='usuario@proveedor'
uci set network.wan.password='contraseñadelISP'
uci commit network
ifup wan


Configurar un punto de acceso Wireless (WiFi) con OpenWrt
Lo más importante para hacer es ahora es activar y crear una nodo de conexión inalámbrica. Por defecto, la emisión Wifi estará desactivada a través de un archivo de configuración, y sólo funcionará la internet cableada. Para activar el Wifi, hemos de modificar el fichero de configuración /etc/config/wireless mediante el antediluviano y pequeño editor de texto vi, que ya está incorporado en la ROM del router.

Ingresaremos por tanto el siguiente Comando de Organización:

vi /etc/config/wireless

Esto nos abrirá el parco Vi, junto con el archivo de configuración de la red inalámbrica de OpenWrl. Originalmente, el mismo debería ser algo así:

config wifi-device  radio0
        option type     mac80211
        option channel  11
        option hwmode   11ng
        option path     'platform/ath9k'
        option htmode   HT20
        list ht_capab   SHORT-GI-40
        list ht_capab   DSSS_CCK-40
        # REMOVE THIS LINE TO ENABLE WIFI:
        option disabled 1

config wifi-iface
        option device   radio0
        option network  lan
        option mode     ap
        option ssid     OpenWrt
        option encryption none


Vi es un editor antiguo, pero su pequeñísimo tamaño lo hace adecuado para incluirlo en este tipo de tareas embebidas. Debemos saber que en Vi, a diferencia de Nano u otros editores, no podremos escribir hasta que no activemos el modo de inserción de texto. Esto lo haremos presionando la tecla "i". Luego podremos escribir.

Nuestro objetivo será modificar la linea "option disabled 1" (lo cual desactiva el Wifi) a "option disabled 0". En este ejemplo, también crearemos una serie de modificaciones para crear un nodo wifi bajo protocolo de encriptación "WPA2-PSK", con una frase contraseña. En este ejemplo que os he planteado, el archivo nos podría quedarnos así:

config wifi-device  radio0
    option type     mac80211
    option channel  auto
    option hwmode    11ng
    option path    'platform/ath9k'
    option htmode    HT40

    option txpower   20
    list ht_capab    SHORT-GI-40
    list ht_capab    DSSS_CCK-40
    # REMOVE THIS LINE TO ENABLE WIFI:
    option disabled 0

config wifi-iface
    option device   radio0
    option network  lan
    option mode     ap
    option ssid     '5x1 no va a quedar ninguno VIVA PERON'
    option key 'encripta todo por una patria justa libre y soberana'

    option encryption 'psk2+ccmp'


Naturalmente, en este archivo de configuración las options ssid representa al nombre de la red inalámbrica que se mostrará, mientras que encryption es la modalidad de encriptación deseada, y key es la contraseña de la red (es importante ponerlos entre 'tildes'). Las opciones completas de configuración Wifi pueden estudiarse en la wiki oficial.

Una vez que hayamos hecho la edición, debemos guardar el archivo en la memoria del router. Para ello en el editor Vi presionamos Esc para pasar al modo de comandos y luego ingresamos:

:w

...Y salimos del editor con:

:q

Ahora reiniciamos el router con el siguiente comando:

reboot

Luego de  reiniciado el router, ya debería estar emitiendo el identificador de red wifi "5x1 no va a quedar ninguno VIVA PERON". Deberíamos poder conectarnos al mismo cuando ingresemos la contraseña "encripta todo por una patria justa libre y soberana".


Cambiar el nombre del Host

Normalmente el nombre host es "OpenWrl", por lo cual para loguearnos tipeamos ssh root@OpenWrl. Si deseo cambiarlo por otro menos convencional, debo editar con Vi el archivo /etc/config/system.

En particular, busco la línea

option hostname 'OpenWrl'

... y podrán cambiarla por las que quieran (sin espacios ni caracteres especiales). Por ejemplo, podría facilitar mi memoria usando simplemente el nombre host de "router", todo en minúsculas. También podría utilizar otro nombre más difícil o cualquier convención que haga más cerrado todo.

option hostname 'router'

Guardamos el archivo y reiniciamos para que el cambio cobre efectividad, con el comando reboot. Tengamos en cuenta que ahora será necesario loguearnos remotamente con el comando:

ssh root@router


Actualizar el router

Para ello descargaremos a nuestro escritorio el fichero firmware de actualización correspondiente a nuestra versión de router. En este caso lo haremos con los comandos:

cd ~/Escritorio/

wget https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/openwrt-15.05.1-ar71xx-generic-tl-wr941nd-v3-squashfs-sysupgrade.bin

Esto descargará un archivo de actualización del sistema llamado . Lo copiaremos al router con:

scp ~/Escritorio/openwrt-15.05.1-ar71xx-generic-tl-wr941nd-v3-squashfs-sysupgrade.bin \root@192.168.1.1:/tmp/

Cuando lo solicite, ingresamos la contraseña del router, y se copiará el fichero. Acto seguido, nos logueamos al router. Si realizamos correctamente los pasos anteriores, usaremos el comando:

ssh root@router

Una vez que nos muestre la pantalla inicial, tipeamos

cd /tmp/

ls *.bin

Si el archivo figura correctamente, podremos utilizarlo para escribir en la memoria EEPROM. Lo haremos con el comando:

sysupgrade -v /tmp/openwrt-15.05.1-ar71xx-generic-tl-wr941nd-v3-squashfs-sysupgrade.bin

El proceso normalmente dura unos tres minutos, tras los cuales el router debería reiniciarse solo, y conservar las configuraciones realizadas. La pantalla de presentación cambiará y será la siguiente:


Configurar una IP fija para una impresora u otro dispositivo de red
OpenWrt normalmente asigna direcciones IP de manera dinámica, esto significa que todos los dispositivos normalmente recibirán una dirección IP aleatoria, dentro de un rango 192.168.0.100/250. Esto suele ser adecuado en aras de la seguridad, pero a veces puede complicar ciertas tareas.

Por ejemplo, si tuviésemos una impresora de red conectada al router, la misma siempre tendrá una dirección IP diferente toda vez que se encienda, con lo cual ciertos sistemas operativos privativos limitados (como Micro$oft Window$) podrían tener dificultad en detectarla y utilizarla.

Por tal motivo, en este caso nos convendrá asignarle al dispositivo (la placa de red que dota a la impresora) directamente una IP fija a través del router. El primer paso será averiguar cual es la dirección MAC de la impresora (o el dispositivo que querremos asignar).

Una forma sencilla es encender la impresora de red, conectarla al router a través de cable o wifi, y vér que IP le asigna - de momento - el router a su dirección MAC. Podremos hacerlo con el comando:

cat /tmp/dhcp.leases

El router nos devolverá una lista similar a esta:

xxxxxxxxxx 00:12:62:4f:bf:0f 192.168.1.120 impresorapirulo 01:00:15:99:6f:df:0f
xxxxxxxxxx 44:87:f2:35:1f:bf 192.168.1.110 compu mongo *
xxxxxxxxxx 00:4f:ef:31:ac:2c 102.168.1.137 compu aurelio *

xxxxxxxxxx 60:8f:5c:17:56:a2 192.168.1.124 celular101:60:8f:5c:17:56:a2


Básicamente debemos tomar nota de la dirección MAC (en purpura en el ejemplo). En este caso, la dirección MAC de la impresora es 00:12:62:4f:bf:0f.y de momento el router le ha asignado la dirección IP dinámica 192.168.1.120, Supongamos que queremos que siempre el router le asigne la dirección fija 192.168.1.105. Para ello editamos el archivo /etc/config/dhcp usando Vi para que le asigne una dirección fija a la impresora, siguiendo esos parámetros. Para ello ingresamos:

vi /etc/config/dhcp

Tipeamos el comando i para poder modificar el archivo, y agregamos el siguiente texto para cada dispositivo:

# IP fija para la impresora pirulo agregada por Perón 
config 'host'
        option ip       '192.168.1.120'
        option mac      '00:12:62:4f:bf:0f'
        option name     'impresora-pirulo'

Naturalmente, nosotros ingresamos los datos que nos correspondan a nuestro dispositivo particular. Luego grabamos presionando la tecla Esc e ingresando el comando :w y salimos del editor Vi con Esc e ingresando el comando :q.

Ahora podremos reiniciar el router con el comando reboot, y enceder la impresora conectada al router.

En este caso, ya nuestro router con OpenWrt al detectar un dispositivo cuya dirección MAC sea 00:12:62:4f:bf:0f (la de nuestra impresora), le asignará la IP fija 192.168.1.120). Podremos utilizar dicha IP para configurar la impresora en Window$, y ya no tendremos problemas.


Instalar y correr aplicaciones en el router
Tengamos en cuenta que el TP-Link WR-941NDv3 tiene un pequeño procesador ARM AR9132 de 400Mhz, y le podemos instalar programas a través de opkg, herramienta similar al dpkg de Ubuntu. Por ejemplo, si quisiéramos instalarle un programita para representar la carga a través del LED de encendido "Sys" podríasmo usar estos dos comandos:

opkg update

opkg install kmod-ledtrig-heartbeat

Esto descargará e instalará el pequeño paquete kmod-ledtrig-hearthbeat, que se encarga de mostrar a través de un "latido-parpadeo" de LEDs, la carga de la CPU. De esta manera podremos chequear visualmente a través de la simple velocidad del "latido" del la luz LED "Sys", la carga de la CPU del router.

Para asignar la función de "latido" al LED "Sys" del panel frontal del router, ingresamos los comandos:

cd /sys/devices/platform/leds-gpio/leds/tp-link:green:system
echo heartbeat > trigger

...y si quisiéramos volver todo al estado original y remover el paquete instalado usaríamos:

cd /sys/devices/platform/leds-gpio/leds/tp-link:green:system
echo default-on > trigger
opkg remove kmod-ledtrig-heartbeat

Las luces LED también se pueden asignar a funciones convencionales. Por ejemplo, si quisiéramos usar la luz LED de la función QSS para que ilustre el envío de datos WiFi, podríamos hacer:

cd /sys/devices/platform/leds-gpio/leds/tp-link:green:qss
echo phy0rx > trigger


...O si quisiéramos que se encienda cuando alguien se conecte al wifi:

cd /sys/devices/platform/leds-gpio/leds/tp-link:red:qss
echo phy0assoc > trigger

opkg cuenta con las aplicaciones del repositorio oficial de OpenWrt. Debemos consultar la web del mismo para conocerlas (se indican allí el tamaño que tienen, pues su "peso" es importante, al no tener mucho espacio libre.

En el caso del router TP-Link WR941ND V3, tienen una memoria EEPROM ("de masa") de 4 MB (de los cuales 3,3MB son ocupados por OpenWrt). Una memoria RAM de 32 MB es utilizada por OpenWrt en forma de "disco virtual borrable" y podremos acceder a ella desde la carpeta /tmp del router.

En la memoria ROM restante del router podríamos copiar indefinidamente pequeños archivitos, scripts, o información importante de solo texto.


¿Cómo cambio el color del Prompt de sesión en OpenWrt?
Podremos cambiar el color del prompt para que se ponga rojo y nos advierta que estamos en el Router, o como medida de diferenciación del prompto común. Para ello ingreso:

vi /etc/profile

Presiono la tecla i para ingresar en el modo de edición, y busco la línea:

export PS1='\u@\h:\w\$ '

...y la reemplazo por:

export PS1='\[\033[01;31m\]\u\[\033[0;35m\]@\[\033[01;33m\]\h\[\033[00;33m\]:\[\033[01;34m\]\w\[\033[00m\]$ '

Presiono Esc, y escribo el comando :wq para guardar los cambios y salir del editor Vi. Al reabrir la sesión SSH en el router, tendremos un prompt colorido.


¿Cómo puedo usar la consola web sencilla?En el caso del firmware OpenWrt para el router TP-Link WR-941NDv3, cuenta con la consola Web de configuración, la cual suele facilitar las cosas al neófito.


Para acceder a la consola web sencilla (llamada Luci) debo ingresar con un navegador (Firefox, Chromiun, etc) a la IP del router, normalmente 192.168.1.1.


¿Cómo puedo crear un repetidor wifi usando OpenWrt?

Si tenemos varios routers WR941ND con OpenWrt, podremos utilizarlos como router "maestro" y como router "repetidor" haciendo uso del modo WDS (wireless distribution system). Esto es así porque el WR941ND está dotado de un chipset Atheros compatible con dicha tecnología, y OpenWrt puede hacer uso de esta funcionalidad.

En este caso a fines de identificación, los llamaremos router MAESTRO y router REPETIDOR para identificar, siendo MAESTRO el que va conectado por cable a internet y ya tiene configurada la red Wifi, y REPETIDOR será el router esclavo, cuyo fin será extender el alcance de la señal.

En el router MAESTRO
Nos logueamos por ssh al router MAESTRO, y editamos con con vi el archivo /etc/config/wireless. Debemos agregarle la línea:

option wds 1

Conviene anotar los datos "type", "channel" y "country", pues habremos de incorporarlos luego al router REPETIDOR. Luego guardamos los cambios y salimos de vi. Para que los cambios sean efectivos, empleamos el comando:

uci commit wireless

En el router REPETIDOR
Ahora trabajaremos en el router REPETIDOR. Nos conectamos a el por cable y nos logueamos a él por ssh. Editamos con vi el archivo /etc/config/dhcp, buscando la sección "lan".  En dicha sección le agregamos la línea:

option ignore 1


Guardamos y salimos de Vi.

Luego editaremos el archivo /etc/config/network. En la sección "lan" de este archivo lo modificamos para que queden las siguientes líneas así:

  option proto 'dhcp'
  option hostname 'repetidorwifi'


Ahora nos encargaremos de editar el fichero /etc/config/wireless:

En la sección "radio0" del mismo debemos indicarle los datos de "type", "channel" y "country" para que coincidan con los que anotamos del archivo /etc/config/wireless del router MAESTRO.

En la sección "wifi-iface", la modificamos para que quede así:

  option device 'radio0'
  option network 'lan'
  option mode 'sta'
  option wds 1
  option ssid 'nombredelaredwifi'


Siendo nombredelaredwifi el identificador de la ren inalámbrica que está configurada en el router MAESTRO.

Una vez guardados los cambios en el archivo /etc/config/wireless del router REPETIDOR, lo reiniciamos con el comando :

reboot

Al reiniciarse, ya podremos conectarnos a él y utilizarlo como repetidor. Algo interesante de saber es que en el router REPETIDOR conviene desinstalar dhcp y el firewall, pues ya figuran en el router MAESTRO y él se encarga de procesar todo. Tener dos veces los mismos procesos no hace más que hacer todo más lento al ñudo.

Para eliminarlos, nos logueamos al router REPETIDOR, ahora con el comando:

ssh root@repetidorwifi

Y le ingresamos los siguientes Comandos de Organización:

opkg update
opkg --force-removal-of-dependent-packages dnsmasq iptables firewall kmod-ppp luci-proto-ppp
mv /etc/config/dhcp
/etc/config/dhcp.resguardo

Resetear OpenWtl
Si quisiñeramos resetear el router a su estado inicial luego de flashear la EEPROM con OpenWrl, debemos loguearnos y usar el comando:

firstboot


¿Cómo puedo restaurar el firmware original?

Si pese a las advertencias quisiera volver al firmware original privativo, puedo hacerlo, siempre y cuando el router funcione perfectamente y tengamos acceso por ssh a través de un equipo conectado por cable.

Para ello desde nuestra PC conectada por cable al router abrimos una terminal e instalamos en ella los programas necesarios:

sudo apt-get install unzip scp

Acto seguido descargamos el archivo del firmware privativo original para nuestro router en el Escritorio de la PC. En este caso, al ser el TP-Link WR941ND V3, como ya vimos, deberíamos ingresar:

cd ~/Escritorio/


wget http://www.tplink.com/Resources/software/TL-WR941ND_v3_120201.zip

unzip
TL-WR941ND_v3_120201.zip

scp ~/Escritorio/wr941nv3_en_3_13_9_up\(120201\).bin \root@192.168.1.1:/tmp/fw.bin


Esto copiará fácilmente el archivo wr941_en_3_13_9_9_up(120201).bin a la carpeta /tmp/ del router, renombrándolo como fw.bin (lo que nos evitará errores de tipeo).

Sólo nos queda loguearnos al mismo, revisar que fichero esté bien copiado, y reescribir nuevamente la EEPROM con el firmware original. Lo haremos con los siguientes Comandos:

ssh root@OpenWrt

cd /tmp/

ls -la *.bin


...nos debería listar el archivo fw.bin.

Y ahora lo flasheamos en la EEPROM con el siguiente Comando de Organización:

mtd -r write fw.bin firmware

El proceso lleva su tiempo, durante el cual no debe interrumpirse. Aparecerá el mensaje:

Unlocking firmware ...

Writing form fw.bin to firmware


Y al cabo de unos 2 minutos indicará:

Rebooting...

Luego de dejar pasar otros dos minutos, podremos nuevamente resetear el router y el cablemódem desconectándolos de la red eléctrica y volviéndolos a conecta.

Indudablemente, habremos de reconfigurar el router, contactándolo con nuestro navegador a la IP 192.168.0.1. Al solicitarnos usuario y contraseña, pondremos "admin", y ya tendremos acceso a la interfaz web original nuevamente. Para recuperar las configuraciones, usaremos el archivo config.bin que creamos al principio. En tal sentido en la interfaz web original vamos a System Tools / Backup & Restore, presionamos el botón Examinar e incicamos el archivo config.bin. Luego presionamos el botón Restore para que cargue la configuración antigua en el router. Tras un par de minutos el router se reseteará y se reconectará, y ya tendremos todo como lo teníamos originalmente.