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
  • La declaración del control de acceso para controlar el servidor
  • 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 ...
  • 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