Skip to content

devedetti/cloudflare-ddns

Repository files navigation

cloudflare-ddns

Tests Go Report Card Release Go Version

English version

Herramienta de línea de comandos para actualizar registros DNS de Cloudflare. Soporta múltiples dominios y subdominios con configuración externa.

Características

  • 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

Instalación

Opción 1: Descargar binario pre-compilado (Recomendado)

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-ddns

Linux 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-ddns

Verificar instalación:

cloudflare-ddns --version
cloudflare-ddns --help

Verificar 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

Opción 2: Compilar desde código fuente

# Clonar el repositorio
git clone https://github.com/devedetti/cloudflare-ddns.git
cd cloudflare-ddns

# Compilar usando Makefile
make build-static

# Instalar
sudo make install

Configuración

1. Crear el directorio de configuración

sudo mkdir -p /etc/cloudflare-ddns

2. Crear el archivo de configuración

sudo nano /etc/cloudflare-ddns/config.conf

Usar 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=true

3. Asegurar el archivo de configuración

sudo chmod 600 /etc/cloudflare-ddns/config.conf

Obtener las credenciales de Cloudflare

API Token

  1. Ir a https://dash.cloudflare.com/profile/api-tokens
  2. Crear token con permiso: Zone.DNS (Edit)
  3. Copiar el token al archivo de configuración

Zone ID

  1. Ir a https://dash.cloudflare.com
  2. Seleccionar tu dominio
  3. En la página Overview, columna derecha, copiar el "Zone ID"

Record 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" | jq

Buscar el registro que quieres actualizar y copiar su id.

Uso

Sintaxis básica

cloudflare-ddns <domain> <ip>

Ejemplos

# 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"

Usar configuración custom

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.4

Ver ayuda

cloudflare-ddns --help

Códigos de Salida

  • 0 - Éxito
  • 1 - 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 $?)"
fi

Integración con Cron

Ejemplo 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

Troubleshooting

Error: "no se pudo abrir el archivo de configuración"

  • Verificar que /etc/cloudflare-ddns/config.conf existe
  • Verificar permisos: ls -l /etc/cloudflare-ddns/config.conf
  • O especificar ruta con CLOUDFLARE_DDNS_CONFIG=...

Error: "el dominio 'X' no está configurado"

  • Verificar que el dominio esté en config.conf
  • Los nombres son case-sensitive: Example.comexample.com
  • Ver la lista de dominios disponibles en el mensaje de error

Error: "'X' no es una dirección IP válida"

  • Verificar que la IP tenga formato válido
  • Ejemplo válido IPv4: 203.0.113.45

Error de API "Authentication error" o "Invalid token"

  • Verificar que el API token sea correcto
  • Verificar que el token tenga permisos de Zone.DNS (Edit)
  • El token puede haber expirado

Error: "falta zone_id" o "falta record_id"

Licencia

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors