Tabla de Contenidos

207.2 Create and maintain DNS zones

Pertenece a Topic 207: Domain Name Server

Creación de un Fichero de Zona Directa

Suelen ubicarse en los directorio /var/named o /etc/bind

Su nomenclatura suele ser: db.nombrezona

$TTL     ttl
nombrezona IN SOA servidor mailadmin (
    serial
    refresh
    retry
    expire
    negative
)

nombrezona IN NS servidor
Parámetro Descripción
ttl Time To Live (tiempo de vida): indica la duración en segundos que se conservarán los datos en memoria caché. Este valor se precede por la directiva $TTL.
nombrezona FQDN de la zona administrada en este archivo. A menudo reemplazado por una arroba (@) para aligerar el archivo. Atención, como se trata de un FQDN, el nombre de la zona debe acabar con un punto.
IN Obsoleto a la vez que actual: clase Internet (no hay otra clase que se pueda usar).
SOA Start Of Authority. Registro obligatorio para indicar que este servidor es legítimo en esta zona.
servidor FQDN del servidor que tiene autoridad en la zona.
mailadmin Dirección de correo del administrador del servidor. La arroba es un carácter reservado en los archivos de zona, convencionalmente se reemplaza por un punto. admin@midominio.es pasaría a ser entonces admin.midominio.es.
serial Valor numérico. Número de serie del archivo. Útil cuando la zona se replica en otros servidores para saber si los datos han cambiado y si debe hacerse la réplica.
refresh Valor numérico. Utilizado cuando la zona se replica. Indica al servidor esclavo con qué intervalo comprobar la validez de su zona.
retry Valor numérico. Utilizado cuando la zona se replica. Si es imposible para el servidor esclavo contactar con el servidor maestro, indica cuánto esperar antes de volverlo a intentar.
expire Valor numérico. Utilizado cuando la zona se replica. Si es imposible para el servidor esclavo contactar con el servidor maestro, indica con cuánto tiempo los registros sin refrescar pierden su validez y deben dejarse de usar.
negative Valor numérico. Indica cuánto tiempo el servidor debe conservar en caché una respuesta negativa.
NS Registro que indica cuál es el servidor de nombres para esta zona.

Ejemplo

/var/named/db.midominio.com:

linux.midominio.com. IN A     192.168.100.102
servidor1            IN CNAME alfa.midominio.com.

Creación de un Fichero de Zona Inversa

El fichero de zona inversa tiene la misma estructura que el de la zona directa.

Su nombre se forma con los bytes de la parte de red de la dirección IP ordenados en sentido inverso + .in-addr.arpa, por ejemplo, 10.168.192.in-addr.arpa

$TTL     ttl
nombrezonainv IN SOA servidor mailadmin (
    serial
    refresh
    retry
    expire
    negative
)

nombrezonainv IN NS servidor

Ejemplo

/var/named/100.168.192.in-addr.arpa:

101 IN PTR linux.midominio.com.
102 IN PTR alfa.midominio.com.

Campos de la Cabecera de los Ficheros de Zona

Campo Descripción
ttl (Time To Live) Indica la duración en segundos que se conservarán los datos en memoria caché.
nombrezona FQDN (fully qualified domain name) de la zona administrada. Debe terminar con un punto.
IN Clase Internet
SOA Start Of Authority. Registro obligatorio para indicar que este servidor es legítimo en esta zona.
servidor FQDN del servidor que tiene autoridad en la zona.
mailadmin Dirección de correo del administrador del servidor. La arroba es un carácter reservado en los archivos de zona, convencionalmente se reemplaza por un punto.
serial Número de serie del archivo. Útil cuando la zona se replica en otros servidores para saber si los datos han cambiado y si debe hacerse la réplica.
refresh Utilizado cuando la zona se replica. Indica al servidor esclavo con qué intervalo comprobar la validez de su zona.
retry Utilizado cuando la zona se replica. Si es imposible para el servidor esclavo contactar con el servidor maestro, indica cuánto esperar antes de volver a intentarlo
expire
negative Indica cuánto tiempo el servidor debe conservar en caché una respuesta negativa

Creación de Registros de Zona

Una vez que los ficheros de zona se han creado, basta con añadir tantos registros de recursos como se desee, a razón de uno por línea.

Fichero de Zona directa

Estructura:

; nombre  IN    TipoRR    valor_resuelto
www       IN    A         192.168.3.43

Ejemplo para el fichero de zona directa db.micasa (a partir de una copia de db.local):

$TTL    604800
@       IN     SOA    micasa.local. webmaster.micasa.local. (
                           2    ; Serial
                      604800    ; Refresh
                       86400    ; Retry
                     2419200    ; Expire
                      604800 )  ; Negative Cache TTL
                      
# Servidor DNS del dominio
@      IN      NS    debian10.micasa.local.

@      IN      A     192.168.1.135
debian10 IN    A     192.168.1.135

Fichero de Zona inversa

Estructura de los registros de la zona inversa:

; direccion_host IN PTR nombre
43               IN PTR www

Ejemplo para el fichero de zona inversa db.192.168.1 (a partir de una copia de db.127):

$TTL    604800
@       IN     SOA    micasa.local. webmaster.micasa.local. (
                           1    ; Serial
                      604800    ; Refresh
                       86400    ; Retry
                     2419200    ; Expire
                      604800 )  ; Negative Cache TTL
;
                      
# Servidor DNS del dominio
@      IN      NS    debian10.micasa.local.

# Registro PTR
135    IN      PTR   debian10

Faltaría definir la zona inversa en named.conf.miszonas:

zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.1;
};

Declaración de una Zona Principal

Se denomina zona principal a la zona declarada en un servidor de tipo master.

Para realizar la declaración de una zona principal debemos incluir la siguiente configuración en el fichero named.conf:

zone "nombrezona" {
    type master;
    file "archivo";
};

elementos propios de la zona (configuración, RR, etc.).

Para poder organizar todo mejor, podemos crear las zonas principales en named.conf.miszonas y luego hacer referencia a ese fichero desde named.conf:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/named.conf.miszonas"

De esta manera, nuestro fichero named.conf.miszonas podría ser:

zone "micasa.local" {
    type master;
    file "/etc/bind/db.micasa";
};

Declaración de una Zona Secundaria

Una zona DNS no debería depender de un único servidor y por ello es frecuente crear un segundo servidor de zonas secundarias, estrictamente idénticas a las zonas primarias y sincronizadas a intervalos regulares.

Se denomina zona secundaria a la zona declarada en un servidor de tipo slave.

Para realizar la declaración de una zona secundaria debemos incluir la siguiente configuración en el fichero named.conf:

zone "nombrezona" {
    type slave;
    masters { direccion_maestro; };    
    file "archivo";
};

Ejemplo declaraciones zona directa e inversa

En el archivo named.conf:

//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "midominio.com" {
    type master;
    file "/etc/bind/db.midominio.com";
};
zone "100.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.100";
};

Delegación de zona

A la hora de crear un subdominio, podemos hacerlo de 2 formas: incluyendolo en la zona o creando una zona delegada.

Esta segunda manera nos permitirá administrar el subdominio como una zona separada.

El dominio principal deberá delegar el dns del subdominio. Por ejemplo, en el archivo de zona padre:

zona_hija IN NS dns_hijo
dns_hijo IN A D.C.B.A

Actualización de la Configuración

Siempre que realicemos cualquier cambio en los ficheros de configuración de las zonas, debemos reiniciar el servicio o recargar la configuración de las zonas, para que se apliquen los cambios. Dos opciones:

Comprobar la configuración de una zona

La herramienta named-checkzone nos permite comprobar si hay errores de sintaxis con las zonas:

Fichero de resolución directa:

named-checkzone micasa.local /etc/bind/db.micasa

Fichero de resolución inversa:

named-checkzone micasa.local /etc/bind/db.192.168.1

Herramientas de Comprobación

ping

Aunque no es su función principal, ping se puede usar como prueba rudimentaria para la resolución de nombres. En ese caso, se limitará a comprobar la respuesta de los servidores por defecto, que se informan en /etc/resolv.conf.

Cuando se utiliza ping para comprobar la resolución de nombres, es la traducción de la dirección lo que importa, no la respuesta ICMP de la máquina remota:

donald:/etc/bind# ping donald.formacion.es
PING donald.formacion.es (192.168.1.1) 56(84) bytes
64 bytes from donald.formacion.es (192.168.1.1): icmp
64 bytes from donald.formacion.es (192.168.1.1): icmp
64 bytes from donald.formacion.es (192.168.1.1): icmp

nslookup

nslookup

En la sesión interactiva le preguntamos por un dominio:

> google.com
Server:         172.21.40.178
Address:        172.21.40.178#53

Non-authoritative answer:
Name:   google.com
Address: 142.250.184.174
Name:   google.com
Address: 2a00:1450:4003:80c::200e

Si queremos especificarle a nslookup dónde debe realizar las consultas, durante la sesión interactiva lo indicamos con server:

> server 192.168.1.135
Default server: 192.168.1.145
Address: 192.168.1.135#53

Ahora podemos preguntarle de nuevo:

> debian10.micasa.local
Server:         192.168.1.135
Address:        192.168.1.135#53

Name:   debian10.micasa.local
Address: 192.168.1.135

nslookup se puede usar para todo tipo de registros comunes (en este caso MX):

donald:/etc/bind# nslookup
> set type=MX
> marte.org
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
marte.org mail exchanger = mail.marte.org
(...)

dig

Herramienta de consulta y diagnóstico de servidores DNS.

Sintaxis:

dig nombre

Si queremos indicar el servidor DNS al que hacer consultas:

dig @A.B.C.D nombre TIPO

Ejemplo:

dig @8.8.8.8 facebook.com MX
tempwin@vmi282687:~$ dig @8.8.8.8 facebook.com MX

; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> @8.8.8.8 facebook.com MX
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61194
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;facebook.com.                  IN      MX

;; ANSWER SECTION:
facebook.com.           1538    IN      MX      10 smtpin.vvv.facebook.com.

;; Query time: 17 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Apr 12 11:47:32 CEST 2021
;; MSG SIZE  rcvd: 68

Para sacar información de todo tipo de registros: dig dominio ANY

host

Herramienta sencilla para realizar peticiones DNS.

host nombre
host –t TIPO nombre A.B.C.D
host –t MX facebook.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:

facebook.com mail is handled by 10 smtpin.vvv.facebook.com.