Categorías

1 jun 2011

DNS Dinámico con Bind9

Para mi primera entrada he elegido el DNS por ser uno de los servicios más importantes y utilizados, además de necesitarse para muchos otros servicios. A lo largo de esta memoria detallaré paso a paso el proceso de instalación y condifguración de un servidor DNS con actualizaciones dinámicas, pero también podría utilizarse este documento para un DNS estático, simplemente saltándonos la parte de DHCP.


El manual fue realizado sobre una máquina con sistema operativo Linux Debian Squeeze.

Empezamos:

Paso 1.-Instalamos el servidor DNS bind9 y las dnsutils que nos harán falta para la comprobación de funcionamiento con el comando dig:

aptitude install bind9 dnsutils
Paso 2.- Configuramos bind9 en la máquina “goku” que será master del dominio “example.com”. Para ello comenzamos añadiendo la zona directa y la zona inversa del servidor en el fichero /etc/bind/named.conf.local:

include "/etc/bind/zones.rfc1918"; 

zone "example.com" { 
type master; 
file "/var/cache/bind/example.com.db"; 
allow-update {key "rndc-key";}; 
notify yes; 
};

zone "0.0.10.in-addr.arpa" { 
type master; 
file "/var/cache/bind/10.0.0.db"; 
allow-update {key "rndc-key";}; 
notify yes; 
};

Comprobaremos si existen errores de sintaxis (esto no quiere decir que este bien configurado pero si que está bien escrito) con el siguiente parser:
/etc/bind# named-checkconf named.conf.local

*rndc-key es la clave que utilizarán para comunicarse entre el servidor DNS y DHCP para poder realizar las actualizaciones dinámicas. Este fichero contiene lo siguiente:
key "rndc-key" { 
algorithm hmac-md5; 
secret "NJAvKcLLKI5pUyr5SdWc7A=="; 
};

Paso 3.- Los ficheros que definirán con detalle las asociaciones entre IP y nombre, tanto de la zona directa como de la inversa, se encuentran en el directorio /var/cache/bind/.

Estos ficheros contienen lo siguiente (hay que tener cuidado de no dejarnos un espacio o un caracter por este fichero, si esto ocurre fallará, con lo cual aconsejo copiar a mano lo siguiente):


Zona directa: /var/cache/bind/example.com.db
$ORIGIN . 
$TTL 86400 
example.com IN SOA goku.example.com. root.goku.example.com. ( 
1 ; 
604800 ; 
21600 ; 
3600 ; 
604800 ; 
) 
; 
@ NS goku.example.com. 
$ORIGIN example.com. 
goku A 10.0.0.1 
$TTL 1800 ; 30 minutes 
krilin A 10.0.0.2 
TXT "0034c01d37441096e65f6c71820527d786" 
$TTL 86400 ; 1 day 
localhost A 127.0.0.1 
Para comprobar posibles errores de sintaxis utilizaremos el siguiente parser:
/var/cache/bind# named-checkzone example.com example.com.db 

Zona inversa: /var/cache/bind/10.0.0.db
$ORIGIN 0.0.10.in-addr.arpa. 
$TTL 86400; 
@ IN SOA goku.example.com. root.goku.example.com. ( 
1 ; 
604800 ; 
3600 ; 
604800 ;
21600 ; 
) 
; 
@ NS goku.example.com. 
1 IN PTR goku.example.com. 
Por último para comprobar errores de sintaxis de la zona inversa utilizaremos este parser:
/var/cache/bind# named-checkzone 0.0.10.in-addr.arpa 10.0.0.db 
Paso 4.- Llegados a este punto, haremos comprobaciones de que el dns funciona correctamente mediante el comando dig:

Comprobación Zona directa:
dig @10.0.0.1 goku.example.com 

Comprobación Zona inversa:
dig -x 10.0.0.1


Hasta este momento hemos configurado un servidor DNS estático y hemos comprobado que funciona, ahora nos disponemos a montar el servidor DHCP para integrarlos y hacer un servidor DNS-Dinámico.


Paso 5.- Instalamos el servidor DHCP:
aptitude install isc-dhcp-server 

Paso 6.- Editamos el fichero de configuración del servidor DHCP:
nano /etc/dhcp/dhcpd.conf

#Lineas para la actualización del servidor DNS
server-identifier goku; 
ddns-updates on; 
ddns-update-style interim; 
ddns-domainname "example.com."; 
ddns-rev-domainname "in-addr.arpa."; 
deny client-updates; 

include "/etc/bind/rndc.key"; 

zone example.com. { 
primary 127.0.0.1; 
key rndc-key; 
} 

zone 0.0.10.in-addr.arpa. { 
primary 127.0.0.1; 
key rndc-key; 
} 

#Configuración general DHCP
default-lease-time 3600; 
max-lease-time 86400; 
authoritative; 
subnet 10.0.0.0 netmask 255.255.255.0 { 
range 10.0.0.1 10.0.0.127; 
option domain-name "example.com."; 
option domain-name-servers 10.0.0.1; 
option broadcast-address 10.0.0.255; 
}
Paso 7.- Puesta en marcha. Pararemos ambos servidores y vaciaremos los ficheros de peticiones dhcp que se pudiesen haber generado:
/etc/init.d/bind9 stop
/etc/init.d/dhcp3-server stop
echo "" > /var/lib/dhcp3/dhcpd.leases
echo "" > /var/lib/dhcp3/dhcpd.leases~ 
Arrancamos los servicios de nuevo:
/etc/init.d/bind9 start
/etc/init.d/dhcp3-server start
Paso 8.- En el cliente (krilin) editaremos el fichero /etc/dhcp/dhclient.conf y le diremos que envíe su nombre junto con la petición DNS:
send host-name krilin; 
Así el DHCP y el DNS sabrán quien realiza la petición.

Paso 9.- Comprobamos que el DHCP concede IP a krilin automáticamente:
dhclient 

Paso 10.- Echaremos un vistazo al log del servidor (goku) para comprobar que se están realizando las peticiones y las respuestas correctamente:
tail -f /var/log/syslog 


Paso 11.- Hacemos ping desde goku hacia krilin y comprobamos que aun cambiando la IP de krilin se realiza con éxito:
ping krilin 


Y al fin tenemos nuestro servidor DNS Dinámico funcionando.

Espero que les sea útil.

No hay comentarios:

Publicar un comentario