Servicio DNS

El Sistema de Nombres de Dominio (DNS - Domain Name System) permite asociar nombres de domino con direcciones IP, lo que facilita en gran medida el acceso a las máquinas de la red. Sin DNS referirse a una máquina implica recordar su dirección IP. Trabajar directamente con direcciones IP no es cómodo, porque son difíciles de recordar y porque la dirección IP de una estación puede variar por diferentes motivos. Quien utiliza el nombre de dominio no necesita preocuparse por estos cambios (aunque el servidor DNS debe conocer la IP real en cada caso).

El sistema de nombres de dominio es una base de datos distribuida y jerárquica, y aunque su función principal es asociar los nombres de dominio con direcciones IP también puede guardar otras informaciones. El servicio DNS es uno de los pilares de la red, por eso su disponibilidad debe ser absoluta. Para conseguirlo se utilizan servidores redundantes y se hace uso extensivo de cache para mejorar su rendimiento.

Conceptos relacionados con el DNS

 

Cliente DNS (resolver)
Es el componente que permite consultar a los servidores DNS, todas las estaciones de red cuentan con uno.
Servidor DNS (name server)
Atienden a las consultas realizadas por los clientes. La consulta de un cliente a un servidor puede obligar a este a realizar otra consulta a otro servidor. 
Zona de autoridad
Porciones del espacio de nombres de dominio. Cada zona de autoridad abarca un dominio, y posiblemente incluya a sus subdominios, aunque estos pueden delegarse a otros servidores de nombres.
Dominio de nivel superior (Top Level Domain - TLD)
Etiqueta situada más a la derecha del nombre de dominio. Por ejemplo en elpuig.xeill.net, el TLD es .net que actúa como raíz de todos sus subdominios. Se dividen en dominios genéricos y dominios geográficos.
Subdominio
Cada una de las etiquetas del nombre de dominio que están situadas a la izquierda del TLD.
Nombre de la máquina (hostname)
La etiqueta que está a la izquierda en el nombre de dominio.
Nombre de dominio completamente calificado (Full Qualified Domain Name - FQDN)
Un nombre de dominio completo como proxy.stallman.elpuig.xeill.net, si sólo se especifica proxy no se tiene un FQDN.
Servidores raíz (root servers)
Los servidores DNS forman una jerarquía en la que cada uno es responsable de mantener la información de sus zonas de autoridad. Los servidores raíz tienen autoridad en zona raíz (representada por '.') y son los que delegan la autoridad de los diferentes TLDs en los servidores apropiados.
Resolución directa
Cuando se pregunta al servidor DNS por la dirección IP asociada con un nombre de dominio.
Resolución inversa
Cuando se pregunta al servidor DNS por el nombre de dominio asociado con una dirección IP.
 

Resolución de nombres en el cliente

Cuando una estación quiere comunicarse con otra, de la que sólo conoce su FQDN (por ejemplo proxy.iespuigcastellar.xeill.net), lo primero que debe hacer es obtener la dirección IP asociada con el nombre de dominio. Para ello, dependiendo del contenido del fichero /etc/host.conf se consulta el fichero local /etc/hosts o bien se consulta a los servidores DNS.

El fichero /etc/hosts puede contener una lista de nombres (uno por línea) con sus respectivas direcciones IP. De este modo no es necesaria ninguna petición a través de la red para obtener la dirección de uno de los nombres de dominio contenidos en el fichero. La limitación evidente de este sistema es que el fichero no puede contener todos los nombres de dominio con los que potencialmente la estación se va a querer comunicar.

Ejemplo de fichero /etc/host.conf

order hosts,bind
multi on
nospoof on
spoofalert on

Ejemplo de fichero /etc/hosts

127.0.0.1               localhost
82.151.203.129 iespuigcastellar.xeill.net
145.97.39.155 es.wikipedia.org

Mediante el fichero de configuración /etc/hosts es posible asignar nuevos nombres de dominio a algunas direcciones o bien enmascarar otras.

Cuando se utiliza el cliente DNS para obtener la dirección IP de un nombre de dominio, es preciso examinar el fichero de configuración /etc/resolv.conf para obtener:

  • La lista de servidores DNS  a utilizar (uno por línea precedido por la directiva nameserver)
  • El dominio a utilizar para las consultas que no son un FQDN indicado por la directiva search

Ejemplo de fichero /etc/resolv.conf

search dominiox.intranet
nameserver 62.81.16.132
nameserver 62.81.0.36

Configuración del servidor DNS

De las diferentes posibilidades que existen, BIND es el software más utilizado en Internet. Este servicio utiliza varios ficheros de configuración: en el fichero principal /etc/bind/named.conf se declaran las diferentes zonas y los parámetros de funcionamiento. Para cada zona existirá otro fichero, normalmente en /var/cache/bind, en el que se almacenará la información declarada en la zona.

Fichero: /etc/bind/named.conf

El fichero de configuración de uno de los servidores DNS del centro tiene el siguiente contenido:

options {
directory "/var/named";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
//query-source address * port 53;
//query-source address 192.168.0.5 port 53;
pid-file "/var/run/named/named.pid";
forwarders {
213.176.161.16;
213.176.161.18;
};
forward only;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
type hint;
file "named.ca";
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};

include "/etc/rndc.key";


zone "tierramedia.puigcastellar" IN {
type master;
file "/var/named/tierramedia.puigcastellar.hosts";
};

zone "0.168.192.in-addr.arpa" IN {
type master;
file "0.168.192.in-addr.arpa";
allow-update { none; };
};

zone "asi1.puigcastellar" IN {
type master;
file "/var/named/asi1.puigcastellar.hosts";
};

zone "10.168.192.in-addr.arpa" IN {
type master;
file "10.168.192.in-addr.arpa";
allow-update { none; };
};

zone "asi2.puigcastellar" IN {
type master;
file "/var/named/asi2.puigcastellar.hosts";
};

zone "11.168.192.in-addr.arpa" IN {
type master;
file "11.168.192.in-addr.arpa";
};

zone "esi.puigcastellar" IN {
type master;
file "/var/named/esi.puigcastellar.hosts";
};

zone "12.168.192.in-addr.arpa" IN {
type master;
file "12.168.192.in-addr.arpa";
};

zone "invitados.puigcastellar" IN {
type master;
file "/var/named/invitados.puigcastellar.hosts";
};

zone "13.168.192.in-addr.arpa" IN {
type master;
file "13.168.192.in-addr.arpa";
};

zone "aif.puigcastellar" IN {
type master;
file "/var/named/aif.puigcastellar.hosts";
};

zone "14.168.192.in-addr.arpa" IN {
type master;
file "14.168.192.in-addr.arpa";
};

zone "iespuigcastellar.xeill.net" {
type master;
file "/var/named/iespuigcastellar.xeill.net.hosts";
};

zone "xeill.net" {
type master;
file "/var/named/xeill.net.hosts";
};

// Declaración para ESO-Batx
zone "esobatx.puigcastellar" IN {
type master;
file "/var/named/esobatx.puigcastellar.hosts";
};

zone "16.168.192.in-addr.arpa" IN {
type master;
file "16.168.192.in-addr.arpa";
};

En el fichero se puede observar:

  1. En la sección options se declara:
    • El directorio por defecto para los archivos de zona (/var/named)
    • El fichero para guardar el PID del servidor
    • Los servidores de reenvio. Cuando a nuestro servidor le llegue una consulta que no sepa resolver (no corresponde a sus zonas y no la tiene en su caché) preguntará a uno de estos servidores. Estos son los servidores DNS de la XTEC y son capaces de resolver nombres de dominio de Internet, por ejemplo www.google.com
  2. La declaración del control de acceso para controlar el servidor
  3. La declaración de zonas:
    • Zonas estandar:
      • . (lista de servidores raíz)
      • localhost (zona directa para localhost)
      • 0.0.127.in-addr.arpa (zona inversa para localhost)
    • Zonas propias:
      • tierramedia.puigcastellar (zona directa)
      • 0.168.192.in-addr.arpa (zona inversa)
      • asi1.puigcastellar (zona directa)
      • 10.168.192.in-addr.arpa (zona inversa)
      • etc ...
  4. Para cada zona, se declara el tipo (master) y el fichero de datos (por ejemplo: /var/named/tierramedia.puigcastellar.hosts, si no se especifica la ruta absoluta del fichero se supondrá dentro de /var/named)

 

Directorio de archivos de zona: /var/named

En el directorio /var/named se guardan los archivos de zona. En el servidor de muestra encontramos:

[vcarceler@proxy named]$ ls /var/named/
0.168.192.in-addr.arpa 16.168.192.in-addr.arpa invitados.puigcastellar.hosts named.local_ORIGINAL
0.168.192.in-addr.arpa_BACKUP aif.puigcastellar.hosts localhost.zone named.stats
10.168.192.in-addr.arpa asi1.puigcastellar.hosts localhost.zone_ORIGINAL tierramedia.puigcastellar.hosts
11.168.192.in-addr.arpa asi2.puigcastellar.hosts named.ca tierramedia.puigcastellar.hosts_BACKUP
12.168.192.in-addr.arpa esi.puigcastellar.hosts named.ca_ORIGINAL xeill.net.hosts
13.168.192.in-addr.arpa esobatx.puigcastellar.hosts named_dump.db
14.168.192.in-addr.arpa iespuigcastellar.xeill.net.hosts named.local
[vcarceler@proxy named]$

La mayoría de estos archivos son archivos de zona, entre los que encontramos:

  • Las zonas directas: Son los archivos que tienen por nombre el dominio al que corresponden, por ejemplo: aif.puigcastellar.hosts
  • Las zonas inversas: Son los archivos que tienen por nombre la subred a la que corresponden con los dígitos escritos en orden inverso al habitual, por ejemplo: 0.168.192.in-addr.arpa

Otros ficheros son propios de BIND, como:

FicheroFunción
named.ca Lista de servidores raíz 
named_dump.db
Volcado de la caché de BIND.
named.stats Fichero con estadísticas de uso 

Archivo de zona directa: tierramedia.puigcastellar.hosts

En el servidor de ejemplo, el fichero de la zona directa tierramedia.puigcastellar contiene:

$ttl 38400
tierramedia.puigcastellar. IN SOA valinor.tierramedia.puigcastellar. hostmaster.tierramedia.puigcastellar. (
200203194
10800
3600
604800
38400 )
tierramedia.puigcastellar. IN NS valinor
valinor.tierramedia.puigcastellar. IN A 192.168.0.6
moria.tierramedia.puigcastellar. IN A 192.168.0.1
valinor.tierramedia.puigcastellar. IN HINFO SMP2-PIII GNU/Linux
RED.tierramedia.puigcastellar. IN TXT "CFGS-INFORMATICA"
isengard.tierramedia.puigcastellar. IN A 192.168.0.4
isengard.tierramedia.puigcastellar. IN HINFO PII W2KAS
moria.tierramedia.puigcastellar. IN HINFO RouterRDSI desconocido
proxy.tierramedia.puigcastellar. IN CNAME galadriel
hobbiton.tierramedia.puigcastellar. IN A 192.168.0.3
mates.tierramedia.puigcastellar. IN A 192.168.0.217
biblioteca1.tierramedia.puigcastellar. IN A 192.168.0.231
jetdirectasi2.tierramedia.puigcastellar. IN A 192.168.0.50
jetdirectasi1.tierramedia.puigcastellar. IN A 192.168.0.49
biblioteca2.tierramedia.puigcastellar. IN A 192.168.0.232
laser-btx.tierramedia.puigcastellar. IN A 192.168.0.7
idiomes-1.tierramedia.puigcastellar. IN A 192.168.0.131
idiomes-2.tierramedia.puigcastellar. IN A 192.168.0.132
laser-secretaria.tierramedia.puigcastellar. IN A 192.168.0.212
S-207.tierramedia.puigcastellar. IN A 192.168.0.207
www.tierramedia.puigcastellar. IN A 192.168.0.2
rivendel.tierramedia.puigcastellar. IN A 192.168.0.216
;mordor.tierramedia.puigcastellar. IN A 192.168.0.8
galadriel.tierramedia.puigcastellar. IN A 192.168.0.8
jetdirectaif.tierramedia.puigcastellar. IN A 192.168.0.76
minerva.tierramedia.puigcastellar. IN A 192.168.0.10
gondolin.tierramedia.puigcastellar. IN A 192.168.0.9
voip IN CNAME gondolin
DEPTAIF.tierramedia.puigcastellar. IN A 192.168.0.219
impressora-tae.tierramedia.puigcastellar. IN A 192.168.0.221
TAE-AP.tierramedia.puigcastellar. IN A 192.168.0.229
hpcolor.tierramedia.puigcastellar. IN A 192.168.0.12
annuminas.tierramedia.puigcastellar. IN A 192.168.0.11
laser-dpt.tierramedia.puigcastellar. IN A 192.168.0.161
bilbo.tierramedia.puigcastellar. IN A 192.168.0.13
bosqueviejo.tierramedia.puigcastellar. IN A 192.168.0.14

 

Archivo de zona inversa: 0.168.192.in-addr.arpa

A continuación se incluye un fragmento del fichero correspondiente a la zona inversa de ejemplo anterior:

0.168.192.in-addr.arpa. IN      SOA     tierramedia.puigcastellar. hostmaster.tierramedia.puigcastellar. (
200203177
10800
3600
604800
38400 )
0.168.192.in-addr.arpa. IN NS tierramedia.puigcastellar.

1 PTR moria.tierramedia.puigcastellar.
3 PTR hobbiton.tierramedia.puigcastellar.
4 PTR isengard.tierramedia.puigcastellar.
6 PTR valinor.tierramedia.puigcastellar.

30 PTR E-30.tierramedia.puigcastellar.
31 PTR E-31.tierramedia.puigcastellar.
32 PTR E-32.tierramedia.puigcastellar.
33 PTR E-33.tierramedia.puigcastellar.
34 PTR E-34.tierramedia.puigcastellar.
35 PTR E-35.tierramedia.puigcastellar.
36 PTR E-36.tierramedia.puigcastellar.
37 PTR E-37.tierramedia.puigcastellar.
38 PTR E-38.tierramedia.puigcastellar.
39 PTR E-39.tierramedia.puigcastellar.
40 PTR E-40.tierramedia.puigcastellar.
41 PTR E-41.tierramedia.puigcastellar.
42 PTR E-42.tierramedia.puigcastellar.
43 PTR E-43.tierramedia.puigcastellar.
44 PTR E-44.tierramedia.puigcastellar.

217.0.168.192.in-addr.arpa. IN PTR mates.tierramedia.puigcastellar.
231.0.168.192.in-addr.arpa. IN PTR biblioteca1.tierramedia.puigcastellar.

 

Cabeceras de los archivos de zona

Se trate de una zona directa o de una zona inversa, el archivo ha de comenzar con una cabecera que especifica algunos parámetros de configuración.

$ttl 38400
tierramedia.puigcastellar. IN SOA ns0.tierramedia.puigcastellar. hostmaster.tierramedia.puigcastellar. (
200203194
10800
3600
604800
38400 )
    1. TTL (Time To Live) periodo de validez para la información contenida en la zona, pasado el tiempo debe refrescarse o actualizarse.
    2. Registro SOA (Start Of Authority)
      tierramedia.puigcastellar.      IN      SOA     ns0.tierramedia.puigcastellar. hostmaster.tierramedia.puigcastellar.
      Puede utilizarse el carácter @ para substituir al dominio al que corresponde la zona. De tal manera, que un esquema de la cabecera de archivo de zona puede ser: 
      @ IN SOA <servidor DNS primario> <correo del administrador (cambiando la arroba por . )> (
      <serial-number>
      <time-to-refresh>
      <time-to-retry>
      <time-to-expire>
      <minimun-TTL>
      )
serial-number
Debe incrementarse con cada modificación del archivo de zona, de este modo los servidores esclavos pueden detectar los cambios en los archivos de zona
time-to-refresh
Tiempo que los servidores esclavos (o secundarios) dejan pasar antes de consultar al servidor maestro (o principal) si ha ocurrido algún cambio en la zona
time-to-retry
Tiempo que el esclavo deja pasar antes de reintentar una transferencia de zona
time-to-expire
Si un servidor esclavo no consigue actualizar sus zonas mediante la correspondiente transferencia de zona, pasado este tiempo debe dejar de considerar válida la información de la zona

Tipos de registros DNS

En los archivos de zona se utilizan registros para declarar los recursos que conoce el servidor DNS. Estos registros están especializados de manera que hay un tipo de registro DNS diferente para cada recurso.

Algunos de los tipos de registro básicos son:

 

A
IPV4, traducción directa de nombre a dirección
AAAA
IPV6, traducción directa de nombre a dirección
PTR
Puntero, traducción inversa de dirección a nombre
MX
Mail eXchanger, intercambiador de correo para un dominio
NS
Name Server, identifica a los servidores de una zona, permite delegar subdominios
CNAME
Canonical Name, permite definir nombres alternativos
SRV
Service, permite declarar servicios. De esta manera un cliente puede descubrir de manera automática los servicios que están disponibles en un dominio. 
TXT
Texto, permite asociar un texto arbitrario con un nombre de dominio.

 

Réplicas maestro - esclavo

Puesto que el servicio DNS debe estar disponible de manera permanente, es conveniente montar varias máquinas con autoridad para mantener una zona. En este caso el administrador configurará manualmente el archivo de zona en una de ellas (el servidor maestro) y los servidores esclavos realizarán una transferencia de zona descargando los datos desde el maestro.

Por ejemplo, en el servidor maestro se puede declarar una zona tal que:

        zone "dominio.prueba" {
             type master;
             file "dominio.prueba.hosts";
             allow-transfer { <IPs de los servidores esclavos>; };
        };

Y en los servidores esclavos:

        zone "dominio.prueba" {
             type slave;
             file "dominio.prueba.hosts";
             masters { <IP de Servidor-A>; };
        };

Por supesto en el archivo de zona convendrá declarar con registros NS todos los servidores (sean maestros o esclavos):

$ttl 5
dominio.prueba. IN SOA ns0.dominio.prueba. hostmaster.dominio.prueba. (
1
10800
3600
604800
38400 )
dominio.prueba. IN NS ns0
dominio.prueba. IN NS ns1
ns0.dominio.prueba. IN A 192.168.0.10
ns1.dominio.prueba. IN A 192.168.0.20

Desactivar los forwarders en una zona

En ocasiones, en las prácticas que se realizan en el aula el profesor monta un servidor DNS con autoridad en un TLD inventado (como .prueba), y se delega la autoridad en diferentes servidores DNS que montan los alumnos para sus subdominios (por ejemplo .<login>.prueba). En este caso, si está activo el reenvío de forma global, será necesario desactivarlo para la zona.

        zone "dominio.prueba" {
             type master;
             file "dominio.prueba.hosts";
forwarders { };
};

Consultas a servidores DNS

Para comprobar el correcto funcionamiento de los servidores DNS, o símplemente para recabar información que nos puede ayudar en la resolución de problemas es fundamental contar con herramientas para realizar consultas DNS. A tal fin en GNU/Linux normalmente encontramos instaladas las herramientas host, nslookup y dig.

Dnsmasq

Dnsmasq es una herramienta libre que proporciona una versión ligera de los servidores: DNS, DHCP y TFTP. Está disponible en GNU/Linux y en otros sistemas operativos, teniendo mucho éxito tanto en las distribuciones actuales como en sistemas empotrados en los que los recursos están muy limitados.

En la mayoría de distribuciones actuales de GNU/Linux de escritorio se deja instalado Dnsmasq configurado como un DNS local de reenvío, pudiendo hacer cache de las resoluciones y mejorando el rendimiento. En esos casos se verá que en el fichero /etc/resolv.conf como servidor DNS aparece la IP de loopback.

Más información