Sei sulla pagina 1di 4

DNS dinmica con BIND

Autor: ragnar
Fecha: 12 de Junio del 2.004
El documento ha sido probado con las siguientes versiones:
Cliente: FreeBSD 5.2.1, BIND 8.3.7
Servidor: FreeBSD 5.0, BIND 8.3.3
Este documento trata sobre la resolucin dinmica en los servidores de nombres de dominio BIND. Para qu
sirve esto? Pues muy sencillo, imaginemos que tenemos una mquina con conexin de ONO por ejemplo, en la
que nuestra ip cambia cada vez que nos conectamos. Si quisieramos registrar un dominio qu tendriamos que
hacer? Modificar la ip a mano cada vez que nos conectasemos o estar mirando constantemente para ver
cuando nos cambia la ip y tener que modificar el servidor de nombres? Esto es un engorro y resulta imposible
de hacer. As que explicar como hacer que la mquina con ip dinmica informe al servidor de nombres cual es
su ip actual y la modifique cada 5 minutos.
Existen varios proveedores gratuitos como www.dyndns.org que ya facilitan todo esto que voy a explicar aqu
abajo mediante un simple panel de control pero a mi me resulta ms interesante hacerlo por mi mismo. Aunque
he de aclarar que todo esto solo sirve si se tiene acceso remoto al servidor de nombres para poder hacerle las
modificaciones oportunas al fichero de configuracin o si el propietario del servidor de nombres pudiera
hacerlo por nosotros.
Por supuesto, para esto necesitamos configurar la mquina donde est el servidor de DNS (BIND) y la
mquina con IP dinmica.
1 Generacin de las llaves de seguridad (TSIG)
Lo primero de todo es crear las claves de seguridad que permitirn al cliente actualizar las dns del servidor, ya
que si omitieramos esto, estariamos permitiendo que todo el mundo pudiese modificar los registros del
dominio. El acceso a la modificacin de los registros de dominio, adems de mediante llaves de seguridad, es
posible hacerlo mediante una IP o un rango de ellas, pero dado que la IP cambia, no nos resulta til este
aspecto.
Primero se crean las llaves de seguridad en la mquina cliente con IP dinmica. Para ello hacemos uso del
siguiente comando:
dnskeygen -H 128 -h -n nombre
El comando dnskeygen es el que genera las claves, el parmetro -H indica que genere la clave de tipo
HMAC-MD5 y el nmero siguiente indica el tamao que debe estar entre 128 y 504 (cuanto mayor sea el
numero ms compleja y dificil de descifrar ser). -h indica el tipo de modificacin que podemos hacerle, las
posibilidades son -z / -h / -u que equivalen a zona / host / usuario respectivamente. El parmetro -n indica el
nombre de la clave, el cual es lo que va seguido a este parmetro.
Este comando generar dos archivos, Un .key y un .private. Esto se debe a que nsupdate (el programa que se
actualizar para conectar con BIND y hacer las modificaciones de los registros) usa la libreria DST para las
operaciones criptogrficas y puede cambiar de una versin a otra. Por ejemplo con BIND 9.2 usar la .key y la
versin 8.3.3 usar la .private.
Una vez hecho esto, yo recomiendo meterlas dentro de /etc/namedb/tsig/ para tenerlas controladas y despus
darle permisos solo de lectura al usuario root y ninguno para el grupo y el resto. Esto ltimo es debido a que
dnskeygen tiene un fallo que crea las llaves con permisos accesibles para todos, de modo que cualquier
persona puede ver las llaves mediante el simple comando find / -name K*.+157+[0-9][0-9][0-
9][0-9][0-9].key; -perm +066.
2 Configuracin del named.conf del servidor BIND
Ahora que ya tenemos las llaves creadas, vemos el contenido de uno de los dos archivos que ha de ser algo asi:
Private-key-format: v1.2
Algorithm: 157 (HMAC)
Key: hrCDCUNBtlY3sgF8NPnJrg==
Una vez que ya sabemos cual es la clave, editamos el archivo named.conf del servidor que estar situado en
/etc/namedb/ y antes de cualquier definificin de nuestro dominios colocamos lo siguiente:
key nombre {
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret "hrCDCUNBtlY3sgF8NPnJrg==";
};
Cambiamos nombre por el nombre que le hayamos puesto a la clave al generarla y lo siguiente de despus de
secret se cambia por la clave que tenamos en uno de los dos archivos que hemos creado con dnskeygen.
Depus nos situamos donde est definida la zona del dominio que queremos que se pueda actulizar y le
aadimos los siguiente:
allow-update {
key nombre;
};
quedando por ejemplo alo as la configuracin de la zona:
zone "dominio.com" {
type master;
allow-update {
key nombre;
};
file "/etc/namedb/dominio.com.hosts";
};
Cambiando nombre una vez ms por el nombre que hayamos usado al crear las claves. Como ya he comentado
antes, en vez de la directiva key nombre; es posible usar una direccin IP o un rango.
3 Prueba
Cuando hayamos hecho todo esto, solo queda mandar una seal HUP o reiniciar el servicio named para que
coja la configuracin realizada en el named.conf.
Ahora para actualizar el dominio usariamos el siguiente comando:
nsupdate -k /etc/namedb/tsig:nombre.
Cambiando nombre por el nombre que hayamos usando al generar las claves una vez ms y debo hacer
especial incapie en el punto del final, sin el cual nos dar error.
Una vez hecho esto nos aparecer un prompt, en el cual se le debern introducir los parmetros de
actualizacin. Antes de nada debo comentar que para que los cambios se realicen se ha de pulsar dos veces la
tecla intro, la que por cada nico intro que pulsamos es que estamos especificando una regla en particular y si
hacemos un segundo intro seguido, le indicamos que realice los cambios especificados. Por ejemplo:
> update delete www.dominio.com
> update add www.dominio.com 60 IN A 80.34.69.32
>
>
Con esto primero le estamos indicando que borre la entrada para el dominio dado y en la segunda lnea le
indicamos que aada el dominio con un tiempo de vida de 60 de tipo A (ver documentacin de bind para ver
los tipos que existen como CNAME, MX o PTR, pero A es el que se debe usar bsicamente) seguido de la
direccin IP al que queremos que apunte.
4 Automatizacin
Una vez comprobado que funciona no es til todo esto si hemos de hacerlo nosotros constantemente ya que no
serviria de nada, por lo que podemos crear un script que lo haga por nosotros. Existen varios scripts por
internet muy interesantes e incluso herramientas en perl por ejemplo que se encargan de ello ejecutandose
como demonios aunque todas las que he visto hasta ahora son de pago. De todas formas aqu pondr el script
que uso yo pero dado que no controlo mucho de bash script no es muy bueno y podria mejorarse bastante.
#!/bin/sh
IFACE=rl0
HOSTNAME="www.dominio.com."
KEY="nombre"
KEYDIR="/etc/namedb/tsig"
ADDR=`/sbin/ifconfig $IFACE | grep 'inet ' | awk '{print $2}' | sed s,addr:,,`
/usr/sbin/nsupdate -k $KEYDIR:$KEY. <<EOF
update delete $HOSTNAME
update add $HOSTNAME 60 IN A $ADDR
EOF
Este script yo lo tengo en /etc/namedb/ y con permisos de todo para el root y ninguno para el grupo y el resto.
Cambiando IFACE, por la interface de red que contenga la IP dinmica, el HOSTNAME por el registro que
queramos modificar, KEY por el nombre de la clave que hayamos usado al generarla y los parmetros del
update si as se requisiera. Aqu debo hacer un especial nombramiento a la lnea en blanco entre el ltimo
update y el EOF, el cual como he comentado antes es importante para hacer que los cambios se realicen en el
servidor.
Despus de esto aadimos una lnea al crontab para que se ejecute cada 5 minutos por ejemplo y de modo
que as si se cambiara la IP, el tiempo en el que no pudiera resolver el nombre de dominio fuera solamente el
periodo indicado en el cron, aunq como ya he comentado antes se puede mejorar mucho el script para que por
ejemplo solo conecte con el servidor de nombres para modificar el registro si la IP cambia. La lnea que uso
para el crontab es la siguiente:
# Actualiza la ip del dominio www.dominio.com
*/5 * * * * root /etc/namedb/script
5 PD
Se que al final me ha quedado un poco extenso el documento para lo fcil y simple que es el tema pero quera
explicarlo todo bien para que no hayan travas.
Existe una web bastante buena en la direccin http://ops.ietf.org/dns/dynupd/secure-ddns-howto.html sobre la
seguridad de dns dinmica aunque est en inglsy puede resultar un tanto complicada de entender si no se
controla mucho de BIND pero que nunca est de ms echarle un ojo.
Si alguien mejora el script que me lo mande por mail para actualizar este documento, al igual que si quereis
comentarme algo estais libres de mandarme un correo para crticas, sugerencias, etc.
Por ltimo solo felicitar a la comunidad de eldemonio.org y a todos aquellos que usa BSD ya que es el futuro.
Un saludo a todos.

Potrebbero piacerti anche