Actualización de los registros DNS de Cloudflare via API
Introducción
Dado que los nameservers han pasado de Dynu a Cloudflare, se necesita un script similar al que se usa para la parte DDNS de Dynu.
API de Cloudflare
La API de Cloudflare permite actualizar registros DNS con una simple llamada. Aquí lo que se busca es actualizar la IP asociada a ciertos registros, con un script que se ejecuta de manera periódica (cada 10 minutos):
# 1. Definición de variables
IP=$(curl -s ident.me)
REGISTROS=(<record_tipo_A_1> <record_tipo_A_2> <record_tipo_A_n)
ZONE_ID=<zone_ID>
CLOUDFLARE_API_TOKEN=<custom_token>
# 2. Bucle para actualizar array de records
for RECORD_ID in "${REGISTROS[@]}"; do
RESPONSE=$(curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-d "{\"content\": \"$IP\"}")
# Loguear cada actualización
echo "$(date '+%Y-%m-%d %H:%M:%S') - ID: $RECORD_ID - IP: $IP - Response: $RESPONSE" >> cloudflare_updates.txt
done
En primer lugar se definen las variables:
- IP: su valor es el resultado del comando
curl -s ident.me, que simplemente retorna la IP pública que la Pi ve en ese momento. - REGISTROS: un array con los IDs de los registros a los cuales se les quiere actualizar la IP asociada
- ZONE_ID: la ID de la zona en Cloudflare
- CLOUDFLARE_API_TOKEN: token creado específicamente con permisos de escritura sobre DNS, y zonas:
El bucle for recorre el array REGISTROS, y para cada ID ejecuta la llamada a la API actualizando únicamente la IP. También se loguea cada llamada a un fichero de texto para consultas y registros.


