Actualizar DNS dinámicos con ddns-updater

2023-03-27

Índice

  1. Configuración
    1. config.json
    2. docker-compose

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
  • Google
  • 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.

img

img

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

img

Espero que te haya gustado, pasa un gran día 🐧


Ingrese la dirección de su instancia