DNS Dinámico (Dynamic DNS) con ddclient

Una funcionalidad muy útil cuando tenemos un servidor en casa es saber qué dirección IP tiene nuestro router, para poder acceder a nuestro servidor haciendo uso de NAT. El problema es que las direcciones IP no suelen ser fijas, y los proveedores de internet las van cambiando cada cierto tiempo. Para solventar este pequeño inconveniente a la hora de montar un servidor en casa, existen servicios gratuitos en internet como No-IP (que vimos en una entrada anterior), que nos permite asociar nuestra dirección IP actual, a un nombre DNS: por ejemplo 201.163.14.28 a miservidor.ddns.net, con lo que recordando únicamente ese nombre podremos tener acceso a nuestro sistema en cualquier momento.

Ahora vamos a ver un cliente más genérico que nos permitirá trabajar con varios servicios de DNS dinámicos de forma fácil, y sobre todo homogénea: ddclient.

En la web de ddclient, podemos encontrar toda la información que podemos necesitar. Esta montada en forma de wiki, y lo tenemos todo muy bien ordenado. La última versión estable la podemos descargas de aquí, aunque siempre tenemos la posibilidad de descargar la versión de desarrollo desde su repositorio git, aquí.

Instalación

Para empezar nos descargamos la última versión estable:

Necesitaremos crear a mano los directorios en /etc y /var/cache donde se guardará la configuración del programa y la caché de direcciones IP que vamos teniendo a lo largo del tiempo:

Configuración

Podemos editar este último archivo de configuración, y cambiar las cuatro lineas que hagan referencia a nuestro proveedor de DNS dinámico, o podemos crearlo desde cero. En mi caso, usando el proveedor ChangeIP quedaría tal que así creándolo desde cero:

Ahora solo nos queda arrancar el script que hemos copiado en /usr/local/bin y ver como funciona:

Como vemos funciona bastante bien y nos da mucha información de depuración en el modo verbose. Ahora lo que queremos es un script que se lance al iniciar el servidor y ejecute el comando anterior. Tenemos dos formas de hacerlo: mediante una tarea programada con cron, o creando un script que se ejecute al inicio del sistema. A mi me gusta mas crear un script que se ejecute al inicio, además, en mi sistema con Upstart es bastante cómodo hacerlo: basta con crear un fichero en /etc/init con el nombre ddclient.conf con el siguiente contenido:

 

Con esos datos le decimos a upstart que reinicie el script ddclient si falla (respawn) y que lo haga como mucho 10 veces en 30 segundos. Además la salida del script la tendremos guardada en /var/log/upstart/ddclient.log por si hay algún problema y queremos depurar su ejecución. Tened cuidado si ejecutáis el script con la opción verbose porque os puede generar archivos de log muy grandes.

Como notas finales, decir que vale la pena leer la documentación del programa para ver toda la funcionalidad que tiene: se puede conectar a vuestro router, y sacar la IP directamente de él, o usar un script para averiguar la IP, ejecutar otro script cuando actualice el registro DNS con éxito, se puede conectar a mas de 15 servicios de DNS dinámico distintos (DynDNS, No-IP, changeIP, Google Domains, FreeDNS, …), y mucho más. Se nota que está desarrollado por administradores de sistemas que conocen de primera mano la problemática de no tener una IP pública fija 🙂

Espero que os resulte útil la receta de hoy 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *