Instalar un DNS local en Linux con Bind

Hola hoy voy a escribir sobre como montar un servidor DNS rápido y básico en una red local.

Primero veremos los tipos que existen de DNS y los registros DNS.

Tipos de DNS

Master (Maestro o Primario): Aloja los registros autoritarios de una zona, responde las peticiones de resolución de nombres como servidor de autoridad y delega copias a los servidores esclavo.

Slave (Esclavo o Secundario): Responde a las peticiones de resolución de nombres como servidor de autoridad, pero la información es distribuida por los servidores primarios.

Caching­only (Sólo de cache): Responde a las peticiones de resolución de nombres pero no es servidor de autoridad, las respuestas las guarda en memoria por un período determinado.

Forwarding (de reenvío): Reenvía las peticiones a una lista de servidores de nombres.



Registros DNS

A (Address): Define una dirección IP y el nombre asignado al host.

AAAA: Son el reemplazo de los registros A cuando la traducción que se lleva acabo es de nombre a dirección IPv6.

MX (Mail eXchanger): Se usa para identificar servidores de correo.

CNAME (Canonical Name): Es un alias que se asigna a un host que tiene una dirección IP valida y que responde a diversos nombres. Pueden declararse varios para un host.

NS (Name Server): Define los servidores de nombre principales de un dominio. Debe haber al menos uno.

SOA (Start Of Authority): Este es el primer registro de la zona y sólo puede haber uno en cada archivo de la zona y sólo está presente si el servidor es autoritario del dominio. Especifica el servidor DNS primario del dominio, la cuenta de correo del administrador y tiempos de refresco.

PTR (Domain Name Pointer): Indica a que dirección IP corresponde un nombre.



Parámetros del registro SOA

Serial: El número serial se utiliza para sincronizar las zonas entre los DNS primarios y secundarios. Si el DNS secundario al consultar el primario encuentra que el número serial es mayor al que tiene actualmente quiere decir que se ha actualizado el archivo de zona, por lo que solicitará una copia de la versión actualizada.

Refresh: Es el tiempo que un DNS secundario debe esperar para comprobar nuevamente los valores de registro de un DNS primario.

Retry: Es el tiempo que un DNS secundario debe esperar después de un intento fallido en recuperar datos de un DNS primario.

Expire: Es el tiempo que durarán los datos en un DNS secundario antes de que expiren.

Negative Cache TTL: Es el tiempo que el caché del DNS recordará las consultas negativas (NXDOMAIN)

Bueno ya que vimos algo de teoría empezemos con la instalación y configuración para distribuciones Ubuntu y Fedora.



Instalación y configuración para Ubuntu y similares

Versiones en el ejemplo: Ubuntu 10.04, Bind 9.7.0-P1
Si las versiones son distintas a estas puede haber algunas variaciones, pero siempre y cuando sea un Bind 9 no debe haber problema.

Instalación:






Ahora hay que ir a la carpeta /etc/bind ahí encontraremos nuestros archivos de configuración.

Bueno, para el ejemplo utilizaremos el dominio rukia.com, que será también nuestro DNS, en el ejemplo el servidor tiene la IP 10.9.8.50 (rukia.com) y nuestro cliente de ejemplo es la IP 10.9.8.1 a la cual le pondremos de nombre de dominio goku.rukia.com.

El primer archivo a editar es donde se declaran las zonas:






El archivo por default tiene el siguiente contenido:





En este contenido se declaran las siguientes zonas: los DNS raíz principales públicos, localhost, inversa de localhost, broadcast e inversa de broadcast

Para nuestra propia zona utilizando de ejemplo que queremos agregar el dominio rukia.com y que el nombre de arhivo de zona es db.rukia, agregamos la zona de la siguiente forma:







Ahora agregamos el archivo de zona inversa. La zona inversa es para resolver a partir de una IP para que devuelva el nombre de dominio. Para el ejemplo agregamos la zona inversa de la red 10.9.8.0, que es la red a la cual pertenecen nuestras IP de ejemplo (10.9.8.1 y 10.9.8.50) y de nombre para el archivo de zona inversa como db.rukiaRev:






Noten que la dirección de red se escribe al revés, nuestra red es 10.9.8.0, así que se escribió 8.9.10.
Los nombres para los archivo de zona pueden ser los que queramos.
Al final el archivo named.conf.default-zones debe quedar de la siguiente forma:






Antes de seguir con las zonas revisemos que el archivo named.conf incluya al archivo named.conf.default-zones, para esto sólo hay que leer el siguiente archivo para ver que incluya lo que necesitamos:







El archivo debe contener lo siguiente:







Ahora hagamos nuestro archivo de zona para rukia.com (/etc/bind/db.rukia), en el también agregaremos el nombre goku.rukia.com para el cliente 10.9.8.1 y también que si buscamos el nombre www.rukia.com pueda responder a la IP 10.9.8.50.
Entonces el archivo debe verse así:





Explicaré el archivo por líneas (de la 0 hasta la 10, sin contar espacios)

0 - Se establece el tiempo del TTL, el TTL es el tiempo de vida que durarán las consultas a caché en lugar del servidor , esto quiere decir que si ya se hizo una consulta a un dominio, y se hace otra consulta dentro del tiempo de TTL, la consulta se realizará al caché, de lo contrario si ya expiró el tiempo se hará nuevamente al servidor. En el ejemplo puse solamente 120 segundos, pensando en situaciones critícas en que se necesita actualizar un nombre de dominio y el cambio debe verse al instante. El tiempo de default es 604800 segundos.

1 - Se establece el SOA y la cuenta de correo del administrador del dominio. El correo se escribió de esta forma: rukia.rukia.com, se sustituye el @ por un punto, en realidad el correo es rukia@rukia.com.

2 al 6 - Parámetros del SOA.

7 - Se establece el NameServer para el dominio, en este caso es el mismo servidor (rukia.com). La @ hace referencia al nombre de dominio al que pertenece la zona, en este caso es rukia.com. Esto quiere decir que para esta zona @=rukia.com.

8 - Se apunta el dominio rukia.com a la IP 10.9.8.50.

9 - Se establece el nombre canonico www rukia.com. Esto quiere decir que si se resuelve rukia.com o www.rukia.com la respuesta siempre será 10.9.8.50.

10 - Se le establece el nombre de dominio goku.rukia.com a la IP 10.9.8.1.

Ahora vamos a crear el archivo de zona inversa para nuestra red (/etc/bind/db.rukiaRev):







Nuevamente explicaré el archivo por líneas (0 a 9, sin contar espacios)

0 - TTL.

1 - Establece SOA y cuenta de correo del administrador .

2 al 6 - Parámetros del SOA.

7 - Se establece el NameServer, en este caso es el mismo servidor.

8 - Se apunta la IP 10.9.8.50 al dominio rukia.com. Noten que sólo se escribe la dirección de host de la IP. La dirección de red es 10.9.8.0, así que la de host es 0.0.0.50.

9 - se apunta la IP 10.9.8.1 al dominio goku.rukia.com.

Ahora sólo falta el archivo named.conf.options, pero para Ubuntu no se necesita editar, sólo en caso de presentar problemas en la resolución inversa o que se muestre un error que diga que el DNS rechaza las conexiones al momento de intentar resolver los nombres de dominio desde un cliente, verifiquen que se agreguen las siguientes opciones al archivo /etc/bind/named.conf.options para evitar esos errores:






Para iniciar el servicio ejecutamos el siguiente comando:




Y listo ya tenemos un DNS rápido y funcional para nuestra LAN.



Instalación y configuración para  Fedora y similares

Versiones en el ejemplo: Fedora 16 Security Spin, Bind 9.8.3-P1-RedHat-9.8.3-2.P1.fc16
Si las versiones son distintas a estas puede haber algunas variaciones, pero siempre y cuando sea un Bind 9 no debe haber problema.


Instalación:





Bueno, para el ejemplo utilizaremos el dominio rukia.com, que será también nuestro DNS, en el ejemplo el servidor tiene la IP 10.9.8.50 (rukia.com) y nuestro cliente de ejemplo es la IP 10.9.8.1 a la cual le pondremos de nombre de dominio goku.rukia.com.

El primer archivo a editar es el archivo named.conf:






En este archivo se declarán las opciones para nuestro DNS y las zonas, por default el archivo ya contiene lo siguiente:





En este archivo, las opciones que nos interesan editar son:

listen-on-port 53 { 127.0.0.1; }; - Aquí se establece que el servidor estará escuchando en el puerto 53 para la IP del localhost. Aquí hay que agregar la IP local de nuestro equipo para que pueda atender peticiones de los clientes en la LAN, en este caso agregaremos la IP del ejemplo que es 10.9.8.50.

directory "/var/named"; - Se establece el directorio donde se van a encontrar los archivos de zona, puede ser otro directorio siempre y cuando el servicio named tenga permisos para leer. Para el ejemplo dejaremos este directorio default.

allow-query { localhost; }; - Se establece a quienes se les va a permitir hacer consultas nuestro DNS, por default sólo se le permite a localhost como se puede observar. Para el ejemplo sólo permitiremos a localhost y nuestra red local, por lo que agregaremos 10.9.8.0/24. Si queremos que cualquier cliente haga consultas a nuestro DNS sólo agregamos la palabra any en lugar de localhost o una dirección de red.

recursion yes; - Permitir la consulta inversa. Quiere decir que si hacemos una consulta para obtener el nombre de dominio a través de una IP sea permitido.

También viene ya declarado por default los DNS raíz principales públicos.

A continuación se ve como debe quedar nuestra sección de opciones, en la que además de escuchar el puerto 53 en la IP 127.0.0.1, también lo hará en la IP local asignada al servidor (10.9.8.50), se establecerá el directorio /var/named como el directorio de archivos de zona, que tambíen permitirá consultas a localhost y la red de la LAN y permitirá consultas inversas:




Para nuestra propia zona utilizando de ejemplo que queremos agregar el dominio rukia.com y que el nombre de arhivo de zona es named.rukia, agregamos la zona de la siguiente forma:






Ahora agregamos el archivo de zona inversa. La zona inversa es para resolver a partir de una IP para que devuelva el nombre de dominio. Para el ejemplo agregamos la zona inversa de la red 10.9.8.0, que es la red a la cual pertenecen nuestras IP de ejemplo (10.9.8.1 y 10.9.8.50) y de nombre para el archivo de zona inversa como named.rukiaRev:




 
 

Noten que la dirección de red se escribe al revés, nuestra red es 10.9.8.0, así que se escribió 8.9.10.
Los nombres para los archivo de zona pueden ser los que queramos.
Al final el archivo named.conf debe quedar de la siguiente forma:






Ahora hagamos nuestro archivo de zona para rukia.com (/var/named/named.rukia), en el también agregaremos el nombre goku.rukia.com para el cliente 10.9.8.1 y también que si buscamos el nombre www.rukia.com pueda responder a la IP 10.9.8.50.
Entonces el archivo debe verse así:





Explicaré el archivo por líneas (de la 0 hasta la 10, sin contar espacios)

0 - Se establece el tiempo del TTL, el TTL es el tiempo de vida que durarán las consultas a caché en lugar del servidor , esto quiere decir que si ya se hizo una consulta a un dominio, y se hace otra consulta dentro del tiempo de TTL, la consulta se realizará al caché, de lo contrario si ya expiró el tiempo se hará nuevamente al servidor. En el ejemplo puse solamente 120 segundos, pensando en situaciones critícas en que se necesita actualizar un nombre de dominio y el cambio debe verse al instante. El tiempo de default es 604800 segundos.

1 - Se establece el SOA y la cuenta de correo del administrador del dominio. El correo se escribió de esta forma: rukia.rukia.com, se sustituye el @ por un punto, en realidad el correo es rukia@rukia.com.

2 al 6 - Parámetros del SOA.

7 - Se establece el NameServer para el dominio, en este caso es el mismo servidor (rukia.com). La @ hace referencia al nombre de dominio al que pertenece la zona, en este caso es rukia.com. Esto quiere decir que para esta zona @=rukia.com.

8 - Se apunta el dominio rukia.com a la IP 10.9.8.50.

9 - Se establece el nombre canonico www rukia.com. Esto quiere decir que si se resuelve rukia.com o www.rukia.com la respuesta siempre será 10.9.8.50.

10 - Se le establece el nombre de dominio goku.rukia.com a la IP 10.9.8.1.

 Ahora vamos a crear el archivo de zona inversa para nuestra red (/var/named/named.rukiaRev):






Nuevamente explicaré el archivo por líneas (0 a 9, sin contar espacios)

0 - TTL.

1 - Establece SOA y cuenta de correo del administrador .

2 al 6 - Parámetros del SOA.

7 - Se establece el NameServer, en este caso es el mismo servidor.

8 - Se apunta la IP 10.9.8.50 al dominio rukia.com. Noten que sólo se escribe la dirección de host de la IP. La dirección de red es 10.9.8.0, así que la de host es 0.0.0.50.

9 - se apunta la IP 10.9.8.1 al dominio goku.rukia.com.


Para iniciar el servicio ejecutamos el siguiente comando:






Y listo ya tenemos un DNS sencillo para nuestra LAN.



Configuración del DNS en los clientes

Para establecer el DNS en los clientes sólo hay que agregar la IP del servidor de nombres de dominio o DNS a nuestra configuración de red. Voy a explicar como se haría en modo consola, en modo gráfico es con el editor de conexiones de red en configuración manual para IPv4.

En consola sólo hay que editar el archivo:






En el agregamos la siguiente línea en donde establecemos que nuestro DNS es el servidor con la IP 10.9.8.50:




Ya con esto nuestroa clientes podrán consultar a nuestro DNS.



Como comprobar la resolución de nombres de dominio

Se pueden utilizar los comandos nslookup y dig, la diferencia es que dig nos manda un poco más de información.

Comprobar con nslookup:






Comprobar con dig:






Y bueno así es como se puede configurar un DNS para una LAN de forma rápida y sencilla.

Cualquier duda comenten. Saludos!

Comentarios

  1. muy buen articulo!!! aprovecho para realizarte una consulta que ando un poco perdido

    necesito instalar algunas de las versiones de bind 9.8.x la cual la realizo sin ningún problema, pero el tema está en que, nose donde me quedan los archivos de configuración?

    Consulto esto por que con la instalación desde apt-get me instala la versión 9.7.x y está me genera el named.conf, named.conf.local etc etc, pero la instalación manual NO.

    Debo de generar estos archivos a mano?? lo mismo con el script de inicio.

    he visto muchos post sobre instalación y configuración pero son con la versión que trae el apt-get.

    Saludos y gracias!!!

    ResponderEliminar
  2. Así es, puedes generarlos a mano. Igual copiate los que si te genera la instalación de apt-get para que tengas una guía. Cualquier problema que tengas lo vuelves a comentar aquí para ver como le hacemos.
    O si quieres que te pase el de script. ¿Es para Fedora o Ubuntu?

    ResponderEliminar
  3. lo habras hecho de casualidad en fedora 18 o 17 modo gráfico.

    ResponderEliminar
  4. buenas noches señora blanca es que me interesa el contenido de su blog aun sigues al tanto de este? para poder comunicarnos? que este muy bien

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Como calcular permisos de umask

Configuración de un DNS IPv6 local en Linux con Bind

Permisos Unix: Los bits SUID, SGID y sticky