Herramienta de línea de comandos para actualizar registros DNS de Cloudflare. Soporta múltiples dominios y subdominios con configuración externa.
- Soporta múltiples dominios/subdominios (incluso en diferentes zonas de Cloudflare)
- Configuración externa en formato INI simple
- Binario estático (sin dependencias) ideal para Alpine Linux
- Validación de IPs (IPv4)
- Mensajes de error claros
Descarga el binario para tu arquitectura desde la página de releases:
Linux AMD64:
curl -LO https://github.com/devedetti/cloudflare-ddns/releases/latest/download/cloudflare-ddns-linux-amd64
chmod +x cloudflare-ddns-linux-amd64
sudo mv cloudflare-ddns-linux-amd64 /usr/local/bin/cloudflare-ddnsLinux ARM64 (Raspberry Pi, servidores ARM):
curl -LO https://github.com/devedetti/cloudflare-ddns/releases/latest/download/cloudflare-ddns-linux-arm64
chmod +x cloudflare-ddns-linux-arm64
sudo mv cloudflare-ddns-linux-arm64 /usr/local/bin/cloudflare-ddnsVerificar instalación:
cloudflare-ddns --version
cloudflare-ddns --helpVerificar checksum (opcional pero recomendado):
curl -LO https://github.com/devedetti/cloudflare-ddns/releases/latest/download/cloudflare-ddns-linux-amd64.sha256
sha256sum -c cloudflare-ddns-linux-amd64.sha256# Clonar el repositorio
git clone https://github.com/devedetti/cloudflare-ddns.git
cd cloudflare-ddns
# Compilar usando Makefile
make build-static
# Instalar
sudo make installsudo mkdir -p /etc/cloudflare-ddnssudo nano /etc/cloudflare-ddns/config.confUsar el formato INI (ver examples/config.conf.example para ejemplo completo):
[global]
api_token=tu_token_de_cloudflare
[pepito.example.com]
zone_id=abc123def456
record_id=xyz789uvw012
ttl=120
proxied=false
[vpn.otherdomain.com]
zone_id=def456ghi789
record_id=uvw012xyz345
ttl=300
proxied=truesudo chmod 600 /etc/cloudflare-ddns/config.conf- Ir a https://dash.cloudflare.com/profile/api-tokens
- Crear token con permiso: Zone.DNS (Edit)
- Copiar el token al archivo de configuración
- Ir a https://dash.cloudflare.com
- Seleccionar tu dominio
- En la página Overview, columna derecha, copiar el "Zone ID"
Opción via API (más fácil):
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
-H "Authorization: Bearer {api_token}" \
-H "Content-Type: application/json" | jqBuscar el registro que quieres actualizar y copiar su id.
cloudflare-ddns <domain> <ip># Actualizar un subdominio a una IP específica
cloudflare-ddns pepito.example.com 203.0.113.45
# Actualizar con la IP pública actual
cloudflare-ddns home.example.com $(curl -s ifconfig.me)
# Usar desde un script
#!/bin/sh
IP=$(curl -s ifconfig.me)
cloudflare-ddns vpn.mydomain.com "$IP"Por defecto busca /etc/cloudflare-ddns/config.conf, pero puedes especificar otra ubicación:
CLOUDFLARE_DDNS_CONFIG=/path/to/custom/config.conf cloudflare-ddns domain.com 1.2.3.4cloudflare-ddns --help0- Éxito1- Error de validación (IP o dominio inválido)2- Error de configuración (archivo no encontrado o dominio no configurado)3- Error de API (fallo al comunicarse con Cloudflare)
Útil para usar en scripts:
if cloudflare-ddns home.example.com "$IP"; then
echo "DNS actualizado exitosamente"
else
echo "Error al actualizar DNS (código $?)"
fiEjemplo de script para actualizar automáticamente cada 5 minutos:
# /usr/local/bin/update-ddns.sh
#!/bin/sh
IP=$(curl -s ifconfig.me)
/usr/local/bin/cloudflare-ddns home.example.com "$IP"Crontab:
# Actualizar cada 5 minutos
*/5 * * * * /usr/local/bin/update-ddns.sh >> /var/log/ddns.log 2>&1- Verificar que
/etc/cloudflare-ddns/config.confexiste - Verificar permisos:
ls -l /etc/cloudflare-ddns/config.conf - O especificar ruta con
CLOUDFLARE_DDNS_CONFIG=...
- Verificar que el dominio esté en
config.conf - Los nombres son case-sensitive:
Example.com≠example.com - Ver la lista de dominios disponibles en el mensaje de error
- Verificar que la IP tenga formato válido
- Ejemplo válido IPv4:
203.0.113.45
- Verificar que el API token sea correcto
- Verificar que el token tenga permisos de Zone.DNS (Edit)
- El token puede haber expirado
- Verificar que cada sección de dominio tenga
zone_idyrecord_id - Ver Obtener las credenciales de Cloudflare