viernes, 18 de febrero de 2011

Dd-wrt en la fonera 2100

Estos son los pasos que he seguido para instalar dd-wrt en la fonera 2100, este firmware le añade muchas posibilidades al "router" de FON, como hacer funciones de punto de acceso, repetidor de señal, etc. Las instrucciones están sacadas en su mayor parte de la página oficial de dd-wrt.
El primer paso esta basado en un agujero de seguridad de la versión 0.7.1 r1 del firmware, por lo que hay que evitar conectar la fonera a Internet hasta que no llegue el momento, para que no se actualice a una versión más complicada de romper.

Paso 1: Hacer downgrading a 0.7.1 r1
Primero accedo a la fonera por wifi: La red aparece como MyPlace y la contraseña por defecto de la wifi será el número de serie de la fonera.
La dirección de la fonera será 192.168.10.1, podemos conectarnos por su interfaz web para ver la versión del Firmware que lleva, en mi caso es la 0.7.2 r1.

Voy a resetear la fonera al firmware de fábrica manteniendo pulsado el botón de reset (que tiene debajo) durante más de 30 segundos. Después de reiniciarse vuelvo a conectarme por wifi a MyPlace y compruebo que ahora la versión del firmware es 0.7.0 r4
A partir de esta versión ya puedo flashear desde la misma fonera el firmware 0.7.1 r1 que es el que tiene el agujero de seguridad que busco. Para flashearla me voy a la opción Advanced->Firmware Upgrade (el usuario/contraseña por defecto es admin/admin), selecciono el fichero que me he bajado y pulso el botón “Upgrade”.
Si espero que reinicie y me vuelvo a conectar, podré comprobar que tengo la versión que pretendía.

Paso 2: Habilitar conexión SSH
Me conecto a Internet y me descargo estos dos ficheros a alguna carpeta de mi PC (pulsando botón derecho del ratón sobre cada enlace y la opción "Guardar enlace como..."):

Paso1.html
Paso2.html 
Ahora vuelvo a conectarme a la fonera como antes (MyPlace) y abro por orden los ficheros que me he descargado anteriormente (haciendo doble clic sobre ellos desde la carpeta donde los guardé). Al abrir cada fichero, me saldrá un cuadro de texto con un comando y un botón de "Ejecutar". Se le da al botón y nos lleva a la página de la fonera. (Haré lo mismo con cada uno de los dos ficheros).

Después de esto ya puedo acceder a la fonera mediante ssh (yo para esto uso putty) con el usuario/contraseña root/admin y ejecuto los siguientes comandos para tener acceso permanente por ssh a la fonera:
mv /etc/init.d/dropbear /etc/init.d/S50dropbear
En el fichero /etc/firewall.user hay que quitar el comentario a estas líneas (lo edito con el vi):
# iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT
# iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT
 Para evitar la ejecución de software de actualización edito el siguiente fichero/bin/thinclient. Me voy a la última línea la comento y añado otra de forma que quede así:
#. /tmp/.thinclient.sh
cp /tmp/.thinclient.sh /tmp/thinclient-$(date '+%Y%m%d-%H%M')
Paso 3: Preparativos para flashear
Para flashear necesito los siguientes elementos:
  • Acceso a RedBoot de la fonera 
  • Preparar el PC para actualizar la fonera 
  • La versión del firmware que voy a instalar 
Instalación de RedBoot
Ya estamos en condiciones de empezar a flashear algún firmware que nos guste: Openwrt, Francofon, ddwrt, etc… Primero debo preparar el acceso a RedBoot, para ello conecto la fonera a Internet(conectándola por cable ethernet al router ADSL), me conecto a ella por ssh(vía wifi) y ejecuto los siguientes comandos:
cd /tmp
wget http://fonera.info/camicia/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7
reboot

Después de que reinicie, me vuelvo a conectar por ssh y ejecuto lo siguiente:
cd /tmp
wget http://fonera.info/camicia/out.hex
mtd -e "RedBoot config" write out.hex "RedBoot config"
reboot
Preparar el PC para actualizar la fonera
Para actualizar la fonera ahora necesito conectarla por cable ethernet al PC. Le tengo que poner al PC por ejemplo la siguiente configuración TCP/IP: dirección IP 192.168.1.166, máscara 255.255.255.0 y puerta de enlace 192.168.1.1

También necesito un servidor de TFTP. Yo me he descargado una versión que hay para Windows desde esta página. No necesita configuración, lo arranco y selecciono el interface de red que configuré antes (si tuviera más de uno) y listo.

También necesito algún cliente telnet para acceder al RedBoot, yo he vuelto a usar putty para esta conexión.

La versión que voy a poner yo es la última que existe en este momento de ddwrt, la v24 Final. Solo se necesita el fichero Linux.bin que pude descargar aquí. La pongo en la carpeta del servidor TFTP para que esté accesible.
Y ahora… a flashear

Paso 4: Flasheando dd-wrt
Con el servidor TFTP arrancado y el fichero Linux.bin en la carpeta del servidor TFTP, preparo putty con los siguientes parámetros, pero sin darle al botón de conectar:

Enchufo la fonera al PC por cable ethernet y le enchufo el transformador, dentro de los diez primeros segundos le doy al botón conectar de putty y cuando se abra la pantalla pulso intro hasta que me salga el prompt "RedBoot>". Y desde ahí tengo que reproducir la siguiente secuencia (en negrita lo que hay que escribir):
RedBoot> ip_address -l 192.168.1.254/24 -h 192.168.1.166
RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> load -r -b 0x80041000 linux.bin
Using default protocol (TFTP) Raw file loaded 0x80041000-0x80662fff, assumed entry at 0x80041000
RedBoot> fis create linux
Este último comando puede tardar un rato y parecer que no hace nada, a mi me tardo entre 10 y 15 minutos, pero en algunos sitios hablan de hasta 1 hora, al final saldrá lo siguiente:
... Erase from 0xa8030000-0xa8652000: ................................................................................................... ... Program from 0x80041000-0x80663000 at 0xa8030000: ...................................................................................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
 Después de esto habría que realizar una última secuencia, que consiste en reescribir el script de arranque, sería lo siguiente (en negrita lo que hay que escribir, cuando pregunta otros parámetros se dejan los que da por defecto):
RedBoot>> fconfig
Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec
Enter script, terminate with empty line
>> fis load -l linux
>> exec
>>
Boot script timeout (1000ms resolution): 10
Use BOOTP for network configuration: false
Gateway IP address:
Local IP address: 192.168.1.254
Local IP address mask: 255.255.255.0
Default server IP address:
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot>> reset
Y listo, al reiniciar la fonera me saldrá una nueva red wifi abierta "dd-wrt", me conecto y entro en la configuración HTTP a través de la IP 192.168.1.1 (el usuario/contraseña es root/admin). El interfaz que me ofrece es algo tan completo como esto:

8 comentarios:

  1. Muchasssss Gracias.

    Incluso hasta un torpe como yo he podido por fin ver a pleno funcionamiento el dd-wrt.

    Buen trabajo y mejor ayuda.

    ResponderEliminar
  2. Me uno las felicitaciones por un blog tan bueno.

    Yo lo he seguido hasta el punto:

    wget http://fonera.info/camicia/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma

    Al ejecutarlo da error:

    wget fonera.info: Unknown host

    No se que he hecho mal, podrías echarme un cable? (mi email: pedro.cerrato@gmail.com)

    Un saludo y gracias de nuevo

    ResponderEliminar
  3. Hola Pcerrato, perdona por el retraso de mi respuesta. Posiblemente ya hayas solucionado tu problema, pero lo comento por si alguien llega hasta aquí y se encuentra el mismo problema. El mensaje que te da es porque la fonera no tiene conexión a Internet, posiblemente porque no tengas activado el DHCP en tu router. Para darle salida basta con irse al interfaz web de la fonera y en el apartado Advanced->Internet Connection le pones una IP válida para tu router y en el DNS pones por ejemplo el de google para evitar problemas (8.8.8.8).
    Un saludo

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Funcionó perfectamente.

    Muchas gracias por este buen trabajo compartido.

    ResponderEliminar
  7. muchas gracias brother. A mi lo unico q no me funcion´fueron las 2 instruciones wget.
    En la wiki del programa http://www.dd-wrt.com/wiki/index.php/LaFonera_Software_Flashing
    se indica que en caso de que no funcione wget desde el repositorio indicado se pueden pasar los ficheros mediante un servidor web q tengas en local wget http//:tu_ip
    Antes de esto tendras q descargar los ficheros desde un lugar a tu computadora. Yo los encontre en esta web, estan los enlaces en la explicación.
    Lo demás todo bien!
    Gracias!

    ResponderEliminar
  8. se me olvido poner la web donde encontre los 2 archivos
    http://lunxer.se/install-gargyole-on-a-fonera-fon2100/

    ResponderEliminar