Servidor DNS

Resultado de imagen de dns

En nuestro instituto Harvard, queremos instalar un servidor DNS para poder resolver las páginas creadas anteriormente sin necesidad que modificar ningún fichero «hosts». Una de las características más importantes es que:

– Cuando un usuario busque una página, esa página buscada se almacenará en caché de forma que cuando otro usuario busque la misma página en un periodo de tiempo no muy largo, le resolverá mucho más rápidamente ya que está almacenada en caché de un servidor local cercano, y por lo tanto no tiene que salir a un servidor lejano (externo).

¿Qué es un Servidor DNS?

Cuando accedemos a una página web por internet accedemos mediante IP, pero por regla general todos los usuarios nos hemos adaptado a los nombres de dominio ya que son más fáciles de recordar. La función de este servidor consiste en traducir ambos términos, de IP a nombres de dominio y viceversa. Funciona mediante registros (A,AAAA,CNAME,MX…) los cuales determinarán la función que tendrá cada IP asignada a su registro correspondiente, aquí puedes ver los registros más importantes que podrás configurar:

  • A: Contienen en su interior una Ipv4.
  • AAAA: Contienen en su interior una IPv6.
  • CNAME: Es una especie de alias, que redirige a un registro «A», o «AAAA».
  • MX: Contiene la IP de un intercambiador de correo.
  • NS: Contiene la IP de el servidor de nombres, es decir, el que administrará una zona concreta.
  • PTR: Es el encargado de hacer las búsquedas inversas.
  • SOA: Muestra la información básica de un dominio y de la zona en la que se encuentra, aquí va el nombre de dominio de la máquina DNS.

Instalación

Para montar nuestro servidor DNS utilizaremos «Bind9», una herramienta que nos permite instalar y configurar nuestro servidor DNS creando zonas y configurando registros, para instalarla ejecutamos lo siguiente:

apt-get install bind9

Comprobamos que funciona el servicio instalado:

systemctl status bind9

El servicio se encuentra activo. Ya tendríamos todo lo necesario instalado para comenzar a configurar nuestro servidor DNS (Bind9).

Configuración

Tendremos que modificar varios ficheros para que nuestro servidor DNS funcione correctamente:

  • named.conf.local: Archivo principal de configuración que define zonas y opciones del
    servidor
  • named.conf.options: Opciones genéricas named.conf.local Especificación particular de
    este servidor DNS. Donde pondremos la configuración de nuestro reenviador
  • db.harvard.com: Fichero de definición de la zona harvard.com, y lo que resolverá dentro de ella.
  • db.192.168.1: Es el archivo de definición de la zona de resolución inversa correspondiente a mi IP de red 192.168.1…

Named.conf.local

En este fichero tendremos que definir la zonas, tanto directas como inversas:

Directas (Traduce de nombre de dominio a IP):

zone "harvard.com"  {
     type master;
     file "db.harvard.com";
};

Inversas (Traduce de IP a nombre de dominio):

zone "1.168.192.in-addr.arpa" {
         type master;
         file "db.192.168.1";
};

Como has podido ver, nuestras zonas han sido configuradas como «master» (maestro), bien, pues esto se puede cambiar a «Slave»(Esclavo), y la diferencia es la siguiente:

  • Master: guardan los datos de un espacio de nombres en sus ficheros.
  • Slave: obtienen los datos de los servidores primarios a través de una transferencia.

Db.harvard.com

Este fichero no existe, tendremos que crearlo a partir de el fichero /etc/bind/db.local, y copiarlo a la ruta /var/cache/bind:

cp /etc/bind/db.local  /var/cache/db.harvard.com

Cuando hayamos creado el fichero, procederemos a editarlo para añadir los diferentes registros:

@ IN SOA apple.harvard.com.
postmaster.harvard.com (
5 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS apple.harvard.com.
$ORIGIN harvard.com.
apple IN A 192.168.1.1
cliente IN A 192.168.1.208
www IN CNAME apple
informatica IN CNAME apple

La variable $ORIGIN nos sirve para abreviar y no tener que poner el nombre de dominio completo.

Db.192.168.1

Este fichero tampoco se encuentra creado, tendremos que crearlo, y aquí irán alojados los registros de resolución inversa:

cp /etc/bind/db.127  /var/cache/db.192.168.1

Introducimos los registros:

$TTL 86400
@ IN SOA apple.harvard.com
postmaster.harvard.com (
5 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS apple.harvard.com.
$ORIGIN 1.168.192.in-addr.arpa.
       1 IN PTR apple.harvard.com.
       208 IN PTR cliente.harvard.com.

Con estos registros añadidos nos va a resolver tanto nuestra máquina DNS como nuestro cliente al cual le hemos asignado una reserva cuya IP es 192.168.1.208.

IMPORTANTE: poner el «.» después de cada nombre de dominio cada vez que introduzcamos un registro, ya que «.» es el servidor raíz de dominios y por lo tanto el primero que irá a buscar. Si esto no está bien configurado no nos dejará recargar el servicio bind9.

Antes de continuar con el siguiente punto, voy a explicar el por qué se almacenan los ficheros «db.*» en /var/cache/bind/, esto es debido a que existe un fichero en el que determinas las ruta donde quieres guardar estos ficheros, el fichero se llama «named.conf.options» y se encuentra alojado en «/etc/bind/«, tienes que editar la siguiente línea:

directory "ruta"

Esa línea determina el lugar donde se van a guardar los ficheros «db.*» así que si queremos trasladarlos a una nueva ruta, solo tendremos que modificar esa línea con la ruta correspondiente y recargar el servicio:

systemctl reload bind9

Reenviadores

Los reenviadores son servidores DNS configurados en un determinado fichero, que reenvía una consulta DNS que no es posible resolver desde el DNS local de nuestra red a un servidor DNS externo a nuestra red. Para configurar esta característica en Bind9 tenemos que dirigirnos a el fichero /etc/bind/named.conf.options y añadir lo siguiente:

forwarders {
     192.168.102.2;
     8.8.8.8;
};

Tendríamos configurados los reenviadores correctamente.

DNSSEC

Ahora tendremos que deshabilitar unas extensiones de seguridad que por defecto vienen activadas en bind9. Se encargan de:

  • Verificar el origen de los datos de un servidor DNS.
  • Integridad de los datos entre servidores DNS.
  • Denegación de existencia autentificada.

Tenemos que des-habilitar esta opción y ponerla en «No», en el fichero «/etc/bind/name.conf.options«:

Guardamos y recargamos el servicio bind9:

systemctl reload bind9

Modificar DHCP

Para que nuestros clientes resuelvan por nuestro servidor DNS antes tenemos que modificar el fichero /etc/dhcp/dhcpd.conf (fichero que contiene la información de nuestra zona dhcp) y añadir nuestro servidor DNS para que cuando un cliente reciba la configuración por parte de nuestro servidor DHCP, y por lo tanto resuelva correctamente por nuestro servidor DNS, tenemos que añadir la siguiente línea:

option domain-name-servers 192.168.1.1;

Reiniciamos el servicio DHCP:

systemctl restart isc-dhcp-server

¿Funcionará?

Debian

Comprobaremos primero en Debian con el comando «dig» el cual tenemos que instalar con el siguiente paquete:

apt-get install dnsutils

Antes de realizar las comprobaciones vamos a mirar nuestro dichero «resolv.conf» en nuestro cliente Debian, para ver si el servidor DHCP ha cumplido su función:

Efectivamente, todo parece ir correcto, vamos a comprobar que nos resuelve correctamente:

  • Servidor DNS de «harvard.com»

Nos resuelve correctamente y nos dice que la IP de «Apple» es 192.168.1.1

  • Cliente con reserva (192.168.1.208)
  • IP de informatica.harvard.com
  • IP del servidor (resolución inversa)

Para resolver de forma inversa tenemos que utilizar el siguiente parámetro:

dig -x "IP"

Para poder obtener la IP de esta página, tendrá que usar los reenviadores para poder resolver:

He marcado el «Query time» porque como puedes observar, tarda más en resolver que las otras peticiones, y esto es debido a que tiene que salir a servidores DNS externos. Cuando otro usuario busque esa misma página le dará respuesta más rápido ya que el DNS tiene en caché la página.

  • Prueba adicional (Comprobar resolución inversa de nombre de dominio de cliente)

Windows

Ahora probaremos lo mismo pero en Windows, y con el comando «nslookup«:

  • Servidor DNS de «harvard.com»
  • Cliente con reserva (192.168.1.208)
  • IP de informatica.harvard.com
  • IP del servidor (resolución inversa)

Para resolver de forma inversa tenemos que introducir lo siguiente:

set type=ptr
  • Prueba adicional (Comprobar resolución inversa de nombre de dominio de cliente)

Nos resuelve correctamente todo en ambos sistemas, por lo tanto nuestro servidor DNS funciona correctamtente.

Deja un comentario