Instalar y configurar servidor DNS en Ubuntu Linux

8 octubre, 2009 por Herman Barrantes Dejar una respuesta »

Según la definición que podemos encontrar en Wikipedia un DNS es:

El sistema de nombre de dominio (en inglés Domain Name System, DNS) es un sistema de nomenclatura jerárquica para computadoras, servicios o cualquier recurso conectado al internet o a una red privada. Este sistema asocia información variada con nombres de dominios asignado a cada uno de los participantes. Su función más importante, es traducir (resolver) nombres inteligibles para los humanos en identificadores binarios asociados con los equipos conectados a la red, esto con el propósito de poder localizar y direccionar estos equipos mundialmente.

A través de este post se verán las generalidades del servicio de resolución de nombres, la configuración y mantenimiento de un servicio de nombres con BIND9, bajo la plataforma Linux, aunque la mayoría de estos conceptos se pueden aplicar a cualquier servicio de DNS sobre otras plataformas.

Regularmente, todos los equipos que están en Internet o una Intranet tienen una dirección IP única que las identifica, generalmente dividido en cuatro segmentos u “octetos“, cuya representación es, por ejemplo, “172.24.17.69“, pero el recordar todas las direcciones en este formato sería sumamente difícil, por lo que utilizamos los nombres de dominio para referenciarlos.

Existen varios productos que realizan esta función y en todas las plataformas, pero el más usado es BIND (Berkeley Internet Name Domain), que es distribuido bajo la GNU GPL. BIND es el servidor de nombres de dominio más popular en Internet, que trabaja en todas las plataformas informáticas principales y se caracteriza por su flexibilidad y seguridad.

La estructura básica del DNS es similar a un árbol, donde se tiene una raíz o root, los Dominios de Nivel Principal (Top Level Domains) y los dominios de segundo nivel.

Los nombres de dominio completamente calificados o FQDN (fully qualified domain name) se componen por lo general del nombre del host, un nombre de dominio secundario y un nombre de dominio primario o de nivel máximo (top-level domain), que son secciones organizadas jerárquicamente.

Arbol DNS

Clic en la imagen para ampliar

Por ejemplo: ‘www.ejemplo.com’. Leyéndolo de derecha a izquierda tenemos un dominio primario (’COM’), un dominio secundario (’EJEMPLO’) y el nombre del host (’WWW’).

Algunos dominios primarios son:

  • org – Organizaciones no lucrativas.
  • com – Organizaciones lucrativas.
  • net – Organizaciones en Internet.
  • gob – Agencias gubernamentales en latinoamérica.
  • mx – Sufijo de México.
  • es – Sufijo de España.

Existen cuatro tipos diferentes de servidores de resolución de nombres:

  • 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. Se considera que como medida de seguridad, se requiere al menos uno de estos, preferentemente independiente de la infraestructura del primario (red, energia eléctrica y ubicación geográfica).
  • 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). Reenvia las peticiones a una lista de servidores de nombres.

Tipos de registros.

Para ofrecer suficiente flexibilidad en la configuración, se pueden declarar diversos tipos de registros, que hacen referencia a la función del host. A continuación veremos los más importantes.

  • A (Address). Es el registro más usado, que define una dirección IP y el nombre asignado al host. Generalmente existen varios en un dominio.
  • MX (Mail eXchanger). Se usa para identificar servidores de correo, se pueden definir dos o más servidores de correo para un dominio, siendo que el orden implica su prioridad. Debe haber al menos uno para un dominio.
  • 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 y pueden declararse varios para un dominio.
  • 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 tiempo de refresco de los servidores secundarios.

Instalar Bind9

Primero que nada instalamos Bind9 ejecutando en un terminal:

$ sudo aptitude install bind9

Configurar Bind9

Nos movemos al directorio donde se instalo bind

$ cd /etc/bind/

Editamos named.conf.local y añadimos la zona “dominio.com“, haciendo referencia a su fichero de configuración:

$ sudo gedit named.conf.local

Para este ejemplo añadiremos una zona llamada dominio.com

zone "dominio.com" {
    type master;
    file "/etc/bind/db.dominio";
};

Creamos el fichero de configuración “db.dominio” a partir de “db.local“:

$ cp db.local db.dominio

Editamos “db.dominio“, reemplazamos la palabra “localhost” por “dominio.com“, cambiamos la IP “127.0.0.1” por la que queramos asignar al dominio y añadimos al final del fichero todos los A, MX y CNAME que queramos, quedando:

;
; BIND data file for local loopback interface
;
$TTL    604800
@   IN  SOA dominio.com. root.dominio.com. (
         2009009071     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@           IN      NS          dominio.com.
@           IN      A           172.24.20.12
@           IN      MX      0   dominio.com.
www         IN      A           172.24.20.12

En este ejemplo vemos primeramente el dominio a resolver, “dominio.com.” y el segundo es la cuenta de correo del administrador, “root.dominio.com.” (Sustituyendo el primer punto por arroba, lo que dejaría “root@dominio.com”). Debemos notar que al final de cada dominio viene un punto, que identifica la raíz de este. El resto de los parámetros son:

  • Serial: es un identificador del archivo, puede tener un valor arbitrario pero se recomienda que tenga la fecha con una estructura AAAA-MM-DD y un consecutivo.
  • Refresco: número de segundos que un servidor de nombres secundario debe esperar para comprobar de nuevo los valores de un registro.
  • Reintentos: número de segundos que un servidor de nombres secundario debe esperar después de un intento fallido de recuperación de datos del servidor primario.
  • Expiración: número de segundos máximo que los servidores de nombre secundarios retendrán los valores antes de expirarlos.
  • TTL mínimo: Significa Time To Live y es el número de segundos que los registros se mantienen activos en los servidores NS caché antes de volver a preguntar su valor real.

Cada vez que se cambia la configuración de BIND9, debemos reiniciar el demonio:

$ sudo /etc/init.d/bind9 restart

Para que nuestra máquina utilice el servidor de DNS que hemos configurado, debemos editar “/etc/resolv.conf” y dejamos únicamente la línea:

nameserver 127.0.0.1

Se debería hacer lo mismo con el resto de máquinas de la intranet que vayan a utilizar el servidor, con la única diferencia que habrá que substituir la IP 127.0.0.1 por la IP que tenga el servidor en la red.

Para comprobar el correcto funcionamiento, utilizamos el comando “host” el cual sirve para resolver dominios:

$ host dominio.com

Tiene que devolver algo como:

dominio.com has address 172.24.20.12
dominio.com mail is handled by 0 dominio.com

Resolución de dominio inversa

Si deseamos también disponer de resolución de dominios inversa, es decir, que podamos preguntar por la IP “172.24.20.12” y el servidor DNS nos diga que pertenece a dominio.com, debemos añadir a “/etc/bind/named.conf.local“:

zone "172.in-addr.arpa" {
    type master;
    file "/etc/bind/db.172";
};

Creamos el archivo de configuración “/etc/bind/db.172” a partir del “/etc/bind/db.127“:

$ cd /etc/bind/
$ cp db.127 db.172

Editamos “/etc/bind/db.172“, substituimos “localhost” por “dominio.com” y cambiamos la última línea:

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@   IN  SOA dominio.com. root.dominio.com. (
        20090090711     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@   IN  NS  dominio.com.
12.20.24   IN  PTR dominio.com.

De forma que, la última línea indica que la IP [172.]24.20.12 (escrita a la inversa y omitiendo el 172 que ya se especifico en “named.conf.local) corresponde al dominio soredes.com

Podemos comprobar su funcionamiento reiniciando el demonio BIND9 y realizando una consulta:

$ /etc/init.d/bind9 restart
$ host 172.24.20.245

12.20.24.172. in-addr.arpa domain name pointer dominio.com

Publicidad

1 comentario

  1. gersua dice:

    muchas gracias encerio!!!! solo aqui lo pude conseguir

Deja un comentario