DNS dinámica con Linux

Hoy, cansado de entrar por ssh al server del curro para buscar en los logs la IP de mi casa entre los accesos POP3, he decidido gastar 5 minutitos en montarme un dns update para la IP dinámica que me da Jazztel. Así podré acceder a mi casa por nombre en lugar de comerme el coco cada vez.

Bueno, en realidad es algo muy muy sencillito de hacer, pero por si acaso a alguien le interesa lo explico aquí.

Primero hay que instalar el software de Bind en la máquina cliente, que tiene las herramientas necesarias para generar las claves de actualización de zonas. Una vez instalado hay que crear una clave para la zona que se quiere actualizar (una para cada zona, eso es obvio):

dnssec-keygen -a HMAC-MD5 -b 128 -n HOST ivanhq

“ivanhq” es el nombre de la clave que yo voy a crear, lo llamo así para saber qué zona actualiza, pero podría llamarse “dnskey” sin ningún problema. Esto genera dos ficheros, un .private y un .key, ni que decir tiene cuál es el público y cual el privado… el público servirá para ponerlo en la configuración del servidor, el privado no debe moverse del cliente.

Es conveniente guardar los ficheros de las claves en algún directorio que guarde relación con Bind. Yo los he puesto aquí:

mkdir /var/bind/tsig
mv Kivanhq* /var/bind/tsig/
chown -R 0066 /var/bind/tsig

Después debe modificarse el fichero de configuración de named en el servidor (named.conf). Debe incorporarse la key pública del cliente, para decirle al servidor que acepte sus updates.

key ivanhq {
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret "agCr8JkmLKsgFuSw==";
};

El contenido de “secret” es la clave pública, que está contenida en el fichero .key y se puede ver con un simple “cat”. Esto se puede poner al principio del archivo, antes de la declaración de zonas.

Después debe modificarse la declaración de la zona que se va a actualizar, para permitir la actualización desde la “key ivanhq”:

zone "ivanhq.net" {
type master;
allow-update{
key ivanhq;
};
file "/etc/namedb/ivanhq.net.db";
};

Una vez hecho esto debe reiniciarse el servidor named, y ya se puede actualizar el nombre desde el cliente, por línea de comandos:

nsupdate -k /var/bind/tsig/Kivanhq.+157+25718.key

Esto lee de la entrada de consola, y ahora debemos especificar lo que debe hacer en la zona:

update delete micasa.ivanhq.net
update add micasa.ivanhq.net 60 IN A 111.222.333.444

Es necesario pulsar Enter 2 veces al final para que el servidor reciba la señal de EOF y haga efectivos los cambios en la zona. La dirección IP dinámica va en el lugar de “111.222.333.444″. Y ya está.

Yo he hecho un pequeño script que saca mi dirección IP pública, y lo ejecuto desde el cron una vez por minuto. También he encontrado problemas en la actualización si el cliente y el servidor están descompasados en tiempo… de modo que es bueno pensar en sincronizar las máquinas con ntp contra algún servidor de time (hora.rediris.es, por ejemplo).

EDICIÓN: vaya… este post es prácticamente un duplicado del que ya escribí en su día explicando cómo hacerlo en FreeBSD. No me había dado cuenta :(

Leave a Reply