Como habitualmente no tenemos una IP fija en nuestras casas, uno de los servicios fundamentales en un entorno homelab es la gestión del DNS dinámico.
De esta forma actualizaremos de forma periódica un servidor DNS con nuestra IP actual para que un dominio bajo nuestro control apunte siempre a la dirección correcta.
Existen muchos servicios de este tipo, tanto ligados a registradores de dominios como externos.
En esta ocasión vamos a ver cómo se configura en Cloudflare utilizando en nuestro homelab ddclient desplegado en Docker.
Existen diferentes métodos en Cloudflare de configurar la actualización del DNS programáticamente pero la recomendada es a través de tokens para acceder a la API.
Para generar un token entraremos en nuestro perfil de Cloudflare y seleccionaremos "API Tokens".
Se nos mostrarán diferentes templates de tokens que podemos crear. Para esta tarea utilizaremos el primero "EDit zone DNS".
En permisos necesitaremos habilitar Read y Edit y en Zone resources especificaremos "All zones". Los otros campos podemos dejarlos en blanco.
Al generar el token aparte del clásico mostrarlo sólo una vez, nos proporcionará una llamada curl que podremos ejecutar desde un terminal para comprobar que todo está correcto. Es necesario tomar nota del token porque únicamente se nos mostrará en esta ocasión, si lo perdemos tendremos que crear otro.
Una vez que tenemos en nuestro poder el token es necesario desplegar ddclient y configurarlo. En esta guía vamos a hacerlo con un contenedor docker dónde únicamente se ejecutará esta aplicación. Si tenemos una VM con un Linux podríamos instalarlo desde los repositorios y el proceso sería similar.
La actualización de Cloudflare usando tokens es una característica relativamente reciente así que es necesario que utilicemos una versión moderna de ddclient. En cualquier caso y ya que utilizamos docker no hay razón para no instalar la última versión con la etiqueta latest.
El docker-compose.yml utilizado es:
---
version: "2.1"
services:
ddclient:
image: lscr.io/linuxserver/ddclient:latest
container_name: ddclient
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- ./config:/config
restart: unless-stopped
Y la configuración del servicio irá en ./config/ddclient.conf.
daemon=30 # check every 300 seconds
syslog=yes # log update msgs to syslog
pid=/var/run/ddclient/ddclient.pid # record PID in file.
ssl=yes # use ssl-support. Works with ssl-library
use=web
protocol=cloudflare, zone=mariogalan.com, login=token, password=<your-token> mariogalan.com
Para cada caso particular será necesario modificar los parámetros zone, password y el dominio a actualizar.
De forma rápida para ver que la configuración es correcta podemos lanzar el contenedor con:
docker-compose up
Si vemos que todo está correcto, lo pararemos con ctrl+c y ya podemos ejecutarlo en su forma definitiva con:
docker-compose up -d
Comentarios