IP dinámica en casa y DynDNS

Hace tiempo que tengo un script para comprobar la dirección IP dinámica que me reparte mi proveedor de internet y actualizar el registro dyndns, con el fin de poder acceder al servidor de casa, cuando estoy fuera. Hace unas semanas estaba notando ya que no siempre está disponible showmyip, y ayer me decidí a cambiar el script y reescribirlo para quitarle toda la parte XML, dejándolo puramente en Bash.
Este es el resultado:
#!/bin/bash
#
# Este script permite renovar la direccion IP de mi servidor en
# dyndns, lanzando una consulta HHTP a servicios web para
# comprobar la IP que tenemos.
#

# ---------------------------------------------------------

# Configuracion de DynDns
DynDns_User=LOGIN_DE_USUARIO_DYNDNS
DynDns_Pwd=PASSWD_DE_USUARIO_DYNDNS
DynDns_Domain=NOMBRE_DOMINIO
DynDns_MX=REGISTRO_MX

# ---------------------------------------------------------

# Definir el directorio donde iremos dejando logs, IPs, etc
BaseDir=/var/log/dynIP
if [ ! -w $BaseDir ]
then
echo "No puedo escribir en [$BaseDir]. Asegurese de que existe y que tiene permisos de escritura" >&2
exit 1
fi

# Ficheros temporales
tmpFile=/tmp/renuevaIP-$$-$RANDOM

# Fichero de Log con las renovaciones
logFile=$BaseDir/renovaciones.log

# Fichero con la ultima IP conocida
ipFile=$BaseDir/lastIP

# Direccion IP inicial
MyIP=""

# Asegurarnos de que cualquiera podrá escribir en los ficheros...
chmod a+w $logFile $ipFile 2>/dev/null >&2

# --- FUNCIONES -------------------------------------------
download () {
/usr/bin/wget \
-O $tmpFile.dwn \
-U "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3) \
Gecko/20030430 Debian/1.3-5" \
"http://$1" >/dev/null 2>&1
return $?
}


# --- MAIN ------------------------------------------------

# Buscar la IP de Internet
if download 'www.whatismyip.com/automation/n09230945.asp'
then
MyIP=$(cat $tmpFile.dwn)
elif download 'checkip.dyndns.org'
then
MyIP=$(cat $tmpFile.dwn \
| perl -ne 'print $1 if ($_=~ m/Current IP Address:\s([\d|\.]+)/);')
elif download 'www.formyip.com'
then
MyIP=$(grep 'Your IP' $tmpFile.dwn \
| head -1 \
| perl -ne 'print $1 if ($_=~ m/Your IP is\s([\d|\.]+)/);')
elif download 'whatsmyip.org'
then
MyIP=$(grep 'Your IP' $tmpFile.dwn \
| head -1 \
| perl -ne 'print $1 if ($_=~ m/Your IP is\s([\d|\.]+)/);')
else
exit 0
fi

# Obtener la ultima IP
OldIP=`cat $ipFile 2>/dev/null`

if [ "$MyIP" != "$OldIP" ] && [ "$MyIP" != "" ]
then
if download "$DynDns_User:$DynDns_Pwd@members.dyndns.org/nic/update?system=dyndns&hostname=$DynDns_Domain&myip=$MyIP&wildcard=ON&mx=$DynDns_MX&backmx=NO&offline=NO"
then
echo "[`date "+%d/%h/%y %H:%M:%S"`] Resultado: `cat $tmpFile.dwn` " >> $logFile
echo -n "$MyIP" > $ipFile
fi
fi

# Borrar todos los ficheros temporales creados
rm -f $tmpFile.*
Este script podemos guardarlo en /usr/local/TECNOQUIA/bin/renuevaIP y darle permisos de ejecución. Luego deberíamos crear el directorio /var/log/dynIP con permisos 777 y añadir al crontab del root lo siguiente:
# Renovacion de IP en DYNDNS, cada 15 minutos, si procede.
*/15 * * * * /usr/local/TECNOQUIA/bin/renuevaIP >/dev/null 2>&1
. Del script sólo deberíamos personalizar las variables: DynDns_User, DynDns_Pwd, DynDns_Domain, DynDns_MX con los datos de nuestra cuenta en dyndns.

No hay comentarios: