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:
Este es el resultado:
#!/bin/bashEste script podemos guardarlo en
#
# 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.*
/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.. Del script sólo deberíamos personalizar las variables:
*/15 * * * * /usr/local/TECNOQUIA/bin/renuevaIP >/dev/null 2>&1
DynDns_User, DynDns_Pwd, DynDns_Domain, DynDns_MX
con los datos de nuestra cuenta en dyndns.
No hay comentarios:
Publicar un comentario