jueves, 3 de diciembre de 2015

cómo aumentar la potencia de tu router jazztel

Aumentar la poténcia de transmisión de un router Jazztel. - desde casa.

 NO ME HAGO CARGO DE LO QUE LE PASE A TU ROUTER, PERO EN CUALQUIER CASO TENGO UNA SECCIÓN POR SI ALGO FALLARA.

IMPORTANTE: NUNCA INSTALAR UN FIRMWARE CON EL BOOTLOADER (CFE) INCORPORADO, TRAS HABERLO COMPILADO. A NO SER QUE SEPAS LO QUE HACES, PORQUE PODRÍA FALLAR.


reconocimiento del router

Mi router es un Comtrend AR-5387un que Jazztel instaló en mi $home.

El caso es que lleva un firmware instalado, al que accedo por web y puedo configurar, pero no consigo aumentar la poténcia de emisión para tener una mejor señal WiFi en el comedor.

He revisado todos los menús del panel web y no hay forma de aumentar la poténcia a más de 19dBm.

Entonces me sugerí intentar modificar el sistema del router para introducir un comando que la aumentase en cada reinicio.

El procesador que trae es un MIPS y el hardware parece ser un ensamblado de BroadCom.

Concretamente la versión BCM63xx.

He descargado el toolchain que trae el proyecto OpenWRT, en donde he conseguido un compilador y todas las dependencias.

He instalado el toolchain del OpenWRT (no recuerdo cómo), y ya puedo compilar programas.

De todas formas no lo necesitamos para este tutorial. 

Las utilidades para realizar este tutorial simplemente está probadas con la versión descrita anteriormente. Pero podría funcionar para otros routers, siempre que fuese para BroadCom.
 
consiguiendo el firmware instalado


Bueno pues esto es muy fácil. Tienes 2 opciones fáciles:

a) Pasar al siguiente paso y desde el repositorio tienes una versión para este router.
b) Entrar al panel http://192.168.1.1 y copiar la versión de la sección Information, y te vas a google para pegar la versión y añadir la keyword download o descarga.

Debería ser un fichero acabo en .bin

 
descargando herramientas

Desde linux o cualquier sistema con git (pero mucho mejor Linux), haces un clon de mi repo en github.com:

git clone https://github.com/aberope/jazztel-firmware-edit.git
  
desempaquetando el sistema de ficheros raíz

Bueno pues una vez tengamos el fichero .bin, lo que tenemos que hacer es desempaquetar el firmware. Para esto he creado una utilidad, a la que he llamado bcm_extract.

Se puede extraer un firmware BroadCom simplemente ejecutando el siguiente comando: 

./bcm_extract <nombre del fichero firmware>

Extraerá unos ficheros, y sacará un poco de información sobre el firmware.

Creará:

bcm.tag - la cabecera del firmware
kernel.hdr - la cabecera del kernel

kernel.img - la imágen del kernel (comprimida en LZMA)

rootfs.squashfs - el sistema de ficheros raíz (squashfs 4.0)


Asegúrate que no recibes ninguna información sobre el CFE (offset y length). Debería estar a 0 ambos campos en la salida del comando. 

Dentro del clon tenemos un directorio que se llama: squashfs-tools.
Es una copia modificada de la versión 4.3, que permite la extracción (unsquashfs) y la compilación (mksquashfs). Ambas herramientas están compiladas para ubuntu en el raíz del repo.

Para extraer basta con ejecutar: 

sudo ./unsquashfs rootfs.squashfs

acuérdate de borrar el directorio squashfs-root (que es mi progreso actual del raíz) para que el comando pueda extraer. Si no, debemos añadir el parámetro: -d squashfs-root2 (antes del nombre del fichero con el rootfs). 

Este paso debes ejecutarlo como root (o en mi cao así lo hago) porque extrae también los dispositivos del /dev en squashfs-root/dev, y no podrá crearlos con privilegios de usuario. (Luego tenemos que empaquetar ese directorio, y conviene que estén los dispositivos creados).

modificando el script de carga

Ahora editamos un script de inicio que trae este firmware:

sudo vim squashfs-root/etc/init.d/rcS 


Y añadimos una línea en el final de éste, según el siguiente formato:
wl txpwr 0-1496 (0 - 30 dBm). 

Por ejemplo: wl txpwr 100
 
re-creando el raíz


Debes usar la herramienta porque está modificada.

El rootfs del firmware debe tener como principal compresor el lzma pero si le pasamos un binwalk por ejemplo, o cualquier tool oficial, nos dirá que es gzip.

Esto se debe a que el órden de compresores debe alterarse, pero esto ya lo he hecho en mi herramienta.

Además usa un inicio de cabecera distinto.
 
./mksquashfs squashfs-root/ rootfs.squashfs -root-owned -b 65536 -info -noappend -comp lzma
 

empaquetando el firmware

Una vez tenemos el rootfs, procedemos a empaquetar el firmware de nuevo.
Para ésto he creado otra herramienta que se llama: bcm_pack.

Y sigue la siguiente secuencia de argumentos:
./bcm_pack bcm.tag kernel.hdr kernel.img rootfs.squashfs firmware.bin

Modificará todo lo necesario para utilizar otro rootfs. Y creará el fichero resultante: firmware.bin.
 
instalando

Accedemos a http://192.168.1.1, contraseña admin, password admin. (Si es por defecto y no se ha cambiado).

Vamos a  Management -> Update software

Examinamos el firmware.bin y le damos al botón.
  
mi router no funciona

Si la has liado en algún paso, o modificado mal la imágen del rootfs, o lo que sea:

cuando el router no puede cargar, se queda en constante reinicio. Si pulsamos el botón reset con un clip doblado, durante unos 15 segundos, seguramente se inicie el bootloader CFE (por eso dije de no meter imágenes con el CFE).  

Conectas tu PC por cable y configuras IPv4 forma estática:

IP: 192.168.1.23
máscara: 255.255.255.0
gateway/puerta enlace: 192.168.1.1
Dns: vacío

y saltas al panel de nuevo.

Debería aparecer una web donde solo te deja meter un firmware.

Elige el original o vuelve a intentarlo, lo importante es no sobreescribir el bootloader con el firwmare y que falle. Entonces deberemos usar un cable JTAG que es un poco raro de tener en casa, si no eres un gran freak.
        
agradecimientos

Thanks to the OpenWRT project and to the GPL community.