Administración de zonas de DNS con nsupdate.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Este documento requiere se dominen perfectamente los conceptos explicados en el documento titulado «Introducción al protocolo DNS» y haber realizado la configuración básica de Bind como se describe en el documento titulado «Cómo configurar un servidor de nombres de dominio (DNS)».

Administrar las zonas de DNS utilizando nsupdate permite realizar cambios de manera rápida y dinámica sin necesidad de editar archivos y reiniciar el servicio para aplicar los cambios. Impide que los errores de sintaxis hagan fallar el servicio al realizar validaciones de registros antes de consignar los cambios.

Nsupdate es utilizado para enviar solicitudes dinámicas de DNS hacia un servidor DNS como se define en el RFC 2136. Permite añadir o eliminar registros de una zona son tener que editar manualmente los archivos de zona. Una sola solicitud de actualización puede contener varias solicitudes y añadir o eliminar más de un registro.

Una vez iniciado el servicio de DNS con zonas bajo control dinámico a través de nsupdate o bien un servidor DHCP, jamás se debe editar los archivos de éstas. Hacerlo puede ocasionar conflictos con las actualizaciones dinámicas y ocasionar pérdida de datos.

Ejecute lo siguiente para consultar la ayuda rápida de nsupdate:

nsupdate --help

Ejecute lo siguiente para consultar el manual detallado de nsupdate:

man 1 nsupdate

Pulse «q» para salir de la página de manual.

Preparativos.

Los procedimientos descritos a continuación asumen que se dispone de dos servidores con CentOS 7, configurados como se describe en el documento titulado «Cómo configurar un servidor de nombres de dominio (DNS)». Uno de los servidores será el servidor DNS maestro y el otro será el servidor DNS esclavo.

Hipotéticamente se asume el siguiente escenario:

Por favor, modifique y personalice estos valores en los ejemplos a continuación. Es decir, todos los valores resaltados.

Procedimientos.

Políticas de SELinux.

Es indispensable que SELinux permita al servicio named privilegios de lectura y escritura en los archivos de las zonas. Si está activo SELinux, por favor —y si aún no lo ha hecho— active la política que permite la escritura de archivos de zona ejecutando lo siguiente:

setsebool -P named_write_master_zones=1

Generar y configurar permisos de los archivos de zona.

Genere el archivo de zona para dominio.com ejecutando lo siguiente:

touch /var/named/dynamic/dominio.com.zone

Asigne permisos de lectura y escritura para usuario, sólo lectura para grupo y nada para otros:

chmod 640 /var/named/dynamic/dominio.com.zone

Cambie propietario y grupo a named ejecutando lo siguiente:

chown named:named /var/named/dynamic/dominio.com.zone

Añada contenido a los archivos de zona.

Edite el archivo recién creado ejecutando lo siguiente:

vi /var/named/dynamic/dominio.com.zone

Añada el siguiente contenido:

$TTL 3600
@        IN    SOA        dns1.dominio.com.    alguien.gmail.com. (
            2015090801;
            1800;
            900;
            1209600;
            3600;
            )
@    IN    NS    dns1.dominio.com.
dns1    IN    A    192.168.1.1

Lo anterior define un tiempo total de vida predeterminado de 86400 segundos (24 horas), el registro de inicio de autoridad o SOA —es decir el dns primario—, el registro NS correspondiente y el registro tipo A para resolver el nombre dns1.dominio.com.

Por favor, revise bien la sintaxis y compare línea por línea su archivo con el mostrado arriba. Recuerde que los nombres de anfitrión llevan siempre un punto al final.

Configure zonas en el archivo /etc/named.conf.

Edite el archivo /etc/named.conf ejecutando lo siguiente:

vim /etc/named.conf

Añada el siguiente contenido para crear la zona maestra para el dominio dominio.com, permitiendo realizar cambios en la misma usando la firma digital del servidor y permitiendo a 192.168.1.2 funcionar como servidor DNS esclavo para esta misma zona:

    zone "dominio.com" {
        type master;
        file "dynamic/dominio.com.zone";
        allow-update { key "rndc-key"; };
        allow-transfer { 192.168.1.2; };
    };

Si hay vistas (views) configuradas, añada lo anterior en todas las vistas o sólo en la vista deseada. Ejemplo:

options {
    directory "/var/named";
    dump-file "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    managed-keys-directory "/var/named/dynamic";
    version "BIND";
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    forward first;
// Sólo habilitar lo siguiente si se va a utilizar DNSSEC
// y si los servidores en forwarders tienen soporte para DNSSEC.
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    bindkeys-file "/etc/named.iscdlv.key";
};

include "/etc/rndc.key";
include "/etc/named.root.key";

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
    category lame-servers { null; };
    category dnssec { null; };
};

controls {
    inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; };
};

view "local" {
    match-clients {
        127.0.0.0/8;
        10.0.0.0/8;
        172.16.0.0/12;
        192.168.0.0/16;
    };
    recursion yes;
    include "/etc/named.rfc1912.zones";
    zone "." IN {
        type hint;
        file "named.ca";
    };

    zone "dominio.com" {
        type master;
        file "dynamic/dominio.com.zone";
        allow-update { key "rndc-key"; };
        allow-transfer { 192.168.1.2; };
    };

};

view "public" {
    match-clients { any; };
    recursion no;
    zone "." IN {
        type hint;
        file "named.ca";
    };

    zone "dominio.com" {
        type master;
        file "dynamic/dominio.com.zone";
        allow-update { key "rndc-key"; };
        allow-transfer { 192.168.1.2; };
    };

};

Reiniciar servicio en CentOS 7 y Red Hat™ Enterprise Linux 7.

Ejecute lo siguiente para reiniciar el servicio named y aplicar los cambios en la configuración:

systemctl restart named

Reiniciar servicio en CentOS 6 y Red Hat™ Enterprise Linux 6.

Ejecute lo siguiente para reiniciar el servicio named y aplicar los cambios en la configuración:

service named restart

Conecte al servidor DNS con nsupdate.

Ejecute nsupdate con la opción -k y /etc/rndc.key como argumento para cargar la firma digital del servidor:

nsupdate -k /etc/rndc.key

Conecte al servidor DNS en el anfitrión local desde el intérprete de nsupdate ejecutando lo siguiente:

server 127.0.0.1

Defina el dominio al cual se realizarán las modificaciones ejecutando lo siguiente:

zone dominio.com

Si algo sale mal durante el resto de los procedimientos, tendrá que repetir los tres pasos descritos arriba para poder hacer sus correcciones.

Añadir registros a la zona.

Registros tipo A.

Los registros tipo A se utilizan para resolver los nombres de anfitrión en la zona del dominio. Por lo general se asigna sólo uno a cada anfitrión. Si el mismo anfitrión es accedido utilizando otros nombres, se recomienda se haga añadiendo registros tipo CNAME. Sin embargo, ésto es opcional. Pueden agregar cuantos registros tipo A como uno guste apuntando hacia una misma dirección IP.

Añada registros tipo A a la zona recién creada para resolver el nombre de anfitrión del servidor. Ejemplos a continuación.

Añada registro tipo A para resolver el nombre de anfitrión del servidor —asumiendo hipotéticamente que éste es servidor.dominio.com— ejecutando lo siguiente:

update add servidor.dominio.com. 86400 A 192.168.1.1

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Añada registro tipo A para resolver el nombre dominio.com —es decir el registro predeterminado— ejecutando lo siguiente:

update add dominio.com. 86400 A 192.168.1.1

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Registros tipo CNAME para los aliases de registros A.

Los registros CNAME (alias) se utilizan para designar otros nombres a un registro A. Idealmente sólo se asigna un registro A por nombre de anfitrión. Si existen otros aliases para este mismo anfitrión, se recomienda sean tipo CNAME.

Añada un registro CNAME www apuntando a dominio.com ejecutando lo siguiente:

update add www.dominio.com. 86400 CNAME dominio.com.

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Añada un registro CNAME (alias) ftp apuntando a dominio.com ejecutando lo siguiente:

update add ftp.dominio.com. 86400 CNAME dominio.com.

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Registros tipo A y MX para Servidor de correo primario.

Todos los registros destinados para ser utilizados como correo electrónico deben tener un registro tipo A y un registro tipo MX. El correo electrónico de anfitriones cuyo único nombre sea resuelto por un registro tipo CNAMe será rechazado por la mayoría de los servidores de correo electrónico del resto del mundo.

Añada registro tipo A para resolver el nombre mail.dominio.com ejecutando lo siguiente:

update add mail.dominio.com. 86400 A 192.168.1.1

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Defina mail.dominio.com como MX primario ejecutando lo siguiente:

update add dominio.com. 86400 MX 10 mail.dominio.com.

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Registros A y MX para Servidor de correo secundario.

Asumiendo hipotéticamente que 192.168.1.2 está configurado como servidor de correo secundario para dominio.com, añada registro tipo A para resolver el nombre mail2.dominio.com ejecutando lo siguiente:

update add mail2.dominio.com. 86400 A 192.168.1.2

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Defina mail2.dominio.com como MX secundario ejecutando lo siguiente:

update add dominio.com. 86400 MX 20 mail2.dominio.com.

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Registros A y NS para Servidor DNS secundario.

Añada registro tipo A para resolver el nombre dns2.dominio.com ejecutando lo siguiente:

update add dns2.dominio.com. 86400 A 192.168.1.2

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Defina dns2.dominio.com como DNS secundario utilizando un registro NS ejecutando lo siguiente:

update add dominio.com. 86400 NS dns2.dominio.com.

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Registro TXT para SPF.

En la actualidad se pide cubrir varias validaciones para considerar un dominio bien configurado. Uno de los requisitos es contar un registro SPF.

SPF (Sender Policy Framework) o Marco de directivas de remitente es un tipo de registro que identifica los servidores de correo que pueden enviar mensajes en nombre de un dominio en particular.

Defina un registro TXT para dominio.com con el valor "v=spf1 a mx ~all" ejecutando lo siguiente:

update add dominio.com. 86400 TXT "v=spf1 a mx ip4:192.168.1.1 ip4:192.168.1.2 -all".

Consigne el cambio realizado en la zona ejecutando lo siguiente:

send

Lo anterior define que se consideran servidores autorizados para enviar correo de dominio.com a:

  1. Todos los anfitriones con registro tipo A y tipo MX en la zona del dominio.
  2. Los anfitriones con direcciones IPv4 192.168.1.1 o 192.168.1.2.

Con -all se indica a los servidores de correo electrónico del resto del mundo que se descarte cualquier mensaje de correo electrónico proveniente de anfitriones que incumpla con alguna de estas dos condiciones.

Los registros DKIM y DMARC se pueden añadir del mismo modo. Sin embargo para ambos es necesario configurar primero el servidor de correo electrónico con soporte para DKIM antes de hacerlo, de otro modo el correo electrónico sería rechazado por el resto de los servidores de correo electrónico del mundo. Ese procedimiento se describe junto con el tema de DKIM en otro documento. Nsupdate sólo puede añadir registros para DKIM con firmas de hasta 1024 bits. Para añadir firmas de 2048 en adelante es necesario seguir otro procedimiento documentado en el tema correspondiente a DKIM.

Salir del intérprete de nsupdate.

Asumiendo que pudo añadir exitosamente todos los registros del los procedimientos descritos anteriormente, salga del intérprete de nsupdate ejecutando lo siguiente:

quit

Corrección de registros.

Si cometió errores y necesita modificar registros, vuelva a conectarse con nsupdate. Ejemplo:

[root@cursocentos ~]# nsupdate -k /etc/rndc.key
> server 127.0.0.1
> zone dominio.com
> _

Luego ejecute la misma instrucción utilizada para crear el registro equivocado pero usando delete en lugar de add. Ejemplos

update delete error.dominio.com. 86400 A 192.168.1.3
update delete dominio.com. 86400 NS error.dominio.com.
update delete dominio.com. 86400 MX 30 error.dominio.com.

Consigne los cambios realizados en la zona ejecutando lo siguiente:

send

Salga del intérprete de nsupdate ejecutando lo siguiente:

quit

Comprobaciones.

Valide los registros creados realizando consultas con dig y host:

dig dominio.com SOA
dig dominio.com NS
dig dominio.com MX

host dns1.dominio.com
host dns2.dominio.com
host dominio.com
host www.dominio.com
host mail.dominio.com

Configuración de servidor DNS esclavo.

El servidor DNS esclavo debe estar configurado del mismo modo que preparó el servidor DNS primario antes de añadir las zonas. Es decir, con una configuración básica que incluye utilizar el archivo plantilla, actualizar el cache de servidores raíz y generar firma digital para el servidor.

Conecte a través de SSH como administrador hacia el servidor esclavo en 192.168.1.2 ejecutando lo siguiente:

ssh root@192.168.1.2

Si esa activo SELinux, por favor active la política que permite la escritura de archivos de zona ejecutando lo siguiente:

setsebool -P named_write_master_zones=1

Edite el archivo /etc/named.conf:

vim /etc/named.conf

De modo similar a como realizó el procedimiento en el servidor maestro, por favor añada la configuración de zona esclava para dominio.com, usando como maestro a 192.168.1.1:

    zone "dominio.com" {
        type slave;
        file "slaves/dominio.com.zone";
        masters { 192.168.1.1; };
        allow-transfer { 192.168.1.1; };
    };

Reinicie el servicio named:

service named restart

Lo anterior realizará automáticamente la transferencia del archivo de zona.

Conecte al servidor DNS secundario utilizando nsupdate del mismo modo que hizo en el servidor DNS maestro.

[root@cursocentos ~]# nsupdate -k /etc/rndc.key
> server 127.0.0.1
> zone dominio.com
> _

Ejecute lo siguiente sólo para forzar manualmente la transferencia:

rndc retransfer dominio.com

También puede usar refresh en lugar de retransfer para forzar manualmente la transferencia pero utilizando una cola de procesamiento que es útil en caso de tratarse de varias zonas:

rndc refresh dominio.com

Si la zona se localiza en una vista en particular, como por ejemplo local o public, pude definir la vista correspondiente. Ejemplo:

rndc refresh dominio.com in local

Valide de nuevo los registros realizando consultas con dig y host hacia 127.0.0.1.

Si todo salió bien, salga del intérprete de nsupdate ejecutando lo siguiente:

quit

Salga de la sesión SSH del servidor DNS esclavo.

Si todo salió bien, salga del intérprete de nsupdate ejecutando lo siguiente:

exit

Lecturas posteriores.

Por favor continúe con el documento titilado «Configuración de DNSSEC en zonas dinámicas».