sábado, 1 de septiembre de 2007

Script Simple para Reconectar ADSL

La necesidad:
Teléfonica CTC (Terra) cambia a diario la dirección IP para mi conexión ADSL (vivarachos!), lo que produce la pérdida de la conexión a Internet. En Windows, existen herramientas para volver a conectar en estos casos. En Linux podemos crear un script muy simple para lograr esto.

Materiales:
Una distribución Linux (IMO, OpenSUSE es lejos la mejor... [sobretodo con KDE]).
Una conexión a Internet utilizando ppp.
Permisos de superusuario (no obligatorio).

Primero, utilizaremos el editor de texto de nuestra elección para crear el script que llamaré reconnectAdsl.sh:

pico reconnectAdsl.sh

Y agregaremos las siguientes líneas:
#!/bin/bash
#
#Script que pregunta el estado de la conexión dsl y
#la reconecta si está off
#

estado=$(ifstatus dsl0 | grep interface)
off="interface dsl0 is down"
if [ "$estado" = "$off" ]; then
ifup dsl0
echo "Conectando..."
date > horaReconexión.txt
else
echo "Está conectado..."
fi


Guardamos los cambios y le damos permiso de ejecución:

chmod +x reconnectAdsl.sh

El funcionamiento del script es el siguiente: El comando ifstatus dsl0 | grep interface nos da como resultado el estado de la conexión ADSL (pueden ser dos "interface dsl0 is down" o "interface dsl0 is up"). Almacenamos el resultado en la variable "estado". Luego creamos una variable "off" que contiene el texto que corresponde a desconectado y comparamos las cadenas. Si el "estado" actual es igual al estado "off" (desconectado) entonces simplemente conectamos (ifup dsl0); de lo contrario damos el mensaje de que ya estamos conectados.

Podemos probar el script desconectando la conexión ADSL (ifdown dsl0, como root) y ejecutándolo.

Normalmente mi proveedor de Internet cambia mi IP a distintas horas que no puedo o no nos interesa predecir. Entonces lo que debemos hacer es que nuestro script se ejecute a intervalos razonables de tiempo. Para esto, como administrador (root) copiaremos nuestro script al directorio /etc/cron.hourly/ y de esta forma el script se ejecutará a cada hora.

Y eso es todo! Claro que podemos mejorar mucho el script (como siempre), por ejemplo yo he agregado la sentencia cat date > horaDeDesconexión.txt para saber a qué hora se produjo la desconexión y, si es en intervalos predecibles (digamos todos los días a las 4.00 AM), entonces mejoro mi script para se ejecute a esa hora solamente y no a cada hora.

Nota: El nombre de la conexión ADSL (dsl0 en mi caso) puede variar según tu distribución y el número de conexiones que tengas (es dsl0 con un cero, no una O).
Real Time Web Analytics