Script para actualizar IP (Dynamic DNS)

<?php
function getRealIP()
{
if (isset($_SERVER["HTTP_CLIENT_IP"]))
{
return $_SERVER["HTTP_CLIENT_IP"];
}
elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
return $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
{
return $_SERVER["HTTP_X_FORWARDED"];
}
elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
{
return $_SERVER["HTTP_FORWARDED_FOR"];
}
elseif (isset($_SERVER["HTTP_FORWARDED"]))
{
return $_SERVER["HTTP_FORWARDED"];
}
else
{
return $_SERVER["REMOTE_ADDR"];
}
}
echo getRealIP();
?>

En este caso tenemos un dominio registrado en OVH y queremos asociarle a una entrada DynHost la IP públic de nuestro router. Dentro de nuestra red tenemos un sistema Linux, bien puede ser el servidor o una máquina cualquiera (real o virtual) de nuestra red.

Veamos como es el script quie llamaremos “actualizaip.sh”

#!/bin/bash
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin

USERNAME="el_usuario"
PASSWORD="la_clave"
HOSTNAME="el_dominio_dynhost"
IP=`curl -s https://ip.es.click/ | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}'`
ABUSE_LOCK_FILE="/tmp/ovh.abuse"
LAST_IP_FILE="/tmp/lastip"
LAST_IP=`cat $LAST_IP_FILE`
#lockfile check, lockfile is only used if a abuse result appears
if [ -e "$ABUSE_LOCK_FILE" ]; then
 echo "DynHost abuse lockfile exisits: $ABUSE_LOCK_FILE" 
 exit 1
fi
#end of lockfile check
if [ "$IP" != "$LAST_IP" ]; then
 echo "Actual IP: $IP"
 RESULT=`curl -s "http://$USERNAME:[email protected]/nic/update?hostname=$HOSTNAME&myip=$IP&system=dyndns" | grep -o -E "good|nochg|abuse|badauth|notfqdn|nohost|abuse|dnserr|badsys"`
 echo "ovh.com nos dice que: $RESULT!"
else
 echo "IP es la misma no necesita cambiarse: $LAST_IP"
fi

if [ "$RESULT" == "abuse" ]; then
 echo "Demasiados cambios!"
 echo "Abuse lock!" > "$ABUSE_LOCK_FILE"
fi

echo "$IP" > "$LAST_IP_FILE"

Una vez realizado el script sólo queda programarlo para que cada “15 min.” compruebe la IP del router y en caso afirmativo lo cambie en nuestro registro de OVH, para ello utilizaremos el comando, también deberemos dar permisos de ejecución a nuestro script:

#chmod a+x actualizaip.sh
#crontab -e

… y programaremos la siguiente entrada donde con el editor “vi” haremos que el script se ejecute cada 15 minutos para comprobar la IP del router:

15 * * * * /bin/bash /root/actualizaip.sh