Actualiza dominios de DuckDNS, dynu y con-ip.com evitando cloudflare
10K+
Contenedor Docker que actualiza dominios en DuckDNS, Dynu y Con-IP.com,
solo cuando la IP pública cambia y no pertenece a rangos bloqueados (Cloudflare o personalizados).
/data/state.json.| Variable | Requerida | Valor por defecto | Descripción |
|---|---|---|---|
DUCKDNS_TOKEN | ❌ | — | Token de tu cuenta DuckDNS |
DUCKDNS_DOMAINS | ❌ | — | Lista de subdominios separados por coma (con o sin .duckdns.org) |
DUCKDNS_BASE_URL | ❌ | https://www.duckdns.org/update | Endpoint de actualización de DuckDNS |
DYNU_HOSTNAME | ❌ | — | Host Dynu a actualizar (ej: tudominio.dynu.net) |
DYNU_USER | ❌ | — | Usuario o correo de tu cuenta Dynu |
DYNU_PASS | ❌ | — | Contraseña en texto plano o SHA-256 (el script la hashea automáticamente si hace falta) |
DYNU_BASE_URL | ❌ | https://api.dynu.com/nic/update | Endpoint de actualización Dynu |
CONIP_URL | ❌ | — | URL completa para actualizar tu dominio en con-ip.com ({ip} se reemplaza por la IP actual) |
INTERVAL_SECONDS | ❌ | 300 | Intervalo (segundos) entre chequeos de cambio de IP (mínimo 300 s) |
BLOCK_CLOUDFLARE | ❌ | true | Si está activado, bloquea IPs de Cloudflare |
CF_IPV4_URL | ❌ | https://www.cloudflare.com/ips-v4 | Lista oficial de rangos IPv4 de Cloudflare |
CF_IPV6_URL | ❌ | https://www.cloudflare.com/ips-v6 | Lista oficial de rangos IPv6 de Cloudflare |
EXTRA_BLOCK_CIDRS_V4 | ❌ | — | Rango(s) IPv4 adicionales a bloquear (coma-separados) |
EXTRA_BLOCK_CIDRS_V6 | ❌ | — | Rango(s) IPv6 adicionales a bloquear (coma-separados) |
IP4_URL | ❌ | https://api.ipify.org?format=json | Endpoint para obtener la IP pública IPv4 |
IP6_URL | ❌ | https://api64.ipify.org?format=json | Endpoint para obtener la IP pública IPv6 |
# Construir
docker build -t bombero62/dnsupdate:latest .
# Ejecutar el contenedor
docker run -d --name dnsupdate --restart unless-stopped \
-e DUCKDNS_TOKEN=TU_TOKEN \
-e DUCKDNS_DOMAINS=casa,servidor \
-e DYNU_HOSTNAME=tudominio.dynu.net \
-e DYNU_USER=tuusuario \
-e DYNU_PASS=tucontraseña \
-e CONIP_URL=https://con-ip.com/update.php?token=XYZ&ip={ip} \
-v $(pwd)/data:/data \
bombero62/dnsupdate:latest
# Ver logs
docker logs -f dnsupdate
Ejemplo de docker-compose.yml:
services:
dnsupdate:
image: bombero62/dnsupdate:latest
container_name: dnsupdate
restart: unless-stopped
environment:
- DUCKDNS_TOKEN=TU_TOKEN
- DUCKDNS_DOMAINS=casa,servidor
- DYNU_HOSTNAME=tudominio.dynu.net
- DYNU_USER=tuusuario
- DYNU_PASS=tucontraseña
- CONIP_URL=https://con-ip.com/update.php?token=XYZ&ip={ip}
- INTERVAL_SECONDS=600
- BLOCK_CLOUDFLARE=true
volumes:
- ./data:/data
Luego:
docker compose up -d
/data/state.json./data/update.log.docker login -u bombero62
docker build -t bombero62/dnsupdate:latest .
docker tag bombero62/dnsupdate:latest bombero62/dnsupdate:v1.1.0
docker push bombero62/dnsupdate:latest
docker push bombero62/dnsupdate:v1.1.0
Docker container that updates domains on DuckDNS, Dynu, and Con-IP.com,
only when the public IP changes and does not belong to blocked ranges (Cloudflare or custom).
/data/state.json.| Variable | Required | Default value | Description |
|---|---|---|---|
DUCKDNS_TOKEN | ❌ | — | Your DuckDNS account token |
DUCKDNS_DOMAINS | ❌ | — | Comma-separated list of subdomains (with or without .duckdns.org) |
DUCKDNS_BASE_URL | ❌ | https://www.duckdns.org/update | DuckDNS update endpoint |
DYNU_HOSTNAME | ❌ | — | Dynu host to update (e.g. yourdomain.dynu.net) |
DYNU_USER | ❌ | — | Dynu account username or email |
DYNU_PASS | ❌ | — | Plain-text password or SHA-256 hash (the script will hash it if needed) |
DYNU_BASE_URL | ❌ | https://api.dynu.com/nic/update | Dynu update endpoint |
CONIP_URL | ❌ | — | Full URL to update your domain at con-ip.com ({ip} is replaced by the current IP) |
INTERVAL_SECONDS | ❌ | 300 | Interval (in seconds) between IP change checks (minimum 300 s) |
BLOCK_CLOUDFLARE | ❌ | true | When enabled, blocks IPs from Cloudflare |
CF_IPV4_URL | ❌ | https://www.cloudflare.com/ips-v4 | Official list of Cloudflare IPv4 ranges |
CF_IPV6_URL | ❌ | https://www.cloudflare.com/ips-v6 | Official list of Cloudflare IPv6 ranges |
EXTRA_BLOCK_CIDRS_V4 | ❌ | — | Additional IPv4 range(s) to block (comma-separated) |
EXTRA_BLOCK_CIDRS_V6 | ❌ | — | Additional IPv6 range(s) to block (comma-separated) |
IP4_URL | ❌ | https://api.ipify.org?format=json | Endpoint to obtain the public IPv4 |
IP6_URL | ❌ | https://api64.ipify.org?format=json | Endpoint to obtain the public IPv6 |
# Build
docker build -t bombero62/dnsupdate:latest .
# Run the container
docker run -d --name dnsupdate --restart unless-stopped \
-e DUCKDNS_TOKEN=YOUR_TOKEN \
-e DUCKDNS_DOMAINS=home,server \
-e DYNU_HOSTNAME=yourdomain.dynu.net \
-e DYNU_USER=youruser \
-e DYNU_PASS=yourpassword \
-e CONIP_URL=https://con-ip.com/update.php?token=XYZ&ip={ip} \
-v $(pwd)/data:/data \
bombero62/dnsupdate:latest
# View logs
docker logs -f dnsupdate
Example docker-compose.yml:
services:
dnsupdate:
image: bombero62/dnsupdate:latest
container_name: dnsupdate
restart: unless-stopped
environment:
- DUCKDNS_TOKEN=YOUR_TOKEN
- DUCKDNS_DOMAINS=home,server
- DYNU_HOSTNAME=yourdomain.dynu.net
- DYNU_USER=youruser
- DYNU_PASS=yourpassword
- CONIP_URL=https://con-ip.com/update.php?token=XYZ&ip={ip}
- INTERVAL_SECONDS=600
- BLOCK_CLOUDFLARE=true
volumes:
- ./data:/data
Then:
docker compose up -d
/data/state.json./data/update.log.docker login -u bombero62
docker build -t bombero62/dnsupdate:latest .
docker tag bombero62/dnsupdate:latest bombero62/dnsupdate:v1.1.0
docker push bombero62/dnsupdate:latest
docker push bombero62/dnsupdate:v1.1.0
Content type
Image
Digest
sha256:30a720ca3…
Size
24.1 MB
Last updated
11 months ago
docker pull bombero62/dnsupdate