Source: http://sobrebits.com/montar-un-servidor-casero-con-raspberry-pi-parte-5-dns-local-con-actualizaciones-dinamicas-dhcp/
Timestamp: 2017-09-22 02:47:24+00:00

Document:
Servidor casero con Raspberry Pi: DNS local con actualizaciones DHCP
Marc Meseguer Mayo 6, 2013 GNU/Linux, Raspberry Pi, Sistemas 10 comentarios
Después de configurar nuestro servidor DHCP y nuestro servidor DNS caché toca darle una vuelta de tuerca a nuestro servidor Raspberry Pi y aprovechar las capacidades de DHCP junto a las de DNS para crear un servidor DNS local que actualice automáticamente los registros para las direcciones concedidas por DHCP.
Servidor DNS local con actualizaciones DHCP
Antes de ponernos manos a la obra es necesario entender que implica tener un servidor DNS local con actualizaciones DHCP. Esto es, cada vez que el servidor DHCP conceda una dirección IP a un dispositivo se dirigirá al servidor DNS y creará/actualizará el registro correspondiente a dicho dispositivo. Con eso conseguimos poder acceder a recursos compartidos en la red sin la necesidad de memorizar las direcciones IP completas, solo necesitamos recordar el nombre, cosa mucho más amigable.
Dicho esto podemos proceder a la configuración.
Por razones de seguridad no podemos permitir que cualquier dispositivo actualice registros DNS, ya que esto podría suponer una infinidad distinta de ataques contra nuestra infraestructura. Si bien este servidor Raspberry Pi está ubicado en un domicilio nunca está de más intentar aplicar algunas medidas.
Para aportar seguridad a las comunicaciones entre DHCP y Bind generaremos una clave compartida que será usada para la actualización de registros:
Esto nos generará un archivo /etc/bind/rndc.key. Esta clave deberá ser configurada tanto en el servidor DNS como en el DHCP para que las comunicaciones se realicen correctamente.
Ahora toca configurar la zona de resolución directa e inversa para nuestro dominio. En el tutorial DHCP este era home.local, así que ese será el nombre que le daremos al dominio. El archivo de configuración de zonas locales se encuentra en /etc/bind/named.conf.local. Así que:
Y deberemos configurar el archivo así:
include "/etc/bind/rndc.key"; # Incluímos la clave compartida al archivo
zone home.local { # Zona de resolución directa
type master; # Generamos respuestas autoritativas
file "/var/lib/bind/home.local"; # Archivo de zona
allow-update { key rndc-key; }; # Permitimos actualizaciones solo con la clave compartida
zone 66.168.192.in-addr.arpa { # Zona de resolución inversa
file "/var/lib/bind/66.168.192";
Hecho esto podemos asegurarnos de que la configuración es correcta con:
Que no debería darnos salida alguna, indicando que no hay errores en la configuración.
En este punto tenemos las zonas declaradas, pero necesitamos configurarlas. Lo siguiente será editar los archivos de zona establecidos anteriormente, empezamos con home.local:
$ sudo nano /var/lib/bind/home.local
# Definimos que el dominio cuelga directamente del dominio “.”, root.
# Time-to-live del servicio.
# Definimos el Start Of Authority, el serial para seguir los eventos relacionados con la zona
# y los registros de intervalo.
home.local IN SOA raspberry.home.local. webmaster.home.local. (
1353527646 ; serial
# Definimos el registro Name Server para el dominio.
NS raspberry
# Y su IP asociada.
A 192.168.66.101
# Definimos el origen en nuestro dominio.
$ORIGIN home.local
# Aquí definiremos los registros fijos, en nuestro caso nuestro servidor.
raspberry A 192.168.66.101
Finalizada la configuración la comprobamos con:
$ sudo named-checkzone home.local /var/lib/bind/home.local
A lo que deberíamos recibir:
zone home.local/IN: loaded serial 1353527646
Ahora toca hacer lo mismo para la zona de resolución inversa:
$ sudo nano /var/lib/bind/66.168.192
Y dejaremos la configuración así:
66.168.192.in-addr.arpa IN SOA raspberry.home.local. webmaster.home.local. (
1353527647 ; serial
NS raspberry.home.local.
$ORIGIN 66.168.192.in-addr.arpa.
101 PTR raspberry.home.local.
$ sudo named-checkzone 66.168.192.in-addr.arpa /var/lib/bind/66.168.192
Vamos a comprobar que las zonas configuradas están funcionando reiniciando el servicio bind:
Ahora nuestro DNS local está funcionando, para comprobarlo nos valdremos de la herramienta nslookup para comprobar la resolución directa e inversa:
Para la resolución directa:
> raspberry.home.local
Que nos mostrará su dirección IP.
Ahora la resolución inversa:
> 192.168.66.101
Que nos mostrará el campo “name” junto con el nombre de red del dispositivo.
Si las pruebas son satisfactorias querrá decir que nuestro dominio está montado.
Configurar DHCP para realizar actualizaciones DNS
Aquí viene lo realmente interesante del caso, y es que montar un servidor DNS local para simplemente relacionar una IP con el nombre de un servidor es como poco matar moscas a cañonazos, ahora bien, si podemos hacer lo mismo con todos los dispositivos de nuestra red local sin tener que modificar registros a mano cada vez que estos cambian de dirección IP la cosa se vuelve bastante curiosa.
Para conseguir que DHCP actualice registros DNS necesitamos editar la configuración que vimos el tutorial sobre DHCP. Así que vamos a ello:
Buscamos el campo ddns-update-style configurado anteriormente, lo borramos y escribimos lo siguiente:
ddns-updates on; # Activamos la función de Dynamic DNS
ddns-update-style interim; # Método de actualización dinámica
update-static-leases on; # Actualizamos también los registros con reserva DHCP
include "/etc/bind/rndc.key"; # Incluímos la clave compartida
ddns-domainname "home.local."; # Nombre de dominio ddns
ddns-rev-domainname "in-addr.arpa."; # Nombre de dominio ddns inverso
Comprobando las actualizaciones DNS vía DHCP
Hasta aquí la parte de configuración del servidor, ahora solo nos falta cruzar los dedos mientras comprobamos que todo funciona correctamente.
Para ello lo primero será reiniciar ambos servicios:
Ahora abriremos el log del sistema para ver qué pasa cuando conectamos un cliente vía DHCP.
Con esto en pantalla podemos proceder a conectar un nuevo cliente a la red. Automáticamente debería aparecer algo parecido a esto en nuestro log:
May 5 20:14:04 raspberrypi named[6586]: client 127.0.0.1#39456: signer "rndc-key" approved
May 5 20:14:04 raspberrypi named[6586]: client 127.0.0.1#39456: updating zone 'home.local/IN': adding an RR at 'HTPC.home.local' A
May 5 20:14:04 raspberrypi named[6586]: client 127.0.0.1#39456: updating zone 'home.local/IN': adding an RR at 'HTPC.home.local' TXT
May 5 20:14:05 raspberrypi dhcpd: DHCPREQUEST for 192.168.66.6 from AA:BB:CC:DD:EE:FF (HTPC) via eth0
May 5 20:14:05 raspberrypi dhcpd: DHCPACK on 192.168.66.6 to AA:BB:CC:DD:EE:FF (HTPC) via eth0
May 5 20:14:06 raspberrypi dhcpd: Added new forward map from HTPC.home.local. to 192.168.66.6
May 5 20:14:06 raspberrypi named[6586]: zone home.local/IN: sending notifies (serial 1353527647)
May 5 20:14:06 raspberrypi named[6586]: client 127.0.0.1#39456: signer "rndc-key" approved
May 5 20:14:06 raspberrypi named[6586]: client 127.0.0.1#39456: updating zone '66.168.192.in-addr.arpa/IN': deleting rrset at '6.66.168.192.in-addr.arpa' PTR
May 5 20:14:06 raspberrypi named[6586]: client 127.0.0.1#39456: updating zone '66.168.192.in-addr.arpa/IN': adding an RR at '6.66.168.192.in-addr.arpa' PTR
May 5 20:14:10 raspberrypi dhcpd: Added reverse map from 6.66.168.192.in-addr.arpa. to HTPC.home.local.
May 5 20:14:10 raspberrypi named[6586]: client 127.0.0.1#39456: signer "rndc-key" approved
May 5 20:14:10 raspberrypi named[6586]: client 127.0.0.1#39456: updating zone '66.168.192.in-addr.arpa/IN': deleting rrset at '6.66.168.192.in-addr.arpa' PTR
May 5 20:14:10 raspberrypi named[6586]: client 127.0.0.1#39456: updating zone '66.168.192.in-addr.arpa/IN': adding an RR at '6.66.168.192.in-addr.arpa' PTR
Si prestamos atención al log podemos ver como hay dos grupos de registros, los procedentes de dhcpd y los procedentes named. También podemos observar el uso de la clave compartida así como de la comunicación entre un servicio y el otro.
Así que a partir de ahora, para referirnos a cualquier dispositivo de la red bastará con usar su nombre, esto es, para conectarnos a la Raspberry Pi vía ssh ahora podemos utilizar:
$ ssh pi@raspberry.home.local
Hasta aquí todo lo relacionado con DHCP y DNS en este tutorial.
Pingback: Servidor casero con Raspberry Pi: Primera ejecución de Raspbian Mayo 6, 2013
Pingback: Servidor casero con Raspberry Pi: Configurar servidor DHCP - SobreBits Mayo 27, 2013
Pingback: Servidor casero Raspberry Pi: Acceder al servidor desde el exterior Mayo 29, 2013
Pingback: Servidor casero con Raspberry Pi: Objetivos e índice Junio 12, 2013
Pingback: Servidor casero con Raspberry Pi: Instalar Raspbian en una tarjeta SD Junio 16, 2013
Saludos! me ha servido mucho este manual para aprender a hacer un servidor DNS local, pero solo me resolvía directamente, luego de intentar varias veces, cambié los archivos al directorio /etc/bind/zones (primero lo creé) y para configurar la zona de resolución inversa solo me funcionó esto:
@ IN SOA raspberry.home.local. webmaster.home.local. (
2007010401 ;
600 ) ;
@ IN NS raspberry.home.local.
1 IN PTR raspberry.home.local.
el 1 precediendo a IN PTR es por que mi ip es xxx.xxx.xxx.1.
fuente https://wiki.debian.org/Bind9
Muchas gracias por el tutorial! 😀
Giovanni Agosto 8, 2013
Gracias Daniel, tu respuesta me ha servido de mucho para un proyecto de la universidad!
Freddy Febrero 1, 2014
como configuro la clave compartida para DNS y DHCP!?!
Francisco Febrero 8, 2014
No consigo realizar la resolución inversa.
Después de editar /var/lib/bind/13.168.192 y ejecutar:
sudo named-checkzone 13.168.192.in-addr.arpa /var/libbind/13.168.192 me sale:
/var/lib/bind/13.168.192:12: ignoring out-of-zone data (NS)
/var/lib/bind/13.168.192:12: unknown RR type ‘server.home.local.’
zone 13.168.192.in-addr.arpa/IN: loading from master file /var/lib/bind/13.168.192 failed: unknown class /type
zone 13.168.192.in-addr.arpa /IN: not loaded due to errors.
En cambio la resolución directa me lo hace.
Por mucho que busco el error, no veo com solventarlo.
Agustín Díez Devesa Abril 12, 2014
La configuración que a mí me ha funcionado ha sido la siguiente (basándome en la respuesta dada por Daniel):
101 IN PTR raspberry.home.local.
Roman P.C. Junio 21, 2014
Gracias por el tutorial! Fueron buena base para hacer mi propia configuración! =D
Mis archivos quedaron así…
zone my.network {
file “/var/lib/bind/my.network”;
file “/var/lib/bind/1.168.192”;
/var/lib/bind/my.network
my.network.	IN	SOA	rpi.my.network. webmaster.my.network. (
1353527655
my.network.	IN	NS	rpi
rpi.my.network.	IN	A	192.168.1.1
192.168.1.1.my.network.	IN	PTR	rpi
/var/lib/bind/1.168.192
1.168.192.in-addr.arpa.	IN	SOA rpi.my.network. webmaster.my.network. (
1.168.192.in-addr.arpa.	IN	NS	rpi
1.1.168.192.in-addr.arpa.	IN	PTR	rpi.
Hay que recalcar que los puntos al final de los nombres de red son muy importantes.
Alberto Septiembre 10, 2014
A mí no me funciona ya el home.local, me sale esto
/var/lib/bind/home.local:14: ignoring out-of-zone data (NS)
/var/lib/bind/home.local:14: unknown RR type ‘raspberry’
/var/lib/bind/home.local:15: ignoring out-of-zone data (A)
/var/lib/bind/home.local:15: unknown RR type ‘10.0.0.11’
zone home.local/IN: loading from master file /var/lib/bind/home.local failed: unknown class/type
zone home.local/IN: not loaded due to errors.
¿Qué hago mal? Estoy siguiendo el tutorial a rajatabla
Román P.C. Septiembre 11, 2014
Pon el contenido de tus archivos de configuración, así será más facil ayudarte.
Tuve ese mismo tipo de problemas y mensajes de error en varias ocasiones, te recomiendo validar bien tu configuración. En mi caso no estaba entendiendo correctamente el concepto de DNS, por eso tenia esos problemas.
Hola, gracias por tu respuesta. Pues eso ya lo solucioné, el problema es que aunque la configuración esté bien validada hay algo que no funciona, no se asigna correctamente los nombres
Sep 28 19:30:02 raspberrypi dhcpd: DHCPRELEASE of 192.168.1.11 from xx:xx:xx:xx:xx:xx via eth0 (not found)
Sep 28 19:30:04 raspberrypi dhcpd: DHCPDISCOVER from xx:xx:xx:xx:xx:xx via eth0
Sep 28 19:30:04 raspberrypi dhcpd: DHCPOFFER on 192.168.1.11 to xx:xx:xx:xx:xx:xx via eth0
Sep 28 19:30:04 raspberrypi dhcpd: DHCPREQUEST for 192.168.1.11 (192.168.1.10) from xx:xx:xx:xx:xx:xx via eth0
Sep 28 19:30:04 raspberrypi dhcpd: DHCPACK on 192.168.1.11 to xx:xx:xx:xx:xx:xx via eth0
Sep 28 19:30:04 raspberrypi dhcpd: Unable to add forward map from MI-PC.home.local. to 192.168.1.11: not found
IP raspi: 192.168.1.10
IP pc cliente: 192.168.1.11 (DHCP)
ddns-domainname “home.local.”;
range 192.168.1.12 192.168.1.128;
host timbleck-pc1 {
zone “home.local” IN {
file “/etc/bind/home.local.zone”;
file “/etc/bind/1.168.192.zone”;
home.local.zone
home.local.	1D IN SOA	raspi.home.local. webmaster.home.local. (
1353527646	; serial
38400	; minimum
home.local.	1D IN NS	raspi
raspi.home.local	1D IN A	192.168.1.10
192.168.1.11	1D IN PTR raspi
@	1D IN SOA	raspi.home.local. webmaster.home.local. (
1353527647	; serial
@	1D IN NS	raspi.home.local.
10	1D IN PTR	raspi.home.local.
La dirección raspi.home.local me la resuelve bien, pero no la de mi pc, estoy un poco perdido. Muchas gracias, saludos
Pingback: Servidor casero con Raspberry Pi: Configurar servidor DNS caché Noviembre 27, 2014

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución