Skip to main content

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.

image.png

image.png

image.png