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.
Antes de empezar siempre nos debemos asegurar tener todo el sistema actualizado:
1 |
# apt update && apt upgrade |
Instalamos bind9:
1 |
# apt install bind9 |
Realizamos una copia de seguridad del fichero de configuración:
1 |
# 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:
1 2 3 4 5 6 |
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:
1 2 |
84.200.69.80 84.200.70.40 |
1 2 |
87.238.35.136 185.56.187.149 |
1 2 3 4 |
5.9.49.12 87.98.175.85 193.183.98.15 45.135.183.146 |
Ahora levantamos el servicio:
1 |
# systemctl start bind9 |
Con esto ya deberíamos de poder hacer unas pruebas para ver si funciona correctamente, para eso vamos a usar dig:
1 |
$ dig @ip.de.nuestro.dns www.url.com |
Se debe sustituir la IP por la correspondiente, en mi caso quedaría así:
1 |
$ dig @192.168.1.5 www.lignux.com | tail -n 5 |
Solo imprimirá las últimas 5 lineas que son las interesantes:
1 2 3 4 |
;; 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:
1 2 3 4 |
;; 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:
1 |
# systemctl enable bind9 |
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:
1 |
# 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:
1 |
# 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.