domingo, 4 de octubre de 2015

INSTALACIÓN DE UN SERVIDOR DNS CACHE EN RASPBERRY

En este nuevo tutorial crearemos y configuraremos un servidor DNS caché con “BIND9” en la Raspberry PI 2. Este servicio guardará las consultas DNS de los clientes durante un determinado tiempo, por lo que las peticiones de resolución de nombres serán más rápidas y consumirán menos ancho de banda en nuestra LAN, ya que será el servidor el que responda a dichas peticiones. La Raspberry PI se limitará a reenviar las peticiones a otros servidores y pondrá en caché durante un tiempo determinado todas las resoluciones que ha reenviado.

Primero instalaremos los paquetes necesarios para ”BIND9”:

$ sudo apt-get install bind9 bind9-doc dnsutil


Por defecto, un servidor “BIND9” recién instalado ya es de forma natural un servidor caché, por lo que ya estará listo para dar servicio. Sin embargo vamos a hacer ciertos cambios para ver su funcionamiento.

Una vez instalado el servicio, configuraremos los archivos principales.

Normalmente “BIND9” contiene 4 archivos de configuración básicos:


  • /etc/bind/named.conf: Es el archivo principal del servicio. Carga los tres archivos de configuración que abajo describimos.
  • /etc/bind/name.conf.option: Contiene las opciones generales del servicio (fowarders,..).
  • /etc/bind/named.conf.local: En ella se incluyen las declaraciones de las zonas locales (directa e inversa).
  • /etc/bind/named.conf.default: Aquí es donde se configura las zonas por defecto del servidor (localhost, hints,..).

Para cambiar la configuración del servidor caché vamos a editar el fichero /etc/bind/named.conf.options.
Insertaremos y modificaremos los siguientes párametros para adecuarlos a nuestra red:


options {

directory "/var/cache/bind"; # directorio donde se almacenará la caché.

auth-nxdomain no; 

# Reenviadores condicionales
forwarders { # Reenviaremos las consultas de los clientes a:
8.8.8.8; # DNS de Google.
8.8.4.4; # DNS de Google.
};

listen-on-v6 { none; }; # No permitimos la escucha del tráfico IPv6

allow-query { # Permitimos consultas DNS desde...
127.0.0.1; # la interfaz loopback
192.168.0.0/24; # nuestra red interna.
};

allow-transfer { none; }; # Prohibimos la transferencia de ya que  este es nuestro único servidor DNS de nuestra subred.

allow-recursion { # Permitimos las consultas recursivas desde...
127.0.0.1; # la interfaz loopback
192.168.0.0/24; # nuestra red interna.
};


Es importante mencionar que hay que restringir lo máximo posible el ámbito por el cual permitimos las consultas recursivas a los clientes, ya que podemos ser objeto de “ataques de amplificación de dns”, concurriendo así en una denegación de servicio (DoS). Por esto, como vemos en los parámetros configurados, solo se ha permitido las consultas a nuestro servidor y a nuestra red interna (192.68.0.0/24). Existen otras formas más seguras de hacerlo (por lista de control de acceso,…), pero en nuestro caso, como es una red doméstica, las restringiremos solo a nuestra LAN.

Comprobamos ahora que nuestra configuración no nos va a devolver ningún error:

$ sudo named-checkconf

Reiniciamos el servicio:

$ /etc/init.d/bind restart

Ya tenemos nuestro servidor DNS configurado, por lo que ahora sólo tendremos que cambiar los parámetros de red de nuestra Raspberry y del servicio “DHCP” para que puedan hacer consultas al nuevo servidor.

Para cambiar la ip del servidor DNS en La propia Raspberry abrimos el archivo /etc/interfaces/network y modificamos la siguiente línea:

dns-nameservers 192.168.0.101 8.8.8.8 # Primero la ip_raspberry y google como failover

Seguidamente cambiaremos la configuración del servicio DHCP para cambiar la ip del servidor DNS que se entrega a los clientes:

$ sudo /etc/dhcp/dhcp_conf

Modificamos la siguiente línea:

option domain-name-servers 192.168.0.101 8.8.8.8;

Hay que tener en cuenta que si tenemos un firewall habilitado, como en mi caso “UFW”, tendremos que habilitar el puerto UDP 53 para que puedan escuchar las peticiones de los clientes.

$ ufw allow 53

Verificamos con el comando “netstat” si el puerto 53 está en escucha:

$ netstat -tulpn | grep :53






Una vez hecho esto, podemos comprobar por ejemplo desde la Raspberry como las consultas son más rápidas mediante el comando “dig”, incluido en el paquete de herramientas “dnsutil” instaladas al principio:

$ dig google.es | grep "Query time"







Cuando hacemos una segunda consulta, observamos que el tiempo de latencia es mucho menor, ya que es la propia Raspberry la que devuelve la petición guardada en su caché y no lo reenvía de nuevo al exterior.

Para los clientes DHCP bastará con pedir  una nueva concesión de red al servidor DHCP tal como explicábamos en el tutorial http://bitagorin.blogspot.com.es/2015/09/instalacion-servidor-dhcp-en-raspberry.html

De este modo, hemos conseguido que las peticiones de resolución de nombres en nuestra LAN sea más rápida y que consuman mucho menos tráfico de red con el servicio que hemos implementado.

En el siguiente tutorial instalaremos un servidor DNS maestro para nuestra red también con “BIND9”.

Hasta otra……

No hay comentarios:

Publicar un comentario