ADSL portátil para OpenWrtCualquier openwrt instalado en un router con puerto USB es susceptible de tener ADSL ya que existen modems ADSL/USB para los cuales openwrt tiene sus respectivos drivers y firmwares.
En esta primera parte voy a tratar de explicar cómo incorporar la funcionalidad de ADSL con modems del tipo Eagle (los comtrend CT350, CT351, o el Sagem Fast 800 de Wanadoo, por ejemplo).
Si hemos compilado nosotros mismos nuestro openwrt, encontraremos los ficheros de firmware del modem en el directorio /dl/ en el archivo linux-firmware-xxxx-tar.bz2 (xxxx es variable) y dentro de ese archivo en el directorio ueagle-atm, pero para más comodidad los he subido a internet y los podéis encontrar en este enlace :
http://www.mediafire.com/download/h8hd15fc11v0pbk/ueagle-atm-firmware.zipHemos de copiar el firmware del modem eagle (o si hemos bajado el fichero zip, entonces su contenido descomprimido) en el directorio /lib/firmware/ueagle-atm del router.
Ahora
sacamos una copia del archivo CMVepES.bin en CMVep.bin.v2 para que al cargar no se quede parado. Dirá que el archivo está corrupto pero buscará una versión más antigua y funcionará. Si no hacemos esto no funcionará el modem.
Nos aseguramos de instalar los siguientes paquetes:
linux-atm
kmod-usb-atm-ueagle
kmod-atm
kmod-usb-atm
ppp-mod-pppoa
kmod-pppoa
br2684ctl
br2684ctl es opcional si vamos a utilizar PPPoAtm, pero si vamos a utilizar puentes sobre PPPoE entonces sí nos hará falta. No pasa nada por instalarlo si luego no lo usamos.
Con las opciones de carga por defecto del modem me he encontrado que no funciona correctamente, teniendo que cargar el módulo del kernel con la opción altsetting=0, así que vamos a hacer unos scripts de carga del firmware del modem con los parámetros bien configurados.
En el router creamos un script en /etc/eagle-atm.bat cuyo cometido es cargar el firmware con las opciones correctas cuando se lo digamos:
vi /etc/eagle-atm.bat
y dentro escribimos:
echo EAGLE MODEM MODULE LOAD FIX - Start
sleep 6
rmmod ueagle-atm
sleep 5
insmod ueagle-atm altsetting=0
sleep 3
ifup USB_ADSL
echo EAGLE MODEM MODULE LOAD FIX - Done
Grabamos y damos permisos de ejecución:
chmod +x /etc/eagle-atm.bat
En System -> Startup, habilitar la tarea br2684ctl
En System -> Startup, agregar en el cuadro "Local Startup" y antes del exit 0
/etc/eagle-atm.bat &
Con lo anterior cargamos el firmware cuando arrancamos el router.
Enchufamos el modem por USB y reiniciamos el router.
Vamos a crear una conexión de prueba a Jazztel:
Después de reiniciar, entramos a LuCi y creamos un nuevo interfaz en Network -> Interfaces
Nombre: USB_ADSL
Protocol: PPPoATM
PPPoA Encapsulation: VC-MUX
ATM device number: 0
VCI: 35
VPI: 8
PAP/CHAP username: <nombre usuario>
PAP/CHAP password: <contraseña>
En la pestaña Firewall Settings
hay que marcar wan/wan6 para activar las reglas del firewall. Al darle a aceptar veremos que nos crea la interfaz y que en el cuadro de interfaces, justo debajo del nombre que le hemos dado, aparece el nombre de referencia que ha creado openwrt para dicho interfaz: pppoa-USB_ADSL
Con ese nombre que ha creado openwrt, vamos a crear otro script que vigile cada cierto tiempo que el ADSL no se haya caído y se haya recargado con los parámetros por defecto. Si no detectamos la interfaz, disparamos la carga del parche que hemos diseñado antes. Me he encontrado que a veces el ping falla aleatoriamente sin que la interfaz haya dejado de funcionar, así que me aseguro de que de verdad se ha perdido la conexión repitiendo 4 veces la prueba de ping antes de relevantar la interfaz ADSL:
vi /etc/check-adsl.bat
y dentro tecleamos
#!/bin/sh
if ! ping -q -c 1 -W 10 -I pppoa-USB_ADSL www.google.com > /dev/null; then
if ! ping -q -c 1 -W 10 -I pppoa-USB_ADSL www.google.com > /dev/null; then
if ! ping -q -c 1 -W 10 -I pppoa-USB_ADSL www.google.com > /dev/null; then
if ! ping -q -c 1 -W 10 -I pppoa-USB_ADSL www.google.com > /dev/null; then
(/etc/eagle-atm.bat; ifup USB_ADSL;) &
fi
fi
fi
fi
Grabamos y damos permisos de ejecución:
chmod +x /etc/check-adsl.bat
Ahora vamos a hacer que cada cierto tiempo se nos compruebe si tenemos línea o no para levantar de nuevo el interfaz ADSL:
En System -> Scheduled Tasks agregamos la siguiente tarea para comprobar el adsl cada 10 minutos:
*/10 * * * * /etc/check-adsl.bat
Ahora también incorporaremos todos los ficheros nuevos y los ficheros que hemos creado al conjunto de ficheros que se graban cuando salvamos la configuración actual del router.
En System -> Backup/Flash Firmware -> Configuration agregamos:
/etc/eagle-atm.bat
/etc/check-adsl.bat
/etc/crontabs/root
/lib/firmware/ueagle-atm/930-fpga.bin
/lib/firmware/ueagle-atm/CMVeiWO.bin
/lib/firmware/ueagle-atm/CMVepFR.bin
/lib/firmware/ueagle-atm/DSP4p.bin
/lib/firmware/ueagle-atm/adi930.fw
/lib/firmware/ueagle-atm/CMV4p.bin.v2
/lib/firmware/ueagle-atm/CMVep.bin
/lib/firmware/ueagle-atm/CMVep.bin.v2
/lib/firmware/ueagle-atm/CMVepFR04.bin
/lib/firmware/ueagle-atm/DSP9i.bin
/lib/firmware/ueagle-atm/CMV9i.bin
/lib/firmware/ueagle-atm/CMVep.bin.v2
/lib/firmware/ueagle-atm/CMVepFR10.bin
/lib/firmware/ueagle-atm/DSP9p.bin
/lib/firmware/ueagle-atm/CMV9p.bin
/lib/firmware/ueagle-atm/CMVepES.bin
/lib/firmware/ueagle-atm/CMVepIT.bin
/lib/firmware/ueagle-atm/DSPei.bin
/lib/firmware/ueagle-atm/CMVei.bin
/lib/firmware/ueagle-atm/CMVepES03.bin
/lib/firmware/ueagle-atm/CMVepWO.bin
/lib/firmware/ueagle-atm/DSPep.bin
/lib/firmware/ueagle-atm/eagleI.fw
/lib/firmware/ueagle-atm/eagleII.fw
/lib/firmware/ueagle-atm/eagleIII.fw
/lib/firmware/ueagle-atm/eagleIV.fw
Ahora si queremos, podemos guardar nuestra configuración para utilizarla más adelante en System -> Backup/Flash Firmware -> Actions -> Generate Archive.
Enviar email cuando nos cambia la IP del ADSLSi además queremos que cuando cambie la IP del ADSL nos envíe un mail a nuestro correo, podemos hacerlo con msmtp y creando un script para que nos lo haga.
Instalamos el paquete msmtp.
Editamos la configuración del fichero de configuración:
vi /etc/msmtprc
e incorporamos nuestros datos: (esto es un ejemplo de cuenta de correo con 1and1 y nombre default)
# Example for a system wide configuration file
# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail.
account default
# The SMTP smarthost.
host smtp.1and1.es
port 587
auth on
auto_from off
maildomain xxx@ab.de
from xxx@ab.de
user usuario@1and1.es
password contraseña
tls on
tls_starttls on
tls_certcheck off
logfile /tmp/msmtp.log
xxx@ab.de es nuestra cuenta de correo.
usuario@1and1.es es nuestro usuario de correo (en 1and1 suele coincidir con el email, pero otros proveedores de correo tienen el nombre de usuario distinto a la cuenta de correo).
contraseña es nuestra contraseña de usuario de la cuenta de correo.
Ahora agregamos un fichero para controlar los cambios de IP y enviarnos un correo si la IP cambia (debemos usar el nombre de referencia que nos dio openwrt a nuestro interfaz):
vi /etc/checkip.bat
y tecleamos:
#/bin/sh
IPADDRESS=$(ifconfig | grep pppoa-USB_ADSL -A 1 | grep "inet addr" | awk -F" " '{ print $2 }' | awk -F":" '{ print $2 }')
echo "To: aquienlomandamos@ab.de" > /tmp/mail.txt
echo "From: xxx@ab.de" >> /tmp/mail.txt
echo "Subject: Router IP change - ${IPADDRESS}" >> /tmp/mail.txt
echo "" >> /tmp/mail.txt
if [ -f "/tmp/.current_ip" ]
then
if [[ "${IPADDRESS}" != "$(cat /tmp/.current_ip)" ]]
then
echo ${IPADDRESS} >|/tmp/.current_ip
cat /tmp/mail.txt /tmp/.current_ip | sendmail -t -a default
fi
else
echo ${IPADDRESS} >|/tmp/.current_ip
cat /tmp/mail.txt /tmp/.current_ip | sendmail -t -a default
fi
aquienlomandamos@ab.de es la cuenta de correo a donde mandamos el email.
xxx@ab.de es nuestra cuenta de correo desde la que mandamos el correo.
Grabamos y damos permisos de ejecución:
chmod +x /etc/checkip.bat
En System -> Scheduled Tasks agregamos la siguiente tarea para comprobar la IP cada 5 minutos:
*/5 * * * * /etc/checkip.bat
Ahora en System -> Backup/Flash Firmware -> Configuration agregamos los ficheros que acabamos de crear/modificar para que nos saque la copia de la configuración que acabamos de hacer:
/etc/checkip.bat
/etc/msmtprc
Y si queremos podemos volver a guardar nuestra configuración para utilizarla más adelante en System -> Backup/Flash Firmware -> Actions -> Generate Archive.