Servidor de nombres DNS

De XTech Capacitacion

Tabla de contenidos

¿Qué es el DNS?

DNS es un sistema jerárquico con estructura de árbol. El inicio se escribe "." y se denomina raíz, al igual que en las estructuras de datos en árbol. Bajo la raíz se hallan los dominios de más alto nivel (TLD, del inglés, Top Level Domain), cuyos ejemplos más representativos son ORG, COM, EDU y NET, si bien hay muchos más.

El DNS como un árbol de búsqueda, será capaz de encontrar en él los nodos buscados.

Cuando se busca una máquina, la consulta se ejecuta recursivamente en la jerarquía, empezando por la raíz. Si se desea encontrar la dirección IP de www.yahoo.com., el servidor de nombres (del inglés, nameserver) tiene que empezar a preguntar en algún sitio.

Empieza mirando en su caché. Si conoce la respuesta, pues la había buscado anteriormente y guardado en dicha caché, contestará directamente. Si no la sabe, entonces eliminará partes del nombre, empezando por la izquierda, comprobando si sabe algo de yahoo.com., luego de com. y, finalmente, de ".", del cual siempre se tiene información ya que se encuentra en uno de los ficheros de configuración en el disco duro.

A continuación preguntará al servidor "." acerca de www.yahoo.com. Dicho servidor "." no sabrá la contestación, pero ayudará a nuestro servidor en su búsqueda dándole una referencia de dónde seguir buscando. Estas referencias llevarán a nuestro servidor hasta el servidor de nombres que conoce la respuesta.

Otro concepto son los dominios in-addr.arpa. Estos dominios nos permite hacer consultas de dominios, teniendo el IP correspondiente. Es decir, si en vez de tener el dominio de Yahoo, tenemos el IP, y queremos saber que dominio esta apuntado ese IP, se lo proporcionamos al Nameserver y este podrá encontrarlo.


Introducción

BIND (acrónimo de Berkeley Internet Name Domain) es una implementación del protocolo DNS y provee una implementación libre de los principales componentes del Sistema de Nombres de Dominio, los cuales incluyen:

  • Un servidor de sistema de nombres de dominio (named).
  • Una biblioteca resolutoria de sistema de nombres de dominio.
  • Herramientas para verificar la operación adecuada del servidor DNS (bind-tools).

Procedimientos Preparativos

Idealmente se deben definir primero los siguiente datos:

  1. Dominio a resolver.
  2. Servidor de nombres principal (SOA). Éste debe ser un nombre que ya esté plenamente resuelto.
  3. Lista de todos los servidores de nombres (NS) que se utilizarán para efectos de redundancia. Éstos deben ser nombres que ya estén plenamente resueltos.
  4. Cuenta de correo del administrador responsable de esta zona. Dicha cuenta debe existir y no debe pertenecer a la misma zona que se está tratando de resolver.
  5. Al menos un servidor de correo (MX), con un registro A, nunca CNAME.
  6. IP predeterminada del dominio.
  7. Sub-dominios dentro del dominio (www, mail, ftp, ns, etc.) y las direcciones IP que estarán asociadas a estos.

Es importante tener bien en claro que los puntos 2, 3 y 4 involucran datos que deben existir previamente y estar plenamente resueltos por otro servidor DNS; Lo anterior quiere decir no pueden utilizar datos que sean parte o dependan del mismo dominio que se pretende resolver. De igual modo, el servidor donde se implementará el servicio de DNS deberá contar con un nombre previa y plenamente resuelto.

Como regla general se generará una zona de reenvío por cada dominio sobre el cual se tenga autoridad plena y absoluta y se generará una zona de resolución inversa por cada red sobre la cual se tenga plena y absoluta autoridad. es decir, si se es propietario del dominio «cualquiercosa.com», se deberá generar el fichero de zona correspondiente a fin de resolver dicho dominio. Por cada red con direcciones IP privadas sobre la cual se tenga control y plena y absoluta autoridad, se deberá generar un fichero de zona de resolución inversa a fin de resolver inversamente las direcciones IP de dicha zona. Regularmente la resolución inversa de las direcciones IP públicas es responsabilidad de los proveedores de servicio ya que son estos quienes tienen la autoridad plena y absoluta sobre dichas direcciones IP.

Todos los ficheros de zona deben pertenecer al usuario «named» a fin de que el daemon named pueda acceder a estos o bien modificarlos en el caso de tratarse de zonas esclavas. Creación de los ficheros de zona.

Los siguientes corresponderían a los contenidos para los ficheros de zona requeridos para la red local y por el NIC con el que se haya registrado el dominio. Note por favor que en las zonas de reenvío siempre se especifica al menos un Mail Exchanger (MX) y que se utilizan tabuladores (tecla TAB) en lugar de espacio. Solo necesitará sustituir nombres y direcciones IP, y quizá añadir nuevas entradas para complementar su red local.

Variables/Directivas

$TTL 1d: directiva obligatoria a partir de la versión 9 de Bind, indica el tiempo de vida (TTL, del inglés, Time To Live) de la información contenida en el fichero. Por defecto se usan segundos, pero pueden usarse también semanas ($TTL 1w), días ($TTL 7d), horas ($TTL 168h) y minutos ($TTL 10080m).

$ORIGIN mi-red-local.org.: define cual va a ser la Zona de la DB. Yo no la incluí porque por default va a tomar la zona especificada en la configuración (el valor marcado con un (1) en el archivo de configuración). Esta variable se puede usar con el valor @ o va a completar los dominios que no terminen en .. Por ejemplo: www va a ser reemplazado por www.$ORIGIN o www.@ que en definitiva, en nuestro ejemplo, es mi-red-local.org.

SOA: el registro SOA (del inglés, Start Of Authority) se encuentra siempre tras las directivas y proclama información relevante sobre la autoridad de un dominio al servidor de nombres. Es siempre el primer recurso en un fichero de zona. El @ es la zona a la cual vamos a definir dominios en este archivo. El esquema del SOA es el siguiente:

@ IN SOA primary-name-server hostmaster-email (
 serial-number
 time-to-refresh
 time-to-retry
 time-to-expire
 minimum-TTL )

serial-number: es un número que se incrementa cada vez que se modifica un fichero de una zona, de forma que Bind se dé cuenta de que tiene que recargar esta zona.

time-to-refresh: indica a los servidores slave cuánto tiempo deben esperar antes de preguntar a su servidor master si se ha hecho algún cambio en la zona.

time-to-retry: indica el tiempo que el slave tiene que esperar para reintentar conectarse con el master en caso que este falle.

time-to-expire: indica al slave que si en ese tiempo no hubo comunicación con el master, toda la información del primero se vuelve inservible y deja de responder peticiones.

minimum-TTL: indica a los DNS que almacenen la información de esta DB, que mantengan la misma en su caché el tiempo indicado en este campo.

NS: define los Nameserver que tienen autoridad sobre los dominios espeficados a la derecha. Estructura:

dominio IN NS nameserver

A (Address): define un IP para el dominio. Estructura:

dominio IN A IP-Address

CNAME (Canonical NAME): Define un alias para el dominio. El dominio tiene que tener una definición de Address. Estructura:

alias IN CNAME dominio

MX (Mail eXchange): Define cual va a ser el servidor de mail de este dominio, el número indica el nivel de importancia entre los servidores de mail, donde el 0 es el más importante. Estructura:

dominio IN MX level[0-999] mail-server

Zona de reenvío red local

/etc/bind/mi-red-local.org.zone

$TTL 86400
@		IN	SOA	mi-red-local.org.	jperez.mi-red-local.org. (
8 ; serial
               28800 ; refresh
               7200 ; retry
               604800 ; expire
               86400 ; ttl
               )
@		IN	NS	dns
@		IN	MX 10 mail
@		IN	A	192.168.1.1
intranet	IN	A	192.168.1.1
maquina2	IN	A	192.168.1.2
maquina3	IN	A	192.168.1.3
maquina4	IN	A	192.168.1.4
www		IN	CNAME	intranet
mail		IN	A	192.168.1.1
ftp		IN	CNAME	intranet
dns		IN	CNAME	intranet

Zona de resolución inversa red local

/etc/bind/1.168.192.in-addr.arpa.zone

$TTL 86400
@		IN	SOA	mi-red-local.org.	jperez.mi-red-local.org. (
               2005030401 ; serial
               28800 ; refresh
               7200 ; retry
               604800 ; expire
               86400 ; ttl
               )
@		IN	NS	dns.mi-red-local.org.
1	IN	PTR	intranet.mi-red-local.org.
2	IN	PTR	maquina2.mi-red-local.org.
3	IN	PTR	maquina3.mi-red-local.org.
4	IN	PTR	maquina4.mi-red-local.org.

Zona de reenvío del dominio

/etc/bind/mi-dominio.org.zone

$TTL 86400
@		IN	SOA	nombre-plenamente-resuelto.	jperez.cuenta.existente. (
8 ; serial
               28800 ; refresh
               7200 ; retry
               604800 ; expire
               86400 ; ttl
               )
@		IN	NS	dns
@		IN	MX 10 mail
@		IN	A	148.243.59.1
servidor	IN	A	148.243.59.1
www		IN	CNAME	servidor
mail		IN	A	148.243.59.1
ftp		IN	CNAME	servidor
dns		IN	CNAME	servidor

Zona de resolución inversa del dominio

/etc/bind/1.243.148.in-addr.arpa.zone

$TTL 86400
@		IN	SOA	nombre-plenamente-resuelto.	jperez.cuenta.existente. (
               2005030401 ; serial
               28800 ; refresh
               7200 ; retry
               604800 ; expire
               86400 ; ttl
               )
@		IN	NS	dns.mi-dominio.org.
1	IN	PTR	servidor.mi-dominio.org.
2	IN	PTR	maquina2.mi-dominio.org.
3	IN	PTR	maquina3.mi-dominio.org.
4	IN	PTR	maquina4.mi-dominio.org. 


Recuerde que cada vez que haga algún cambio en algún fichero de zona, deberá cambiar el número de serie (serial) a fin de que tomen efecto los cambios de inmediato cuando se reinicie el daemon named, ya que de otro modo tendría que reiniciar el equipo, algo poco conveniente.

Archivo /etc/bind/named.conf

options {
       directory "/var/named/";
	forwarders { 200.33.146.209; 200.33.146.217; };
       forward first;
};
zone "." {
       type hint;
       file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
       type master;
       file "0.0.127.in-addr.arpa.zone";
       allow-update { none; };
};
zone "localhost" {
       type master;
       file "localhost.zone";
       allow-update { none; };
};
zone "mi-dominio.org" {
       type master;
       file "mi-dominio.org.zone";
       allow-update { none; };
};
zone "1.243.148.in-addr.arpa" {
       type master;
       file "1.243.148.in-addr.arpa.zone";
       allow-update { none; };
};
zone "mi-red-local.org" {
       type master;
       file "mi-red-local.org.zone";
       allow-update { none; };
};
zone "1.168.192.in-addr.arpa" {
       type master;
       file "1.168.192.in-addr.arpa.zone";
       allow-update { none; };
};

Seguridad adicional en DNS para uso exclusivo en red local.

Si se va a tratar de un servidor de nombres de dominio para uso exclusivo en red local, y se quieren evitar problemas de seguridad de diferente índole, puede utilizarse el parámetro allow-query, el cual servirá para especificar que solo ciertas direcciones podrán realizar consultas al servidor de nombres de dominio. Se pueden especificar directamente direcciones IP, redes completas o listas de control de acceso que deberán definirse antes de cualquier otra cosa en /var/named/chroot/etc/named.conf.

acl "redlocal" { 192.168.1.0/24; 192.168.2.0/24; 192.168.3.0/24; }
options {
       directory "/var/named/";
       forwarders { 200.33.146.209; 200.33.146.217; };
       forward first;
       allow-query { redlocal; 192.168.1.15; 192.168.1.16; };
};
zone "mi-red-local.org." {
       type master;
       file "mi-red-local.org.zone";
       allow-update { none; };
};
zone "1.168.192.in-addr.arpa" {
       type master;
       file "1.168.192.in-addr.arpa.zone";
       allow-update { none; };
};

Las zonas esclavas

Las zonas esclavas se refieren a aquellas hospedadas en servidores de nombres de dominio secundarios y que hacen las funciones de redundar las zonas maestras en los servidores de nombres de dominio primarios. El contenido del fichero de zona es el mismo que en servidor primario. La diferencia está en la sección de texto utilizada en /var/named/chroot/etc/named.conf, donde las zonas se definen como esclavas y definen los servidores donde está hospedada la zona maestra.

Fichero /var/named/chroot/etc/named.conf Servidor DNS secundario.

zone "mi-dominio.org" {
       type slave;
       file "mi-dominio.org.zone";
       masters { 192.168.1.254; };
};
zone "1.243.148.in-addr.arpa" {
       type slave;
       file "1.243.148.in-addr.arpa.zone";
       masters { 192.168.1.254; };
};
zone "mi-red-local.org" {
       type slave;
       file "mi-red-local.org.zone";
       masters { 192.168.1.254; };
};
zone "1.168.192.in-addr.arpa" {
       type slave;
       file "1.168.192.in-addr.arpa.zone";
       masters { 192.168.1.254; };
};


Adicionalmente, si desea incrementar seguridad y desea especificar en el servidor de nombres de dominio primario que servidores tendrán permitido ser servidores de nombres de dominio secundario, es decir, hacer transferencias, puede utilizar el parámetro allow-transfer del siguiente modo:

Fichero /var/named/chroot/etc/named.conf Servidor DNS Primario.

zone "mi-dominio.org" {
       type master;
       file "mi-dominio.org.zone";
       allow-update { none; };
       allow-transfer { 200.33.146.217; 200.33.146.209; };
};
zone "1.243.148.in-addr.arpa" {
       type master;
       file "1.243.148.in-addr.arpa.zone";
       allow-update { none; };
       allow-transfer { 200.33.146.217; 200.33.146.209; };
};
zone "mi-red-local.org" {
       type master;
       file "mi-red-local.org.zone";
       allow-update { none; };
       allow-transfer { 192.168.1.15; 192.168.1.16; };
};
zone "1.168.192.in-addr.arpa" {
       type master;
       file "1.168.192.in-addr.arpa.zone";
       allow-update { none; };
       allow-transfer { 192.168.1.15; 192.168.1.16; };
};

Reinicialización y depuración del servicio.

Al terminar de editar todos los ficheros involucrados, solo bastará reiniciar el servidor de nombres de dominio.

/sbin/service named restart

Si queremos que el servidor de nombres de dominio quede añadido entre los servicios en el arranque del sistema, deberemos ejecutar lo siguiente a fin de habilitar named junto con el arranque del sistema:

/sbin/chkconfig named on

Realice prueba de depuración y verifique que la zona haya cargado con número de serie:

tail -80 /var/log/messages |grep named

Lo anterior, si está funcionando correctamente, debería devolver algo parecido a lo mostrado a continuación:

Aug 17 17:15:15 linux named[30618]: starting BIND 9.2.2 -u named
Aug 17 17:15:15 linux named[30618]: using 1 CPU
Aug 17 17:15:15 linux named: Iniciación de named succeeded
Aug 17 17:15:15 linux named[30622]: loading configuration from '/etc/named.conf'
Aug 17 17:15:15 linux named[30622]: no IPv6 interfaces found
Aug 17 17:15:15 linux named[30622]: listening on IPv4 interface lo, 127.0.0.1#53
Aug 17 17:15:15 linux named[30622]: listening on IPv4 interface eth0, 192.168.1.1#53
Aug 17 17:15:15 linux named[30622]: command channel listening on 127.0.0.1#953
Aug 17 17:15:16 linux named[30622]: zone 0.0.127.in-addr.arpa/IN: loaded serial 3
Aug 17 17:15:16 linux named[30622]: zone 1.168.192.in-addr.arpa/IN: loaded serial 2004022602
Aug 17 17:15:16 linux named[30622]: zone localhost/IN: loaded serial 1
Aug 17 17:15:16 linux named[30622]: zone mi-dominio.com.mx/IN: loaded serial 2004022602
Aug 17 17:15:16 linux named[30622]: running
Aug 17 17:15:16 linux named[30622]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2004022602)
Aug 17 17:15:16 linux named[30622]: zone mi-dominio.com.mx/IN: sending notifies (serial 2004022602)
Herramientas personales