Skip to content

Todo para WordPress, el desarrollo web — y mucho más

🚀 Cómo configurar DNS dinámico a través de Cloudflare en Raspberry Pi

🚀 Cómo configurar DNS dinámico a través de Cloudflare en Raspberry Pi

Su servidor doméstico en Raspberry Pi funciona 24/7, pero su ISP cambia la IP externa cada día. Tener que buscar manualmente la nueva dirección es un trabajo de arqueólogo. Y DynDNS y No-IP lo bombardean con correos: «inicie sesión una vez al mes o desactivaremos su cuenta gratuita».

Resulta que Cloudflare puede funcionar como DNS dinámico, sin correos promocionales, sin límites de frecuencia de actualización y sin subdominios de terceros. ¿Ya tiene un dominio en Cloudflare? Entonces solo necesita un token de API y un script bash en la Raspberry Pi. En media hora configurará un esquema que actualiza automáticamente el registro A cada vez que cambia la IP.

Y si no solo quiere «entrar a la consola», sino desplegar un sitio de desarrollo completo, incluso con WordPress, esta configuración se convierte en la base: obtiene acceso a su servidor desde cualquier parte del mundo mediante un subdominio agradable como home.example.com.

💡 Resumen rápido:

  • Paso 1: Cree un registro A en el panel DNS de Cloudflare con la IP de prueba 0.0.0.0
  • Paso 2: Obtenga un token de API (no una clave global, los tokens son más seguros y revocables con un clic)
  • Paso 3: Ejecute un script bash que consulte la IP actual y la envíe a la API de Cloudflare
  • Paso 4: Configure una tarea cron y olvídese de las actualizaciones manuales para siempre

Qué necesitará

  • Un dominio añadido a Cloudflare y gestionado a través de su DNS
  • Raspberry Pi (cualquier modelo funciona, Pi 3, Pi 4, Pi Zero 2 W) con Raspbian o Raspberry Pi OS
  • IP local estática para la Raspberry Pi (configurada en la interfaz gráfica del SO o mediante el router)
  • Acceso por terminal a la Pi mediante SSH o directamente

Qué servicios exactamente aloje en la Raspberry Pi y cómo reenvíe los puertos en el router es un tema aparte que escapa a este tutorial. El esquema funciona de forma idéntica ya sea para un servidor web con WordPress, acceso VNC o una cámara de vigilancia.

1. Crear un registro A para su servidor doméstico

Elija un subdominio, se convertirá en su punto de entrada permanente. Yo uso home, pero puede elegir cualquiera: dev, lab, cam.

  • Vaya al panel de Cloudflare y seleccione su dominio
  • Navegue a la pestaña DNS
  • Haga clic en Añadir registro, escriba A
  • En el campo Nombre introduzca el subdominio (por ejemplo, home)
  • En el campo **Dirección **IPv4 especifique 0.0.0.0, temporalmente, para probar el script más tarde
  • Deje el Estado del proxy desactivado (nube gris), el almacenamiento en caché y el proxy no son necesarios para DDNS
Registro A con IP de prueba 0.0.0.0 en Cloudflare DNS

El registro está listo. Ahora obtengamos la clave de acceso a la API.

2. Obtener el token de API de Cloudflare

Antes todas las guías sugerían la clave global de API, que da acceso completo a todos los dominios de la cuenta. Esto es peligroso: si la clave se filtra, se filtra todo. Ahora Cloudflare recomienda tokens de API con permisos granulares. Un token puede limitarse a un dominio y acción específicos y, en caso de compromiso, revocarse con un clic.

  • En el panel de Cloudflare vaya a: Mi perfilTokens de API
  • Haga clic en Crear token
  • Seleccione la plantilla Editar zona DNS (o cree una personalizada)
  • En la sección Recursos de zona especifique el dominio concreto para el que está configurando DDNS
  • Haga clic en Continuar al resumenCrear token
  • Copie el token, se muestra solo una vez

El token tiene el aspecto de una cadena larga que empieza por cfut_. Guárdelo en un lugar seguro, el script en la Raspberry Pi lo necesitará en un minuto.

3. Script de actualización automática en la Raspberry Pi

Conéctese a la Raspberry Pi mediante SSH o abra la terminal. Vamos a crear una carpeta para el script:

1mkdir -p ~/cf && cd ~/cf

Ahora, el script en sí. Cree el archivo cloudflare-ddns.sh:

1nano ~/cf/cloudflare-ddns.sh

Copie el siguiente código en él:

1#!/bin/bash
2
3 ## Settings (replace with yours)
4AUTH_EMAIL="[email protected]"
5API_TOKEN="cfut_your_token"
6ZONE_NAME="example.com"
7RECORD_NAME="home.example.com"
8
9 ## Get current public IP
10CURRENT_IP=$(curl -s https://api.ipify.org)
11
12 ## Get Zone ID
13ZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE_NAME" \
14 -H "Authorization: Bearer $API_TOKEN" \
15 -H "Content-Type: application/json" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
16
17 ## Get Record ID and current record IP
18RECORD=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \
19 -H "Authorization: Bearer $API_TOKEN" \
20 -H "Content-Type: application/json")
21
22RECORD_ID=$(echo "$RECORD" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
23DNS_IP=$(echo "$RECORD" | grep -o '"content":"[^"]*"' | head -1 | cut -d'"' -f4)
24
25 ## Update record if IP changed
26if [ "$CURRENT_IP" != "$DNS_IP" ]; then
27 UPDATE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
28 -H "Authorization: Bearer $API_TOKEN" \
29 -H "Content-Type: application/json" \
30 --data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":120}")
31
32 echo "$(date): IP changed from $DNS_IP to $CURRENT_IP — updated" >> ~/cf/cloudflare-ddns.log
33else
34 echo "$(date): IP unchanged ($CURRENT_IP)" >> ~/cf/cloudflare-ddns.log
35fi

Reemplace las cuatro variables del bloque «Settings» con sus valores reales. Email, el mismo que usa para iniciar sesión en Cloudflare. Token, el que copió en el paso 2. Zone name, su dominio sin http://. Record name, el subdominio completo.

Guarde el archivo (Ctrl+O, Enter, Ctrl+X en nano) y hágalo ejecutable:

1chmod +x ~/cf/cloudflare-ddns.sh

Ejecútelo manualmente para verificar:

1~/cf/cloudflare-ddns.sh

Si todo está configurado correctamente, vaya al panel DNS de Cloudflare; la dirección IP del registro A debería cambiar de 0.0.0.0 a su IP pública real. El registro se escribe en ~/cf/cloudflare-ddns.log, revíselo si algo sale mal.

4. Automatización mediante cron

El lanzamiento manual es solo para pruebas. A partir de aquí, cron toma el control.

1crontab -e

Si el sistema le pide elegir un editor, seleccione nano (generalmente la opción 2, es el más simple). Añada una línea al final del archivo:

10 */6 * * * /bin/bash /home/pi/cf/cloudflare-ddns.sh

Esta entrada ejecuta el script cada 6 horas. Incluso si el ISP cambia la IP una vez cada pocos meses, una ventana de seis horas es un compromiso razonable entre la puntualidad y la carga sobre la API.

Si desea mayor frecuencia, reemplácela por */30 * * * * (cada 30 minutos). Pero recuerde: el límite gratuito de la API de Cloudflare es de 1200 solicitudes por minuto, así que incluso las llamadas cada minuto no son preocupantes para un solo dominio.

Guarde (Ctrl+X, Y, Enter). Cron detectará los cambios automáticamente, no necesita reiniciar el servicio. Ayuda para descifrar los asteriscos en crontab.guru.

Guía breve en video sobre este mismo tema, de NetworkChuck, con demostración en una Raspberry Pi real y explicación de cada paso:

Qué hacer si el script no encontró el Zone ID o el Record ID

A veces la API no devuelve los identificadores automáticamente, sobre todo si la cuenta tiene muchos dominios o registros con nombres similares. En ese caso, obténgalos manualmente:

  • Vaya al panel de Cloudflare, seleccione el dominio, pestaña DNS
  • Abra las herramientas de desarrollo del navegador (F12 → pestaña Network → subpestaña XHR)
  • Haga clic en el ícono de nube junto a su registro A; aparecerá una solicitud a la API en el panel de red
  • Haga clic derecho sobre ella → CopyCopy link address (Chrome) o Copy URL (Firefox)
  • En el enlace copiado, busque la parte después de zones/, ese es el Zone ID; después de dns_records/, el Record ID

Sustitúyalos en las variables ZONE_ID y RECORD_ID del script, y todo funcionará. Asegúrese de que la nube en el panel DNS esté gris (proxy desactivado): Cloudflare no debe cachear la IP para DDNS.

⁉️🤔 Preguntas frecuentes

¿Es obligatorio usar un token de API en lugar de la clave global?

La clave global aún funciona, pero el token es la opción moderna y segura. Un token puede limitarse a un solo dominio y permisos de edición DNS. La clave global da acceso a toda la cuenta. Si el script o la Pi se ven comprometidos, usted simplemente revoca el token, mientras que tendría que cambiar la clave en todas partes.

¿En qué se diferencia este enfoque de DuckDNS o No-IP?

Los servicios DDNS de terceros proporcionan un subdominio de tercer nivel como myhome.duckdns.org. El enfoque con Cloudflare usa su propio dominio (home.example.com), lo cual luce más profesional, no depende del servicio de un tercero y no requiere inicio de sesión mensual para confirmación de actividad. Además, obtiene acceso a todo el ecosistema de Cloudflare: protección DDoS, certificados SSL, reglas de firewall.

¿Necesito reenviar puertos en el router?

Sí, para alcanzar la Raspberry Pi desde internet. DDNS solo asegura que el dominio siempre apunte a la IP actual. Pero para que el tráfico desde esa IP llegue a la Pi, necesita configurar el reenvío de puertos en el router para los puertos necesarios (22 para SSH, 80/443 para web, etcétera).

¿Qué hacer si la Raspberry Pi está detrás de NAT del ISP?

Algunos ISP usan NAT de grado de operador (CGNAT); en ese caso, usted no tiene una IP pública propia y el DDNS no ayudará. Solución: solicite una IP blanca al ISP (a menudo es gratuito por solicitud) o use Cloudflare Tunnel, que crea un canal cifrado desde la Pi hacia Cloudflare sin necesidad de reenvío de puertos.

¿Cuánto cuesta esta solución?

Cero. El DNS de Cloudflare es gratuito para registros A ilimitados. La Raspberry Pi ya la compró. El consumo de energía de una Pi 3/4 bajo carga es de aproximadamente 3 a 5 W, lo que anualmente representa unos $250-400.

¿Puedo actualizar múltiples subdominios?

Sí, duplique los bloques con RECORD_NAME y DNS_IP en el script para cada subdominio o envuelva la lógica en un bucle sobre un arreglo de nombres.

DNS dinámico en Cloudflare: qué configurar en 2026

El esquema con la API de Cloudflare y cron ha sobrevivido a varias generaciones de Raspberry Pi y no ha perdido relevancia. Usted obtiene su propio subdominio, no depende de proveedores DDNS de terceros y no paga ni un céntimo.

Si quiere ir más allá, explore imágenes Docker ya preparadas: oznu/cloudflare-ddns actualiza la IP cada 5 minutos y se configura mediante variables de entorno. Para quienes prefieren Python, existe aribasadme/rpi-cloudflare-ddns, diseñada específicamente para Raspberry Pi.

Lo principal que logró hoy: su Raspberry Pi ahora es accesible desde cualquier parte del mundo con una dirección permanente. Y esta es la base para cualquier cosa: desde un servidor de desarrollo WordPress hasta su propio almacenamiento en la nube.

🔗 Documentación de la API DNS de Cloudflare