Product SiteDocumentation Site

10.6. Servidores de nombres de dominio (DNS)

10.6.1. Principio y mecanismo

El servicio de nombres de dominio (DNS: «Domain Name Service») es un componente fundamental de Internet: asocia nombres de equipo con direcciones IP (y viceversa), lo que permite utilizar www.debian.org en lugar de 5.153.231.4 o 2001:41c8:1000:21::21:4.
Los registros DNS se organizan en zonas; cada zona coincide con un dominio (o subdominio) o un rango de direcciones IP (ya que generalmente se proveen direcciones IP en rangos consecutivos). Un servidor primario es autoridad sobre los contenidos de una zona; los servidores secundarios, generalmente en otras máquinas, proveen copias de la zona primaria actualizadas regularmente.
Cada zona puede contener registros de varios tipos (registros de recursos: «Resource Records»):
  • A: dirección IPv4.
  • CNAME: alias (nombre canónico: «canonical name»).
  • MX: intercambio de correo («mail exchange»), un servidor de correo. Los otros servidores de correo utilizan esta información para encontrar a dónde redirigir los emails enviados a una dirección particular. Cada registro MX tiene una prioridad. Primero se intenta el servidor con mayor prioridad, con el menor número (revise el recuadro VOLVER A LOS CIMIENTOS SMTP); se contactan los demás servidores en orden decreciente de prioridad si el primero no responde.
  • PTR: asociación de una dirección IP con un nombre. Se almacenan estos registros en una zona de «DNS inverso» cuyo nombre está basado en el rango de direcciones IP. Por ejemplo, 1.168.192.in-addr.arpa es la zona que contiene las asociaciones inversas de todas las direcciones en el rango 192.168.1.0/24.
  • AAAA: dirección IPv6.
  • NS: asocia un nombre con un servidor de nombres. Cada dominio debe tener al menos un registro NS. Estos registros apuntan al servidor DNS que puede responder consultas sobre este dominio; generalmente apuntan a los servidores primarios y secundarios del dominio. Estos registros también permiten delegaciones de DNS; por ejemplo, la zona falcot.com puede incluir un registro NS para internal.falcot.com, lo que significa que otro servidor administra la zona internal.falcot.com. Por supuesto, este servidor debe declarar una zona internal.falcot.com.
El servidor de nombres de referencia, Bind, fue desarrollado y es mantenido por ISC (consorte de software de Internet: «Internet Software Consortium»). Está disponible en Debian en el paquete bind9. La versión 9 provee dos cambios importantes comparada con versiones anteriores. Primero, el servidor DNS ahora puede ejecutar como un usuario sin privilegios para que una vulnerabilidad de seguridad en el servidor no provea permisos de root al atacante (como pasaba frecuentemente con las versiones 8.X).
Lo que es más, Bind es compatible con el estándar DNSSEC para firmar (y, por lo tanto, autenticar) registros DNS, lo que permite bloquear datos apócrifos durante ataques con intermediarios («man-in-the-middle»).

10.6.2. Configuración

Archivos de configuración de bind, sin importar su versión, tienen la misma estructura.
Los administradores de Falcot crearon una zona primaria falcot.com para almacenar información relacionada con este dominio y una zona 168.192.in-addr.arpa para la asociación inversa de direcciones IP en las redes locales.
Los siguientes extractos de configuración, de los archivos de Falcot, pueden servirle como punto de partida para configurar un servidor DNS:

Ejemplo 10.12. Extracto de /etc/bind/named.conf.local

zone "falcot.com" {
        type master;
        file "/etc/bind/db.falcot.com";
        allow-query { any; };
        allow-transfer {
                195.20.105.149/32 ; // ns0.xname.org
                193.23.158.13/32 ; // ns1.xname.org
        };
};

zone "internal.falcot.com" {
        type master;
        file "/etc/bind/db.internal.falcot.com";
        allow-query { 192.168.0.0/16; };
};

zone "168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168";
        allow-query { 192.168.0.0/16; };
};

Ejemplo 10.13. Extracto de /etc/bind/db.falcot.com

; Zona falcot.com 
; admin.falcot.com. => contacto de la zona: admin@falcot.com
$TTL    604800
@       IN      SOA     falcot.com. admin.falcot.com. (
                        20040121        ; Serial
                         604800         ; Refresco
                          86400         ; Reintento
                        2419200         ; Expiración
                         604800 )       ; TTL de caché negativo
;
; El @ hace referencia al nombre de la zona («falcot.com» aquí)
; o a $ORIGIN (origen) si se utilizó esta directiva
;
@       IN      NS      ns
@       IN      NS      ns0.xname.org.

internal IN      NS      192.168.0.2

@       IN      A       212.94.201.10
@       IN      MX      5 mail
@       IN      MX      10 mail2

ns      IN      A       212.94.201.10
mail    IN      A       212.94.201.10
mail2   IN      A       212.94.201.11
www     IN      A       212.94.201.11

dns     IN      CNAME   ns

Ejemplo 10.14. Extracto de /etc/bind/db.192.168

; Zona inversa para 192.168.0.0/16
; admin.falcot.com. => contacto de la zona: admin@falcot.com
$TTL    604800
@       IN      SOA     ns.internal.falcot.com. admin.falcot.com. (
                        20040121        ; Serial
                         604800         ; Refresco
                          86400         ; Reintento
                        2419200         ; Expiración
                         604800 )       ; TTL de caché negativo

        IN      NS      ns.internal.falcot.com.

; 192.168.0.1 -> arrakis
1.0     IN      PTR     arrakis.internal.falcot.com.
; 192.168.0.2 -> neptune
2.0     IN      PTR     neptune.internal.falcot.com.

; 192.168.3.1 -> pau
1.3     IN      PTR     pau.internal.falcot.com.