Ficheros de zona (Ficheros Maestros)

Las zonas se definen en los ficheros de zona, que se alojan en los servidores de DNS. Estos ficheros deben tener un formato definido y está definido en el RFC 1035 y extendido en RFCs posteriores. Estos ficheros se denominan Ficheros Maestros (Master Files)

Estos ficheros son ficheros de texto orientados a línea aunque los contenidos de los paréntesis se pueden extender a varias líneas. Los ficheros de zona permiten la inclusión de comentarios, estos se inician con un ; y terminan en el final de línea. Los ficheros maestros contienen directivas y RR.

Se definen tres directivas de zona (Bind permite una cuarta, $GENERATE):

$ORIGIN
Define la base con la que se completan los nombres no cualificados, que son aquellos que no acaban en un .. Los valores de $ORIGIN deben ser nombres cualificados (es decir que acaben en .) y que por tanto convierten los nombres no cualificados en nombres cualificados cuando se añaden a ellos. El valor de $ORIGIN se utiliza en el procesado del fichero para cualificar los nombres no cualificados y para substituir las ocurrencias de @ por su valor.

El formato de la directiva es:

$ORIGIN       example.org.
$INCLUDE
Permite la inclusión de un fichero externo que incluya directivas y registros de recursos. Como regla general se debe suponer que no se pueden incluir directivas $INCLUDE dentro de ficheros incluidos.

El formato de la directiva es:

$INCLUDE      <fichero> [nombre-de-dominio]

El nombre de dominio es opcional y si se indica se utilizará como $ORIGIN en el fichero incluido, adicionalmente en el fichero incluido se pueden incluir directivas $ORIGIN.

$TTL
Time To Live, es el valor por defecto del campo de TTL en los RR, el cual indica el tiempo máximo que un servidor de cache puede almacenar los RR. El TTL por defecto se utiliza en aquellos RR que no tienen definido un TTL explícitamente. Si no se indica el TTL se define en segundos, aunque en la mayor parte de servidores de DNS es posible indicarlo en otras unidades:
  • Horas: 1h es una hora o 3600 segundos
  • Días: 2d son dos días, es decir 172800 segundos
  • Semanas: 3w son 3 semanas o 1814400 segundos

Excepto en caso en los que se prevea que un dominio va a cambiar se recomienda utilizar valores de TTL elevados, variando entre un día y varias semanas. En general es costumbre utilizar TTLs de dos días (valor por defecto si no se indica), lo cual significa que los cambios tardan dos días en propagarse, es posible también reducir ese valor cuando se prevé un cambio a fin de reducir el periodo de transición.

El formato de la directiva es:

$TTL          <tiempo>
$GENERATE
Se trata de una extensión del servidor de DNS Bind que sirve para la generación se secuencias repetitivas de RR, generalmente se utiliza para generar registros PTR.

El formato de la directiva es:

$GENERATE <lhs> <tipo> <rhs>

Ejemplo:

$ORIGIN 1.168.192.addr-in.arpa.
$GENERATE 1-127 $ PTR $.host.example.org.

Que genera:

1.1.168.192.addr-in.arpa.   IN PTR 1.host.example.org.
2.1.168.192.addr-in.arpa.   IN PTR 2.host.example.org.
3.1.168.192.addr-in.arpa.   IN PTR 3.host.example.org.
4.1.168.192.addr-in.arpa.   IN PTR 4.host.example.org.
...
127.1.168.192.addr-in.arpa. IN PTR 127.host.example.org.

Los ficheros de zona siempre empiezan con la declaración de las directivas $ORIGIN y $TTL y a continuación siempre va un registro de tipo SOA (Start Of Authority), en este registro se definen los parámetros globales de la zona y sólo debe haber un registro por zona. El formato de un registro SOA es el siguiente:

;Nombre-zona    TTL      Clase   RR  Servidor-DNS      Dirección-de-correo
example.org.    172800   IN      SOA dns1.example.org. hostmaster.example.org. (
                                   1  ; Número de serie
                                   1d ; Refresco
                                   1d ; Reintento
                                   4w ; Caducidad
                                   3h ; TTL mínimo
                                   )
Nombre-zona
Es el nombre de la zona que contiene el fichero, se puede indicar tanto el nombre cualificado (FQDN, de Fully Qualified Domain Name en inglés, y siempre acaba en un punto) como una @ que se substituye por el valor $ORIGIN.
TTL
TTL del registro, si no se indica se utilizará el valor por defecto.
Clase
Familia de protocolos, siempre que estemos trabajando con direcciones de Internet IN.
RR
Registro, en este caso SOA.
Servidor-DNS
Servidor de DNS principal de la zona, debería ser el servidor que el administrador actualiza y el que contiene la información autoritativa de la zona. Si el nombre no acaba en . se completará con el contenido de $ORIGIN para obtener el FQDN.
Dirección-de-correo
Es la dirección de correo del administrador (generalmente el contacto técnico) de la zona substituyendo la @ por un .. Es costumbre utilizar la dirección de correo hostmaster.example.org., que corresponde a hostmaster@example.org. En caso que la dirección de correo tenga un punto en la parte de nombre de usuario (por ejemplo host.master@example.org) se debe escapar este punto con una \ (host\.master.example.org).
Número de serie
Es un número entero (entero de 32 bits sin signo) que se debe incrementar cada vez que se modifica la zona. El RFC 1912 recomienda el formato YYYYMMDDnn que corresponde a año, mes, día y número de versión, de esta manera se consigue un número entero que se incrementa en cada modificación y además indica la fecha en la que se realizó la última modificación.
Refresco
Periodo de tiempo en segundos (entero de 32 bits) que indica la frecuencia con la que los servidores secundarios deben actualizar la información desde el servidor primario.
Reintento
Periodo de tiempo en segundos (entero de 32 bits) que indica el tiempo que los servidores secundarios deben esperar para actualizar la información desde el servidor primario cuando un intento falla.
Caducidad
Periodo de tiempo (entero de 32 bits) a partir del cual la zona ya no es autoritativa. Este valor se utiliza por los servidores secundarios para determinar el fin del periodo de validez de la zona.
TTL mínimo
TTL mínimo (entero de 32 bits sin signo) que puede asignarse a los RR de la zona. Es también el TTL recomendado por el RFC 2308 para las respuestas negativas (NXDOMAIN).

Dentro de una zona existen otros dos elementos fundamentales, los registros NS y MX:

Registros NS
Indican los servidores de nombres autoritativos para la zona, aunque también se utilizan para realizar delegaciones, uno de ellos es el servidor primario, el servidor que contiene la información original, y los servidores secundarios, que replican la información del primario. El servidor primario además utiliza estos RR como valores por defecto de a que servidores se deben enviar notificaciones de cambio cuando la zona cambia.
Registros MX
Indican los gestores de correo para el dominio y son esenciales para el correcto funcionamiento del protocolo de gestión de correo SMTP (Simple Mail Transfer Protocol). Tienen la particularidad que el campo RDATA se compone de dos elementos, un entero de 16 bits indicando la prioridad (valores bajos indican una mayor prioridad) y un campo de texto que contiene un nombre de dominio, este nombre de dominio debe ser un registro A (o AAAA en caso de IPv6) y nunca debe ser un CNAME.

Este registro lo utiliza el protocolo SMTP para determinar los nombres de los servidores de correo de manera que cuando un servidor SMTP debe entregar un correo a la dirección usuario@example.org el servidor SMTP busca el registro MX de mayor prioridad para el dominio example.org y le entrega el correo. Si este servidor no estuviese disponible recurrirá al servidor indicado por el registro MX de prioridad inmediatamente inferior y así sucesivamente hasta encontrar un servidor SMTP activo o agotar los registros MX.

Ejemplo:

example.org.    172800 IN      MX      10 mx1.example.org.
                172800 IN      MX      20 mx2.example.org.

En este caso el registro MX de mayor prioridad sería mx1.example.org y el secundario mx2.example.org.

Ejemplo de fichero maestro de zona:

$ORIGIN example.org.    ; Base del nombre de dominio de la zona, debe estar cualificado (acaba en un punto)
$TTL 172800             ; TTL por defecto de la zona (2 días)

@       IN      SOA   ns.example.org. hostmaster.example.org. (
                            2009101401      ; Número de serie (YYYYMMDDnn)
                            86400           ; Refresco (1d)
                            86400           ; Reintento (1d)
                            2419200         ; Caducidad (4w)
                            7200            ; TTL mínimo (2h)
                            )

        IN      NS      ns.example.org.     ; DNS primario, registro A que debe estar definido en
                                            ; la zona
        IN      NS      ns.example.net.     ; DNS secundario, debe ser un registro A y está definido 
                                            ; en la zona example.net

        IN      MX      10 mx.example.org.  ; Servidor de correo principal de la zona debe estar 
                                            ; definido en la zona y ser un registro A
        IN      MX      20 mx.example.net.  ; Servidor de correo secundario de la zona y debe ser un registro
                                            ; A y debe estar definido en la zona example.net

ns              IN      A      10.0.1.1     ; Definición de ns.example.org, se utiliza el nombre no
                                            ; cualificado
                                            ; no acabado en punto (lo cualifica el servidor añadiendo
                                            ; el valor de $ORIGIN)
mx      3600    IN      A      10.0.1.2     ; Definición de mx.example.org, se utiliza el nombre no
                                            ; cualificado