<?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