Skip to content

Instantly share code, notes, and snippets.

@gfinol
Last active February 24, 2019 21:47
Show Gist options
  • Save gfinol/8f0b0e478e0eb1fca935463c00d2edd5 to your computer and use it in GitHub Desktop.
Save gfinol/8f0b0e478e0eb1fca935463c00d2edd5 to your computer and use it in GitHub Desktop.
Acuatilzar IP dinámica usando CloudFlare API V4 en Raspbian

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. Descargar el script.
  2. Dar permisos de ejecución chmod +x dindns.sh.
  3. Ejecutar el script ./dindns.sh.

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).
#!/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=`curl ipinfo.io/ip -s`
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment