Actualizar DNS dinámicos con ddns-updater
2023-03-27
Índice
Ddns-updater es un servicio que nos va a permitir actualizar automáticamente y de forma periódica los registros A y/o AAAA en un servidor de DNS con la dirección IP de nuestro ordenador/servidor.
Esto hace posible ejecutar diferentes servicios (como un servidor web) en un ordenador con una dirección IP dinámica.
Cuando la dirección IP de nuestro ordenador cambia, permite enviar una notificación gracias a la utilización de la librería Shoutrrr
Soporta una lista muy amplia de proveedores de DNS:
- Aliyun
- AllInkl
- Cloudflare
- DD24
- DDNSS.de
- DigitalOcean
- DonDominio
- DNSOMatic
- DNSPod
- Dreamhost
- DuckDNS
- DynDNS
- Dynu
- FreeDNS
- Gandi
- GCP
- GoDaddy
- He.net
- Infomaniak
- INWX
- Linode
- LuaDNS
- Namecheap
- NoIP
- Njalla
- OpenDNS
- OVH
- Porkbun
- Selfhost.de
- Servercow.de
- Spdyn
- Strato.de
- Variomedia.de
La imagen del Docker pesa 11 MB y está basada en un binario estático escrito en Go
La configuración se realiza en un archivo JSON (update.json
) además almacena direcciones IP antiguas en el fichero update.json
y los tiempos de cada cambio.
Configuración
En el repositorio existen diferentes plantillas para cada proveedor soportado que vayamos a utilizar
config.json
Para poder configurar el fichero debes de acceder a la configuración del proveedor de DNS y obtener los token o password de cada zona.
Crear un fichero llamado config.json
en la carpeta /data
, por ejemplo, para actualizar la dirección IP en los servidores de Cloudflare y OVH utilizo la siguietne configuración.
{
"settings": [
{
"provider": "ovh",
"domain": "domain.com",
"host": "@",
"username": "username",
"password": "password",
"ip_version": "ipv4",
"provider_ip": true
},
{
"provider": "cloudflare",
"zone_identifier": "some id",
"domain": "domain.com",
"host": "@",
"ttl": 600,
"token": "yourtoken",
"ip_version": "ipv4"
"proxied": true,
}
]
}
docker-compose
Para la creación del contenedor voy a crear un stack en portainer con el siguiente código, cambia las rutas de los volumenes por los de tu odenador.
version: "3.7"
services:
ddns-updater:
image: qmcgaw/ddns-updater
container_name: ddns-updater
network_mode: bridge
ports:
- 8002:8000/tcp
volumes:
- /volume1/docker/ddns-updater/data:/updater/data
environment:
- CONFIG=
- PERIOD=5m
- UPDATE_COOLDOWN_PERIOD=5m
- PUBLICIP_FETCHERS=all
- PUBLICIP_HTTP_PROVIDERS=all
- PUBLICIPV4_HTTP_PROVIDERS=all
- PUBLICIPV6_HTTP_PROVIDERS=all
- PUBLICIP_DNS_PROVIDERS=all
- PUBLICIP_DNS_TIMEOUT=3s
- HTTP_TIMEOUT=10s
# Web UI
- LISTENING_PORT=8000
- ROOT_URL=/
# Backup
- BACKUP_PERIOD=0 # 0 to disable
- BACKUP_DIRECTORY=/updater/data
# Other
- LOG_LEVEL=info
- LOG_CALLER=hidden
- SHOUTRRR_ADDRESSES=telegram://BOT_TOKEN@telegram/?channels=CHAT_ID
restart: always
Si quieres mandar una notificación vía Telegram cada vez que ocurra una actualización puedes utilizar SHOUTRRR_ADDRESSES
SHOUTRRR_ADDRESSES=telegram://BOT_TOKEN@telegram/?channels=CHAT_ID
Espero que te haya gustado, pasa un gran día 🐧