Completado

Cliente IP dinámica para múltiples proveedores.

Developer @ Personal

Cliente DDNS modular en Python que sincroniza la IP pública con cualquier proveedor de DNS vía API. Herramienta propia desarrollada en Zaragoza.

Cliente DDNS extensible escrito en Python que sincroniza la IP pública del host con cualquier proveedor de DNS que exponga API. Surgió de la necesidad de hospedar servicios en una conexión doméstica sin atarse a un único registrador y querer rotar entre proveedores según tarifa, fiabilidad o latencia DNS.

Problema

Los clientes DDNS tradicionales (ddclient, no-ip-client) tienen integración hard-coded con un puñado de proveedores y un fichero de configuración por proveedor. Cambiar de DNS = recompilar paquete o cambiar binario. Para una configuración casera con varios subdominios apuntando a varios servicios — unos en Cloudflare, otros en un registrador propio — la opción era mantener N scripts diferentes.

Diseño

El cliente expone una interfaz Provider que cada plugin implementa con tres métodos: get_current_ip(), update_record(name, ip), auth_headers(). Añadir un proveedor nuevo son ~30 líneas Python y registrarlo en el config TOML. El daemon comprueba IP pública cada N segundos y solo emite update si cambia — sin batir gratis las APIs DNS.

Stack

  • Python 3 con httpx para HTTP/2 keep-alive y tomllib para config nativa
  • Plugins ya implementados: Cloudflare, OVH, DynDNS, GoDaddy
  • Daemon corriendo en Raspberry Pi 4, ~3 MB RSS, restart automático con systemd

Operación

El daemon corre como servicio systemd con reinicio automático y un consumo de memoria mínimo (~3 MB RSS), pensado para vivir indefinidamente en hardware modesto como una Raspberry Pi. La comprobación de IP pública es ligera: solo emite una actualización al proveedor de DNS cuando la IP cambia de verdad, evitando golpear las APIs sin necesidad y respetando sus límites de rate.

Añadir soporte para un proveedor nuevo es deliberadamente barato —alrededor de 30 líneas de Python implementando la interfaz Provider y un registro en el config TOML—, lo que permite cubrir registradores de nicho o rotar entre proveedores según tarifa, fiabilidad o latencia DNS sin tocar el núcleo. Esa extensibilidad sin atarse a un único DNS es justo el punto del proyecto.

Proyecto de scratch-your-own-itch. Útil como ejemplo de arquitectura plugin pequeña sin overengineering.