Tener un servidor DNS en una red local es muy útil para mejorar la velocidad de respuesta de todos los dispositivos, ademas nos puede ayudar a mejorar la privacidad, ya que la mayoría de peticiones DNS no viajaran fuera de nuestra red. Este tutorial es perfecto para los que tenemos una RPI en casa o cualquier tipo de dispositivo conectado 24h en la red. También puede ser útil para usarse de forma local en un único equipo, ya que a nivel de SO en GNU/Linux no se suele cachear.
En este caso voy a usar bind9, este al recibir una solicitud mirara si esta en su base de datos/cache, en caso contrario solicitara a otro DNS la IP, de esta forma la primera vez que se vaya a resolver el nombre sera algo más lento, pero luego mejoran muchísimo los tiempos.
Para esta guía voy a suponer que se tiene instalado Debian o algún derivado como Raspbian.
Configuración del servidor:
Antes de empezar siempre nos debemos asegurar tener todo el sistema actualizado:
# apt update && apt upgrade
Instalamos bind9:
# apt install bind9
Realizamos una copia de seguridad del fichero de configuración:
# cp /etc/bind/named.conf.options /etc/bind/named.conf.options.back
Por suerte bind9 ya viene configurado para funcionar como servidor cache y únicamente debemos de agregar las IPs de los servidores que tomara los datos, por lo tanto descomentamos la sección de forwarders y agregamos unas cuantas IPs:
forwarders {
8.8.8.8;
208.67.222.222;
8.8.4.4;
208.67.220.220;
};
Eso seria un ejemplo, podemos agregar los que queramos, los más recomendables son los más rápidos en la zona de cada uno, en mi caso son los de google y OpenDNS, pero aquí tenéis algunos interesantes que respetan la privacidad:
84.200.69.80
84.200.70.40
87.238.35.136
185.56.187.149
5.9.49.12
87.98.175.85
193.183.98.15
45.135.183.146
Ahora levantamos el servicio:
Testando desde otro host:
Con esto ya deberíamos de poder hacer unas pruebas para ver si funciona correctamente, para eso vamos a usar dig:
$ dig @ip.de.nuestro.dns www.url.com
Se debe sustituir la IP por la correspondiente, en mi caso quedaría así:
$ dig @192.168.1.5 www.lignux.com | tail -n 5
Solo imprimirá las últimas 5 lineas que son las interesantes:
;; Query time: 54 msec
;; SERVER: 192.168.1.5#53(192.168.1.5)
;; WHEN: Fri Oct 20 18:22:07 CEST 2017
;; MSG SIZE rcvd: 218
La primera linea nos mostrara el tiempo que ha tardado, pero si lo volvemos a ejecutar vemos como baja drásticamente:
;; Query time: 1 msec
;; SERVER: 192.168.1.5#53(192.168.1.5)
;; WHEN: Fri Oct 20 18:23:39 CEST 2017
;; MSG SIZE rcvd: 218
Si todo ha ido bien agregamos bind9 al arranque:
# systemctl enable bind9
Configurando el router:
Ahora debemos hacer que nuestros equipos usen por defecto este DNS y no el que nos proporciona nuestro ISP, cada router es un mundo y probablemente debamos de buscar información del modelo especifico de cada uno, pero igualmente voy a dar unas indicaciones básicas.
Para empezar debemos de configurar el servidor con una IP fija, esto se puede hacer desde el propio host o aun mejor desde el DHCP:
Y también cambiamos los valores del los servidores DNS que proporciona por defecto:
Con esto deberíamos de obtener una IP estática por el DHCP, pero no es instantáneo, deberíamos de poder obtener la IP nueva forzando una petición nueva:
# dhclient -r eth0 && dhclient eth0
Como extra voy a señalar como forzar el uso de los DNS que queramos haciendo caso omiso a los datos proporcionados por el DHCP:
# echo nameserver 192.168.1.254 > /etc/resolv.conf
Y esto agregara manualmente nuestro servidor como único DNS (podemos poner varios, uno por linea), si queremos que el cambio sea persistente debemos de modificar el fichero: “/etc/resolv.conf.head” en el cual agregamos de la misma forma las IPs que nos interesen.
Si todo ha ido bien a partir de ahora todos nuestros dispositivos al intentar acceder a un dominio primero preguntara a nuestro servidor local mejorando considerablemente la velocidad de navegación do todos los dispositivos en la casa, pero ademas si abrimos los puertos podemos realizar solicitudes desde fuera.
Fuente: lignux