Una de las maneras de servir paginas Web es usar tu propia conexión de Internet con tu propio servidor Web, esto puede ser intreresante por varios motivos, pero puede ser problematico, ya que generalmente los router de los operadores usan IPs Dinamicas por lo que cada vez que se reinicia el router se asigna una nueva IP y por lo tanto deben de hacerse cambios en los servidores de DNS para que acepten esta nueva IP.

Una manera de hacerlo es emplear los servidores de DNS de CloudFlare y mediante API actulizar la información de DNS en caso de que esta cambie. Para ello podemos emplear el siguiente script de bash e instalarlo en el sistema para que cada vez que se reinicie el sistema actualice la IP. Adicionalmente se puede meter en el cron para que corra de manera programada y si hay algun cambio que lo actualice.

Consiguiendo las credenciales de CloudFlare

Debemos de acceder a nuestro panel de administración de CloudFlare en My Profile y desde el Menu Tokens de API seleccionamos la opción Global API Key y copiamos el valor de la key que usaremos en el script.

Script de Actualización automática

El script se puede descargar desde https://github.com/aliban/cloudflare-ddns y para configurarlo debemos de cubrir los siguientes campos

# Cloudflare zone is the zone which holds the record
zone=example.net
# dnsrecord is the A record which will be updated
dnsrecord=www.example.net

## Cloudflare authentication details
## keep these private
cloudflare_auth_email=hostmaster@example.net
cloudflare_auth_key=

En donde reemplazamos:

  • zone=example.net example.net con nuestro nombre de dominio
  • dnsrecord=www.example.net con el nombre de host que queremos actualizar
  • cloudflare_auth_email=hostmaster@example.net con la direccion de correo electronico que usamos para registrarnos en cloudflare
  • cloudflare_auth_key= añadimos la KEY que copiamos en el apartado anterior

Con esto tenemos el script listo para trabajar. Ahora lo moveremos al directorio /usr/local/bin y le damos permisos de ejecución con chmod a+x /usr/local/bin/cloudflare-ddns-update.sh y preparamos su ejecución en el inicio del sistema.

Creando el servicio

Para que se ejecute cuando el sistema arranque debemos de crear el servicio que se iniciará en arranque para ello vamos a crear una unit de systemd. Para ello editamos el fichero /etc/systemd/system/update_dns.service e incluimos la siguiente información.

[Unit]
Description=Actualiza los DNS de CloudFlare de manera dinamica
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/cloudflare-ddns-update.sh > /var/log/ddns-update
TimeoutStartSec=0

[Install]
WantedBy=default.target

Ahora debemos de recargar systemd para que reconozca nuestro servicio systemctl daemon-reload y lo añadimos al inicio del sistema con systemctl enable update_dns y con esto ya tenemos todo listo para que actualice de modo automático nuestro DNS cada vez que se reinicie el sistema y corregir los DNS.