CloudFlare es un proxy gratuito que puede servir para muchas cosas. Aunque también lo podemos usar sólo como gestor de nuestras DNS y así poder usar su API para actualizar la IP de nuestro servidor. Claro, siempre y cuando tengamos una IP dinámica. En caso contrario, todo esto es una perdida de tiempo.

Por cierto, que puedes usar CloudFlare como servidor de DNS y deshabilitar la opción de proxy. No es necesario usar ambas para el proposito de este artículo.

Pasos a seguir:

Obtener ZoneID:

Ejectutar en una terminal:

curl -X GET "https://api.cloudflare.com/client/v4/zones?name=dominio.ltd" \
  -H "X-Auth-Email: nuestro e-mail en CloudFlare" \
  -H "X-Auth-Key: nuestra Auth-Key en CloudFlare" \
  -H "Content-Type: application/json"
  • Donde pone dominio.ltd hay que insertar el dominio o subdominio del cual queremos hacer la consulta.

Del resultado obtenido, nos apuntamos el número que aparece en el registro id.

Obtener RecordID:

Ejecutar en una terminal:

curl -X GET "https://api.cloudflare.com/client/v4/zones/ZoneID/dns_records?name=dominio.ltd" \
  -H "X-Auth-Email: nuestro e-mail en CloudFlare" \
  -H "X-Auth-Key: nuestra Auth-Key en CloudFlare" \
  -H "Content-Type: application/json"
  • Donde pone ZoneID hay que insertar el número obtenido en el paso anterior.
  • Donde pone dominio.ltd hay que insertar el dominio o subdominio del cual queremos hacer la consulta.

Del resultado obtenido, nos apuntamos el número que aparece en el registro id.

Cambiar la ip en caso de ser necesario:

Ejecutaremos el script dindns.sh:

  1. Copiar el script.
  2. Dar permisos de ejecución chmod +x dindns.sh.
  3. Ejecutar el script ./dindns.sh.

A continuación tienes el script (dindns.sh). Aunque también está disponible en Gitlab.

#!/bin/sh

EMAIL=email
KEY=key
ZONE_ID=ZoneID
RECORD_ID=ZoneID
DOMAIN=domain.lt
TYPE=Record Type (example A)

FECHA=`date +"%d/%b/%Y %H:%M"`
NEW_IP=`dig +short myip.opendns.com @resolver1.opendns.com)`
CURRENT_IP=`host $DOMAIN | awk {'print $4'})`

if [ "$NEW_IP" = "$CURRENT_IP" ]
then
        echo "$FECHA > No hay cambios de IP ($CURRENT_IP)."
else
        echo "$FECHA > Cambio de IP Actual ($CURRENT_IP) a nueva IP ($NEW_IP)"
        curl -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
          -H "X-Auth-Email: $EMAIL" \
          -H "X-Auth-Key: $KEY" \
          -H "Content-Type: application/json" \
          --data "{\"type\":\"$TYPE\",\"name\":\"$DOMAIN\",\"content\":\"$NEW_IP\"}"
fi

Automatizar el script con crontab

  1. Abrir nuestro crontab, ejecutando crontab -e
  2. Añadir al final del todo lo siguiente:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/pi/bin
*/5 * * * * /home/pi/bin/dindns.sh >> /home/pi/bin/dindns.log

Cada cinco minutos, el cron ejecutará el script y escribirá la salida en el archivo dindns.log.

Si después de un tiempo hacemos un cat dindns.log. Nos mostrará lo siguiente:

10/may/2016 11:30 > No hay cambios de IP (176.85.226.237).
10/may/2016 11:35 > No hay cambios de IP (176.85.226.237).
10/may/2016 11:40 > No hay cambios de IP (176.85.226.237).
10/may/2016 11:45 > No hay cambios de IP (176.85.226.237).
10/may/2016 11:50 > No hay cambios de IP (176.85.226.237).
10/may/2016 11:55 > No hay cambios de IP (176.85.226.237).
10/may/2016 12:00 > No hay cambios de IP (176.85.226.237).

Pues eso es es todo. Si seguís éstas recomendaciones, tendrás un archivo llamado ~/bin/dindns.log. Aquí podrás revisar cuando se ha realizado un cambio de ip, y la nueva ip asignada.

También, podrías modificar el script, para que te mande un e-mail directamente, cada vez que se produzca un cambio de ip. Pero eso te lo dejo a tí, o tal vez para una futura entrada en el blog. Que en la entrada de hoy, me estoy quedando sinsitio.

¡Un saludo navegantes!