Named para torpes

Autor:Ignacio Sorribas Mollar.

Introducción

Con este documento se intentará que cualquier persona con conocimientos mínimos de linux, pueda configurar su propio servidor DNS, tanto para realizar busquedas en otros servidores, como para configurar un dominio propio siendo este su servidor principal o maestro.

Para el correcto entendimiento del documento, se realizara un ejemplo de configuración del dominio "midominio.com", suponiendo que para tal dominio, queremos montar un servidor de correo y además, queremos colgar una página web. Para ello, configuraremos los dominios "pop3.midominio.com" y "smtp.midominio.com" para el correo, el "www.midominio.com" para la página web y el "ns0.midominio.com" como nombre público de nuestro servidor DNS. Tambien supondremos que nuestro servidor, tiene una IP valida en internet, la cual será pro ejemplo 192.168.0.1 (realmente ésta dirección IP, no es una IP valida en internet, pero para el ejemplo supondremos que si que lo es). Además, otra de nuestra premisas será que tenemos autoridad sobre dicha IP, por lo tanto podemos configurar la resolución de las dos formas existentes, directa e inversa.


Introducción al demonio named.

Named es un demonio (daemon en ingles) que implementa un servidor DNS (Domain Name System).Es parte de BIND (Berkeley Internet Name Domain), una implementación de los protocolos del sistema de nombres de dominio (DNS). Para su configuración, existe un fichero denominado "named.conf" que se encuentra en el directorio "/etc", asi como un fichero por cada zona que se quiera configurar (los ficheros de zonas, pueden estar en el directorio que queramos, pero hay que especificarlo en el fichero de configuración "named.conf").

A modo de curiosidad, apuntar que todos los servidores de DNS, por defecto funcionan en el puerto 53. Las consultas, se realizan mediante datagramas UDP a dicho puerto, y en el caso de transferencia de zonas de un servidor primario (master) a uno secundario (slave), esta se hace mediante paquetes TCP.


Configurción de Named. El fichero named.conf.

El fichero "named.conf", es el fichero de configuración principal del demonio "named". En el, indicaremos el directorio donde se almacenan los ficheros de zonas, el tipo de resolución que nuestro servidor va a realizar, etc. Este fichero se organiza en bloques entre llaves. Tendremos un primer bloque "options", con la configuración principal del servidor (directorio de zonas, recursion o no, etc) que trataremos más adelante, y despues tendremos un bloque por cada zona donde podremos especificar restricciones o reglas que solo se cumplirán para dicha zona.

Así pues, un ejemplo de "named.conf" podria ser el siguiente:

// Fichero /etc/named.conf para ns0.midominio.com
options {
 directory "/var/named";// Directorio donde están los ficheros de zona.
}
 
zone "." {
 type hint;// No tenemos autoridad sobre la zona, pero tenemos información de ella en un fichero.
 file "named.ca";// Fichero con info sobre la zona raiz.
}
 
zone "midominio.com" {
 type master;// Este es el servidor de nombres maestro para la zona.
 file "named.midominio.com";// Fichero de zona.
}
 
zone "0.168.192.in-addr.arpa" {
 type master;// Este es el servidor de nombres maestro para la zona.
 file "named.rev";// Fichero de zona de resolución inversa.
}

Todas las zonas especificadas en el fichero "named.conf", excepto la raiz de tipo "hint", son zonas sobre las que el servidor DNS que estamos configurando, va ha ser el servidor autoritativo. El servidor, además de como maestro, se puede configurar como servidor secundario o esclavo, especificando en el atributo "type", la palabra "slave".

Además de las opciones del ejemplo, hay otras que se pueden especificar tanto en los bloques de zona, como en el bloque "options", teniendo en cuenta que lo que va en el bloque "options" se aplica a todas las zonas.

Estas son algunas de las opciones

OpciónDescripciónEjemplo de uso
allow-transferDetermina a que IP o grupo de IPs se pueden transferir las zonas de este servidor.allow-transfer {192.168.0.32;};
recursion [yes]/no;Determina si nuestro servidor debe ser recursivo o norecursion no;
allow-queryDetermina desde que IPs se pueden realizar busquedas utilizando este servidor DNS.
La opción internal del ejemplo, es una lista de IPs que podemos hacer al principio del fichero mediante el comando "acl". Se haría algo así:
acl internal { 192.168.0.1/24; 127.0.0.1/32;};
allow-query { internal; };
allow-updatelfdljlafkallow-update { any; };
allow-recursionIndica desde que IPs se acepta la recursiónallow-recursion { internal; };
forwardersDetermina las IPs de los servidores de nombres a los que redirigir las peticiones.forwarders { 192.168.0.32; };
mastersEn un servidor esclavo, indica la IP del servidor maestromasters {192.168.0.254;};

El servidor de nombres, se puede configurar en el caso de que no tengamos ninguna zona de manera que simplemente redirija las peticiones de los clientes a otro servidor de nombres, o con la opción de solo cache, donde el servidor pregunta a otros servidores para la resolución, pero despues se guarda en la cache las direcciones que ha resuelto, y si se le vuelven a preguntar, las devuelve sin necesidad de hacer peticiones a otros servidores. Por defecto, named hace cache de las direcciones que resuelve, las cuales están en la cache el tiempo que indica el TTL de la dirección. La opción de redirigir las peticiones a otro servidor, se consigue con la directiva "forwarders" de "named.conf"

La recursión en un servidor de nombres, indica si el servidor es un servidor solamente autoritativo o no. Un servidor solo autoritativo es un servidor no recursivo, o sea un servidor que devolverá la resolución de la dirección que se busca, solo si esta es una dirección correspondiente a una zona de la que el servidor tiene su autoridad. Si no es así, devolverá una lista de servidores a los que preguntar sobre la dirección buscada. Si el servidor admite recursión (lo hace por defecto), este preguntará a otros servidores si no tiene autoridad sobre la zona de la dirección buscada, hasta que logre hacer la resolución, y despues nos devolvera la respuesta.

Combinando directivas, podemos hacer que el servidor sea recursivo para nuestra red local por ejemplo, y que sea solamente autoritativo para el resto de direcciones.


Configuración de los ficheros de zona para resolución directa.

Los ficheros de zona, se pueden llamar con el nombre que se quiera, pero por comodidad se suelen llamar de la misma manera que el dominio que van describir. Son ficheros con una sintaxis especial, la cual pasamos a explicar a continuación:


@ IN SOA ns0.midominio.com. root.midominio.com. (num serie,tiemp de refresco,tiempo para reintentar,tiempo de expiración,tiempo de vida)

Lo anterior, es lo que va al principio de cada fichero de zona. Despues, de esta entrada, van las entradas de tipo "IN A", "IN NS", "IN CNAME", etc.

En el ejemplo que aqui se plantea, el fichero para nuestra zona "midominio.com" sería de la siguiente forma:

@IN    SOAns0.midominio.com.   root.midominio.com. (
   2003121301; Número de serie.
   3H; Refresco despues de 3 horas.
   15M; Reintentar despues de 15 minutos.
   1W; Expirar despues de una semana.
   1D ); TTL minimo de un día.
  IN    A192.168.0.1
  IN    NSns0.midominio.com.
  IN    MX10 smtp.midominio.com.
ns0IN   A192.168.0.1; ns0.midominio.com tiene la IP 192.168.0.1
wwwIN   CNAMEns0; www.midominio.com es un alias a ns0.midominio.com
smtpIN   CNAMEns0
pop3IN   CNAMEns0


Al principio del fichero, tenemos el registro especial SOA (Start Of Authority o Inicio de Autoridad), que almacena diversos parámetros de la zona de la que es autoritativo el servidor, tales como el TTL o el número de serie. La @ que se encuentra al principio del fichero, en la linea del registro SOA, representa el propio nombre de dominio de la zona que se está configurando. Los nombres que vienen a continuación del registro SOA en al misma línea, son el servidor de nombres autoritativo para este dominio, y la dirección de mail del administrador de la zona, sustituyendo la @ por un punto.

Todos los nombres del fichero que no acaban con un punto, son relativos al dominio "midominio.com", representado por la @. Los que acaban en punto son nombre absolutos, que pueden pertenecer a nuestro dominio o no. Por ejemplo, supongamos que un profesor de la uji tiene un servidor DNS, y se presta ha hacer de servidor de nombres para mi dominio. Entonces en nuestro fichero de zona, pondriamos un registro como:

IN NS    grihander.uji.es.

Notese que el nombre del servidor acaba en punto


Configuración de los ficheros de zona para resolución inversa.


Ahora configuraremos nuestro servidor para hacer la resolución inversa de nuestra dirección IP, lo que significa que a partir de la dirección IP, obtendremos el nombre del host.

En nuestro ejemplo, nuestra IP es 192.168.0.1, lo que es un dir IP que nosotros consideraremos como pública, aunque en realidad no lo es. Tener en cuenta que para configurar la resolución inversa, tenemos que tener autoridad sobre dicha dirección IP. Para nuestro ejemplo, supondremos que tenemos autoridad sobre toda la dirección de clase C "192.168.0".

El fichero quedaría de la siguiente forma:

;fichero de resolución inversa 0.168.192.in-addr.arpa
@IN    SOAns0.midominio.com.   root.midominio.com. (
 2003121302 3H 15M 1W 1D )
1IN   PTRwww.midominio.com.;Asigno a la IP 192.168.0.1 el nombre www.midominio.com
10IN   PTRchiquito.midominio.com.;IP 192.168.0.10 para chiquito.midominio.com

En el caso de la resolución inversa, existe un tipo de dominio especial para denominar las zonas, compuesto por los octetos de la dirección IP en orden inverso, segidos por "in-addr.arpa". Asi, por ejemplo a la dirección 192.168.0.1 le corresponde el nombre "1.0.168.192.in-addr.arpa".

En este tipo de resolución, los nombres se asignan a las direcciones IP mediante el registro PTR.


Delegación de zonas a otros servidores DNS.


Bajo nuestro dominio, podemos crear zonas, y delegar la autoridad sobre estas a otros servidores de nombres. Para ello, crearemos la zona "micasa.midominio.com", y delegaremos la autoridad de esta al servidor "ns0.micasa.midominio.com". Para esto, configuraremos a "ns0.micasa.midominio.com" siguiendo las instrucciones de configuración de las secciones anteriores de este documento, para que responda a las consultas sobre la nueva zona. Una vez configurado este DNS, debemos delegar la zona desde el DNS de "midominio.com". Para esto, añadiremos en el fichero de la zona "named.midominio.com" lo siguiente:

micasa.midominio.com.IN    NSns0.micasa.midominio.com.
ns0.micasa.midominio.com.IN    A192.168.100.10

Las lineas anteriores, indican a cualquier DNS que pregunte sobre el dominio "micasa.midominio.com" que el servidor a quien debe preguntar es a "ns0.micasa.midominio.com", e indican la dirección IP del nuevo servidor, para que se puedan poner en contacto con el.