DNS y DHCP en CentOS 7 – Redes PYMES

12
1475

Índice general de la serie: Redes de Computadoras para las PYMES: Introducción

¡Hola amigos!. Veremos en este artículo como podemos implementar la importante dupla de servicios para redes constituida por el DNS y DHCP en CentOS – Linux, específicamente en su versión 7.2.


  • Algunos artículos sobre el tema DNS se refieren a que la implementación de este servicio es un poco obscura y difícil. No estoy muy de acuerdo con tal afirmación. Mejor diría que es un poco conceptual y que muchos de sus archivos de configuración tienen una sintaxis quisquillosa. Por suerte, tenemos herramientas para comprobar, paso a paso, la sintaxis de cada archivo de configuración que modifiquemos. Por eso, trataremos de hacer lo más agradable y amena posibles la lectura de este post.

A los que buscan conceptos básicos sobre ambos servicios, le recomendamos encarecidamente empiecen su búsqueda por Wikipedia, tanto en sus versiones en español como en inglés. No es menos cierto que casi siempre los artículos en inglés son mas completos y coherentes. Así y todo, Wikipedia constituye un muy buen punto de partida.

Aquellos que de verdad deseen aprender sobre DNS y BIND, les recomendamos la lectura del libro “OReilly – DNS and BIND 4ed” escrito por Paul Albitz y Cricket Liu, o una edición posterior que de seguro existe.

Ya publicamos un artículo sobre el tema titulado “DNS y DHCP en openSUSE 13.2 Harlequin – Redes PYME” para los amantes del entorno gráfico. Sin embargo, en lo adelante se enfrentarán con artículos sobre este tema -que no sobre otros- escritos con mucho uso del emulador de una terminal o consola. ¡Vaya!, al estilo clásico utilizado por los Administradores de Sistemas de UNIX®/Linux.

Si desean conocer mas sobre el apellido del título de este artículo “Redes PYMES” pueden visitar la página en éste mismo blog “Redes PYMES: primer corte virtual“. En ella encontrará enlaces a muchos otros artículos publicados.

  • Después que termine la instalación del Sistema Operativo CentOS 7 con los paquetes recomendamos, el directorio /usr/share/doc/bind-9.9.4/ contiene una buena cantidad de documentación que recomendamos consulte antes de aventurarse en una búsqueda por Internet sin antes conocer que, al alcance de la mano y en su propia casa, puede encontrar lo que busca.

Instalación del sistema base

Datos generales del dominio y servidor DNS

Nombre del dominio: desdelinux.fan
Nombre del servidor DNS: dns.desdelinux.fan
Dirección IP: 192.168.10.5
Máscara de subred: 255.255.255.0

Instalación

Partimos de una instalación nueva o limpia del sistema operativo CentOS 7 tal como indicamos en artículo anterior “CentOS 7 Hypervisor I – Redes PYMES“. Solamente debemos realizar los siguientes cambios:

  • En la Imagen 22 SELECCIÓN SOFTWARE“, recomendamos elegir en la columna izquierda “Entorno Base” la opción correspondiente a un “Servidor de infraestructura“, mientras que en la columna derecha “Complementos para el Entorno Seleccionado” seleccionar la casilla de verificación “Servidor de nombres DNS“. Al servidor DHCP lo instalaremos posteriormente.
  • Recordemos la declaración de los repositorios adicionales como se muestra en la Imagen 23, después de configurar la “RED & NOMBRE DE EQUIPO“.
  • Las imágenes referentes a las particiones que crearemos en nuestro disco duro, solo se dan como guías. Siéntase libre de seleccionar las particiones a su propio criterio, práctica, y buen juicio.
  • Por último, en la Imagen 13 “RED & NOMBRE DE EQUIPO”, debemos cambiar los valores acorde a los parámetros generales del domino y servidor DNS declarados, sin olvidar especificar el nombre del host -en éste caso “dns“- una vez terminada la configuración de la red. Es positivo hacer ping -desde otro host- a la dirección IP especificada después que la red esté activa:

DNS y DHCP en CentOS

Realmente son pocos y muy evidentes los cambios que debemos hacer con respecto al artículo anterior.

Revisiones y ajustes iniciales

Después que instalamos el sistema operativo debemos revisar los siguientes archivos como mínimo, y para ello iniciamos una sesión vía SSH desde nuestro equipo sysadmin.desdelinux.fan:

buzz@sysadmin:~$ ssh 192.168.10.5
buzz@192.168.10.5's password: 
Last login: Sat Jan 28 09:48:05 2017 from 192.168.10.1
[buzz@dns ~]$

Puede que la operación anterior se demore más de lo normal, y se debe en lo fundamental a que aun no tenemos un DNS en la LAN. Compruebe nuevamente después que el DNS esté funcionando.

[buzz@dns ~]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

[buzz@dns ~]$ cat /etc/hostname
dns

[buzz@dns ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=946f5ac9-238a-4a94-9acb-9e3458c680fe
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.10.5
PREFIX=24
GATEWAY=192.168.10.1
DNS1=127.0.0.1
DOMAIN=desdelinux.fan

[buzz@dns ~]$ cat /etc/resolv.conf 
# Generated by NetworkManager
search desdelinux.fan
nameserver 127.0.0.1

Las configuraciones principales responden a nuestras selecciones. Observemos que incluso en un servidor Red Hat 7 – CentOS 7, se configura por defecto al NetworkManager para que éste sea quien gestione las interfaces de red, sean cableadas o inalámbricas (WiFi), conexiones VPN, conexiones PPPoE, y cualquier otra conexión de red.

[buzz@dns ~]$ sudo systemctl status networkmanager
[sudo] password for buzz: 
● networkmanager.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

[buzz@dns ~]$ sudo systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since sáb 2017-01-28 12:23:59 EST; 12min ago
 Main PID: 705 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           └─705 /usr/sbin/NetworkManager --no-daemon

Red Hat – CentOS también permite conectar y desconectar las interfaces de red mediante los clásicos comandos ifup e ifdown. Ejecutemos en una consola del servidor:

[root@dns ~]# ifdown eth0
Device 'eth0' successfully disconnected.

[root@dns ~]# ifup eth0
Conexión activada con éxito (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
  • Sugerimos no cambiar la configuración por defecto que ofrece CentOS 7 con respecto al NetworkManager.

Declaramos de forma definitiva los repositorios que vamos a utilizar y actualizamos el sistema operativo de ser necesario:

[buzz@dns ~]$ su
Contraseña:
[root@dns buzz]# cd /etc/yum.repos.d/
[root@dns yum.repos.d]# ls -l
total 28
-rw-r--r--. 1 root root 1664 dic  9  2015 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 dic  9  2015 CentOS-CR.repo
-rw-r--r--. 1 root root  649 dic  9  2015 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  290 dic  9  2015 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 dic  9  2015 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 dic  9  2015 CentOS-Sources.repo
-rw-r--r--. 1 root root 1952 dic  9  2015 CentOS-Vault.repo

Es saludable leer el contenido de los archivos originales de declaración de los repositorios recomendados por CentOS. Los cambios que aquí realizamos se deben a que no disponemos de un acceso a Internet, y trabajamos con repositorios locales descargados desde la Aldea WWW, por colegas que nos hacen la vida un poco más fácil. 😉

[root@dns yum.repos.d]# mkdir originales
[root@dns yum.repos.d]# mv CentOS-* originales/

[root@dns yum.repos.d]# nano centos-repos.repo
[centos-base]
name=CentOS-$releasever
baseurl=http://10.10.10.1/repos/centos/7/base/
gpgcheck=0
enabled=1

[centos-updates]
name=CentOS-$releasever
baseurl=http://10.10.10.1/repos/centos/7/updates/x86_64/
gpgcheck=0
enabled=1

[root@dns yum.repos.d]# yum clean all
Complementos cargados:fastestmirror, langpacks
Limpiando repositorios: centos-base centos-updates
Cleaning up everything

[root@dns yum.repos.d]# yum update
Complementos cargados:fastestmirror, langpacks
centos-base                                              | 3.4 kB     00:00     
centos-updates                                           | 3.4 kB     00:00     
(1/2): centos-base/primary_db                              | 5.3 MB   00:00     
(2/2): centos-updates/primary_db                           | 9.1 MB   00:00     
Determining fastest mirrors
No packages marked for update

El mensaje “No (existen) paquetes marcados para actualizar” – “No packages marked for update” indica que, al declarar los repositorios más actualizados a nuestra disposición durante la instalación, se instalaron precisamente los paquetes mas actuales.

Sobre el contexto SELinux y el firewall

Vamos a enfocar a este artículo -en lo fundamental- en la implementación de los servicios DNS y DHCP, que es su Principal Objetivo.

Si algún lector seleccionó una Política de Seguridad durante el proceso de instalación, tal y como se indica en la Imagen 06 del artículo de referencia “CentOS 7 Hypervisor I – Redes PYMES” utilizado para la instalación de éste servidor DNS – DHCP, y encuentra que no conoce como configurar adecuadamente el SELinux y el Firewall de CentOS, sugerimos ejecuten lo siguiente:

Modifique el archivo /etc/sysconfig/selinux y cambie SELINUX=enforcing por SELINUX=disable

[root@dns ~]# nano /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are pr$
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

A continuación ejecute los siguientes comandos

[root@dns ~]# setenforce 0
[root@dns ~]# service firewalld stop
Redirecting to /bin/systemctl stop  firewalld.service

[root@dns ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

Si Usted está implementando un servidor DNS cara a Internet, NO debe realizar lo antes indicado, sino configurar el contexto SELinux y el Firewall correctamente. Consulte “Configuración de Servidores con GNU/Linux, del autor Joel Barrios Dueñas” o la propia documentación de CentOS – Red Hat

Configuramos el BIND – named

  • El directorio /usr/share/doc/bind-9.9.4/ contiene una buena cantidad de documentación que recomendamos consulte antes de aventurarse en una búsqueda por Internet sin antes conocer que, al alcance de la mano y en su propia casa, puede encontrar lo que busca

En muchas distribuciones al servicio DNS instalado mediante el paquete BIND se le denomina named (Name Daemon). En CentOS 7 se instala deshabilitado por defecto, según la propia salida del siguiente comando, donde expresa que su estado es “disabled“, y que ese estado está predefinido por su “vendedor” – vendor preset. Que conste que el BIND es Software Libre.

Habilitando el servicio named

[root@dns ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

[root@dns ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

[root@dns ~]# systemctl start named

[root@dns ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: active (running) since sáb 2017-01-28 13:22:38 EST; 5min ago
  Process: 1990 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 1988 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 1993 (named)
   CGroup: /system.slice/named.service
           └─1993 /usr/sbin/named -u named

ene 28 13:22:45 dns named[1993]: error (network unreachable) resolving './NS/IN': 2001:500:2f::f#53
ene 28 13:22:47 dns named[1993]: error (network unreachable) resolving './DNSKEY/IN': 2001:500:3::42#53
ene 28 13:22:47 dns named[1993]: error (network unreachable) resolving './NS/IN': 2001:500:3::42#53
ene 28 13:22:47 dns named[1993]: error (network unreachable) resolving './DNSKEY/IN': 2001:500:2d::d#53
ene 28 13:22:47 dns named[1993]: error (network unreachable) resolving './NS/IN': 2001:500:2d::d#53
ene 28 13:22:47 dns named[1993]: error (network unreachable) resolving './DNSKEY/IN': 2001:dc3::35#53
ene 28 13:22:47 dns named[1993]: error (network unreachable) resolving './NS/IN': 2001:dc3::35#53
ene 28 13:22:47 dns named[1993]: error (network unreachable) resolving './DNSKEY/IN': 2001:7fe::53#53
ene 28 13:22:47 dns named[1993]: error (network unreachable) resolving './NS/IN': 2001:7fe::53#53
ene 28 13:22:48 dns named[1993]: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out

[root@dns ~]# systemctl restart named

[root@dns ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: active (running) since sáb 2017-01-28 13:29:41 EST; 1s ago
  Process: 1449 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 1460 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 1457 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 1463 (named)
   CGroup: /system.slice/named.service
           └─1463 /usr/sbin/named -u named

ene 28 13:29:41 dns named[1463]: managed-keys-zone: journal file is out of date: removing journal file
ene 28 13:29:41 dns named[1463]: managed-keys-zone: loaded serial 2
ene 28 13:29:41 dns named[1463]: zone 0.in-addr.arpa/IN: loaded serial 0
ene 28 13:29:41 dns named[1463]: zone localhost.localdomain/IN: loaded serial 0
ene 28 13:29:41 dns named[1463]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
ene 28 13:29:41 dns named[1463]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
ene 28 13:29:41 dns named[1463]: zone localhost/IN: loaded serial 0
ene 28 13:29:41 dns named[1463]: all zones loaded
ene 28 13:29:41 dns named[1463]: running
ene 28 13:29:41 dns systemd[1]: Started Berkeley Internet Name Domain (DNS).

Después que habilitamos el servicio named y lo iniciamos por vez primera, la salida del comando systemctl status named muestra errores. Cuando reiniciamos el servicio a continuación, el named crea todos los archivos de configuración que, por defecto, le son necesarios para su correcto funcionamiento. Por ello, cuando ejecutamos nuevamente el comando systemctl status named no se muestran mas errores.

  • Estimado, caro, y exigente Lector: si Usted desea enterarse de -al menos- cual camino conduce al final del agujero del conejo, por favor, lea con calma las detalladas salidas de cada comando. 😉  Seguro que el artículo le parecerá un poco largo, pero no negará que gana en explicación y claridad.

Modificamos el archivo /etc/named.conf

Muchos comentarios de lectores expresan –que no lo digo yo– la manía que tienen los mantenedores de las diferentes distribuciones Linux, de ubicar los archivos de configuración del sistema en carpetas con nombres diferentes según sea la distro. Tienen razón. Pero ¿qué podemos hacer nosotros, los simples usuarios que utilizamos esas distribuciones?. ¡Adaptarnos!. 😉

Por cierto, en FreeBSD, clon de UNIX® “El Origen”, el archivo está en /usr/local/etc/namedb/named.conf; mientras que en Debian, además de dividirse en los cuatro archivos named.conf, named.conf.options, named.conf.default-zones, y named.conf.local, se encuentra en la carpeta /etc/bind/. Los que quieran conocer donde lo coloca openSUSE, lean “DNS y DHCP en openSUSE 13.2 Harlequin – Redes PYME“. ¡Tienen razón los lectores!. 😉

Y como siempre hacemos: antes de modificar nada, guardamos el archivo de configuración original bajo otro nombre.

[root@dns ~]# cp /etc/named.conf /etc/named.conf.original

Para facilitarnos la vida, en vez de generar la clave TSIG para las actualizaciones dinámicas del DNS por el DHCP, copiamos la misma clave rndc.key como dhcp.key.

[root@dns ~]# cp /etc/rndc.key /etc/dhcp.key

[root@dns ~]# nano /etc/dhcp.key
key "dhcp-key" {
        algorithm hmac-md5;
        secret "OI7Vs+TO83L7ghUm2xNVKg==";
};

Para que el named pueda leer el archivo recién copiado, modificamos su grupo propietario:

[root@dns ~]# chown root:named /etc/dhcp.key

[root@dns ~]# ls -l /etc/rndc.key /etc/dhcp.key 
-rw-r-----. 1 root named 77 ene 28 16:36 /etc/dhcp.key
-rw-r-----. 1 root named 77 ene 28 13:22 /etc/rndc.key

Pequeños detalles como el anterior son los que nos pueden volver locos tratando de averiguar ¿ahora …, donde está el problema…? con algunos adjetivos más, que no escribimos por respeto al Respetable.

Ahora si -¡al fin!- modificamos el archivo /etc/named.conf. Los cambios o adiciones que hemos hecho, con respecto al original, están en negritas. Observen bien que son pocos.

[root@dns ~]# nano /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

// Lista de Control de Acceso declarando cuales redes podrán consultar
// mi servidor named
acl mired {
 127.0.0.0/8;
 192.168.10.0/24;
};

options {
 // Declaro que el demonio named, también escuche por la interfaz
 // eth0 que tiene la IP: 192.168.10.5
    listen-on port 53 { 127.0.0.1; 192.168.10.5; };
    listen-on-v6 port 53 { ::1; };
    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";

 // Declaración de los Forwarders
 // forwarders {
 //  0.0.0.0;
 //  1.1.1.1;
 // };
    // forward first;

    // Solo permito consultas a mi ACL mired
    allow-query     { mired; };

    // Para comprobar con el comando dig desdelinux.fan axfr
    // desde la estación de trabajo del SysAdmin y el localhost solamente
    // No tenemos servidores DNS esclavos. No lo necesitamos... hasta ahora.
 allow-transfer { localhost; 192.168.10.1; };

    /* 
     - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
     - If you are building a RECURSIVE (caching) DNS server, you need to enable 
       recursion. 
     - If your recursive DNS server has a public IP address, you MUST enable access 
       control to limit queries to your legitimate users. Failing to do so will
       cause your server to become part of large scale DNS amplification 
       attacks. Implementing BCP38 within your network would greatly
       reduce such attack surface 
    */
    // Queremos un servidor AUTORITARIO para nuestra LAN - PYME
    recursion no;

    dnssec-enable yes;
    dnssec-validation yes;

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";

    managed-keys-directory "/var/named/dynamic";

    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
    type hint;
    file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

// Incluimos la clave TSIG para las actualizaciones dinámicas del DNS
// a cargo del DHCP
include "/etc/dhcp.key";

// Declaración del nombre, tipo, ubicación, y permiso de actualización
// de las Zonas de Registros DNS
// Ambas Zonas son MAESTRAS
zone "desdelinux.fan" {
 type master;
 file "dynamic/db.desdelinux.fan";
 allow-update { key dhcp-key; };
};

zone "10.168.192.in-addr.arpa" {
 type master;
 file "dynamic/db.10.168.192.in-addr.arpa";
 allow-update { key dhcp-key; };
};

Comprobamos la sintaxis

[root@dns ~]# named-checkconf 
[root@dns ~]#

Como el comando anterior no devuelve nada, la sintaxis está OK. Sin embargo, si ejecutamos el mismo comando, pero con la opción -z, la salida será:

[root@dns ~]# named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone desdelinux.fan/IN: loading from master file dynamic/db.desdelinux.fan failed: file not found
zone desdelinux.fan/IN: not loaded due to errors.
_default/desdelinux.fan/IN: file not found
zone 10.168.192.in-addr.arpa/IN: loading from master file dynamic/db.10.168.192.in-addr.arpa failed: file not found
zone 10.168.192.in-addr.arpa/IN: not loaded due to errors.
_default/10.168.192.in-addr.arpa/IN: file not found

Por supuesto que son errores que se producen porque aun no hemos creado las Zonas de Registros DNS de nuestro dominio.

  • Para más información sobre el comado named-checkconf, ejecute man named-checkconf, antes de buscar cualquier otra información en Internet. Le aseguro que se ahorrará una buena cantidad de tiempo.

Creamos el archivo de la Zona Directa desdelinux.fan

… no sin antes un poco de teoría. 😉

Como plantilla para crear el archivo de datos de la zona, podemos tomar el /var/named/named.empty, o el /usr/share/doc/bind-9.9.4/sample/var/named/named.empty. Ambos son idénticos.

[root@dns ~]# cat /var/named/named.empty 
$TTL 3H
@   IN SOA  @ rname.invalid. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum or Negative caching time to live
    NS  @
    A   127.0.0.1
    AAAA    ::1

Tiempo de vida – Time to live TTL del registro SOA

Hagamos un paréntesis para explicar los TTL – Time to live del registro SOA – Start of Authority de una Zona Maestra. Es interesante conocer sus significados para cuando queramos modificar alguno de sus valores.

$TTL: Tiempo de vida – Time to live para todos los registros del archivo a continuación de la declaración (pero precede a cualquier otra declaración $TTL) y que no tienen una explícita declaración TTL.

serial: Número de serie de los datos de la Zona. Cada vez que modifiquemos manualmente un registro DNS en una zona, debemos incrementar ese número en 1, máxime si tenemos servidores esclavos o secundarios. Cada vez que un servidor DNS secundario o esclavo contacta a su servidor maestro, pregunta por el número de serie de los datos del maestro. Si es menor el número de serie del esclavo, entonces los datos de esa zona en el servidor esclavo están atrasados, y el esclavo realiza una transferencia de zona para actualizarse.

refresh: Le dice al servidor esclavo el intervalo de tiempo en que debe comprobar si sus datos están actualizados con respecto al maestro.

retry: Si el servidor maestro no se encuentra disponible -por que se enfermó, digamos- para el esclavo después de un intervalo de tiempo refresh, retry le indica al esclavo el intervalo de tiempo que debe esperar para intentar nuevamente un contacto con su maestro.

expire: Si el esclavo no puede contactar a su maestro durante un intervalo de tiempo expire, entonces si que se fastidió la relación zona esclava – maestra, y al servidor esclavo no le que queda mas remedio que expirar la zona en cuestión. La Expiración de una Zona por parte de un servidor DNS esclavo, significa que éste dejará de responder consultas DNS relativas a esa zona, debido a que los datos disponibles son muy viejos como para ser útiles.

  • Lo anterior nos enseña de forma indirecta y cargada de gran sentido común -el menos común de los sentidos- que sino necesitamos de servidores DNS esclavos para el funcionamiento de nuestra PYME, no lo implementemos, a menos que sean estrictamente necesarios. Tratemos siempre ir de lo sencillo a lo complejo.

minimun: En versiones anteriores al BIND 8.2, el último registro SOA indica de igual forma el Tiempo de vida por defecto – Default time to live, y el Tiempo de vida de la Caché Negativa – Negative caching time to live para la Zona. Este tiempo se refiere a todas las respuestas negativas dadas por el servidor autoritario para la Zona.

Archivo de zona /var/named/dynamic/db.desdelinux.fan

[root@dns ~]# nano /var/named/dynamic/db.desdelinux.fan
$TTL 3H
@   IN SOA  dns.desdelinux.fan. root.dns.desdelinux.fan. (
                                        1   ; serial
                                        1D  ; refresh
                                        1H  ; retry
                                        1W  ; expire
                                        3H )    ; minimum or
                                                ; Negative caching time to live
;
@               IN  NS  dns.desdelinux.fan.
@               IN  MX  10 mail.desdelinux.fan.
@       IN  TXT "DesdeLinux, su Blog dedicado al Software Libre"
;
sysadmin        IN  A   192.168.10.1
ad-dc           IN  A   192.168.10.3
fileserver  IN  A   192.168.10.4
dns             IN  A   192.168.10.5
proxyweb        IN  A   192.168.10.6
blog            IN  A   192.168.10.7
ftpserver   IN  A   192.168.10.8
mail            IN  A   192.168.10.9

Comprobamos /var/named/dynamic/db.desdelinux.fan

[root@dns ~]# named-checkzone desdelinux.fan /var/named/dynamic/db.desdelinux.fan
zone desdelinux.fan/IN: loaded serial 1
OK

Creamos el archivo de la Zona Inversa 10.168.192.in-addr.arpa

  • El registro SOA de ésta Zona, es el mismo que el de la Zona Directa sin considerar el registro MX.
[root@dns ~]# nano /var/named/dynamic/db.10.168.192.in-addr.arpa
$TTL 3H
@   IN SOA  dns.desdelinux.fan. root.dns.desdelinux.fan. (
                                        1   ; serial
                                        1D  ; refresh
                                        1H  ; retry
                                        1W  ; expire
                                        3H )    ; minimum or
                                                ; Negative caching time to live
;
@               IN  NS  dns.desdelinux.fan.
;
1   IN  PTR     sysadmin.desdelinux.fan.
3   IN  PTR     ad-dc.desdelinux.fan.
4   IN  PTR     fileserver.desdelinux.fan.
5   IN  PTR     dns.desdelinux.fan.
6   IN  PTR     proxyweb.desdelinux.fan.
7   IN  PTR     blog.desdelinux.fan.
8   IN  PTR     ftpserver.desdelinux.fan.
9   IN  PTR     mail.desdelinux.fan.

[root@dns ~]# named-checkzone 10.168.192.in-addr.arpa /var/named/dynamic/db.10.168.192.in-addr.arpa 
zone 10.168.192.in-addr.arpa/IN: loaded serial 1
OK

Antes de reiniciar al named comprobamos su configuración

  • Hasta tanto no estemos seguros de que los archivos de configuración del named named.conf, y sus archivos de zonas no estén correctamente configurados, sugerimos no reiniciar el demonio named. Si lo hacemos y posteriormente modificamos un archivo de zona, debemos incrementar en 1 el número de serie de la zona modificada.
  • Observemos el “.” al final de los nombres de dominio y de hosts.
[root@dns ~]# named-checkconf 
[root@dns ~]# named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone desdelinux.fan/IN: loaded serial 1
zone 10.168.192.in-addr.arpa/IN: loaded serial 1

Toda la configuración actual del named

Para ganar claridad, y aunque el artículo se haga largo, damos la salida completa del comando named-checkconf -zp:

[root@dns ~]# named-checkconf -zp
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone desdelinux.fan/IN: loaded serial 1
zone 10.168.192.in-addr.arpa/IN: loaded serial 1
options {
    bindkeys-file "/etc/named.iscdlv.key";
    session-keyfile "/run/named/session.key";
    directory "/var/named";
    dump-file "/var/named/data/cache_dump.db";
    listen-on port 53 {
        127.0.0.1/32;
        192.168.10.5/32;
    };
    listen-on-v6 port 53 {
        ::1/128;
    };
    managed-keys-directory "/var/named/dynamic";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    pid-file "/run/named/named.pid";
    statistics-file "/var/named/data/named_stats.txt";
    dnssec-enable yes;
    dnssec-validation yes;
    recursion no;
    allow-query {
        "mired";
    };
    allow-transfer {
        192.168.10.1/32;
    };
};
acl "mired" {
    127.0.0.0/8;
    192.168.10.0/24;
};
logging {
    channel "default_debug" {
        file "data/named.run";
        severity dynamic;
    };
};
key "dhcp-key" {
    algorithm "hmac-md5";
    secret "OI7Vs+TO83L7ghUm2xNVKg==";
};
zone "." IN {
    type hint;
    file "named.ca";
};
zone "localhost.localdomain" IN {
    type master;
    file "named.localhost";
    allow-update {
        "none";
    };
};
zone "localhost" IN {
    type master;
    file "named.localhost";
    allow-update {
        "none";
    };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
    type master;
    file "named.loopback";
    allow-update {
        "none";
    };
};
zone "1.0.0.127.in-addr.arpa" IN {
    type master;
    file "named.loopback";
    allow-update {
        "none";
    };
};
zone "0.in-addr.arpa" IN {
    type master;
    file "named.empty";
    allow-update {
        "none";
    };
};
zone "desdelinux.fan" {
    type master;
    file "dynamic/db.desdelinux.fan";
    allow-update {
        key "dhcp-key";
    };
};
zone "10.168.192.in-addr.arpa" {
    type master;
    file "dynamic/db.10.168.192.in-addr.arpa";
    allow-update {
        key "dhcp-key";
    };
};
managed-keys {
    "." initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=";
};
  • De seguir el procedimiento de modificar el named.conf acorde a nuestras necesidades y comprobar, y crear cada archivo de zona y comprobarla, dudamos que nos tengamos que enfrentar a problemas mayores de configuración. Al final nos damos cuenta de que es un juego de muchachos, con muchos conceptos y quisquillosa sintaxis. 😉

Las comprobaciones devolvieron resultados satisfactorios, por tanto podemos reiniciar el BIND – named.

Reiniciamos el named y comprobamos su status

[root@dns ~]# systemctl restart named.service
[root@dns ~]# systemctl status named.service

De obtener cualquier tipo de error en la salida del último comando, debemos reiniciar el named.service y volver a comprobar su status. Si los errores desaparecieron, el servicio se inició correctamente. En caso contrario, debemos realizar una minuciosa revisión de todos los archivos modificados y creados, y repetir el procedimiento.

La salida correcta del status debe ser:

[root@dns ~]# systemctl status named.service
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: active (running) since dom 2017-01-29 10:05:32 EST; 2min 57s ago
  Process: 1777 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 1788 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 1786 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 1791 (named)
   CGroup: /system.slice/named.service
           └─1791 /usr/sbin/named -u named

ene 29 10:05:32 dns named[1791]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
ene 29 10:05:32 dns named[1791]: zone 10.168.192.in-addr.arpa/IN: loaded serial 1
ene 29 10:05:32 dns named[1791]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
ene 29 10:05:32 dns named[1791]: zone desdelinux.fan/IN: loaded serial 1
ene 29 10:05:32 dns named[1791]: zone localhost.localdomain/IN: loaded serial 0
ene 29 10:05:32 dns named[1791]: zone localhost/IN: loaded serial 0
ene 29 10:05:32 dns named[1791]: all zones loaded
ene 29 10:05:32 dns named[1791]: running
ene 29 10:05:32 dns systemd[1]: Started Berkeley Internet Name Domain (DNS).
ene 29 10:05:32 dns named[1791]: zone 10.168.192.in-addr.arpa/IN: sending notifies (serial 1)

Comprobaciones

Las comprobaciones se pueden ejecutar en el mismo servidor o en una máquina conectada a la LAN. Preferimos realizarlas desde el equipo sysadmin.desdelinux.fan al cual dimos permiso expreso para que pueda realizar Transferencias de Zonas. El archivo /etc/resolv.conf de ese equipo es el siguiente:

buzz@sysadmin:~$ cat /etc/resolv.conf 
# Generated by NetworkManager
search desdelinux.fan
nameserver 192.168.10.5

buzz@sysadmin:~$ dig desdelinux.fan axfr
; <<>> DiG 9.9.5-9+deb8u1-Debian <<>> desdelinux.fan axfr
;; global options: +cmd
desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 1 86400 3600 604800 10800
desdelinux.fan.     10800   IN  NS  dns.desdelinux.fan.
desdelinux.fan.     10800   IN  MX  10 mail.desdelinux.fan.
desdelinux.fan.     10800   IN  TXT "DesdeLinux, su Blog dedicado al Software Libre"
ad-dc.desdelinux.fan.   10800   IN  A   192.168.10.3
blog.desdelinux.fan.    10800   IN  A   192.168.10.7
dns.desdelinux.fan. 10800   IN  A   192.168.10.5
fileserver.desdelinux.fan. 10800 IN A   192.168.10.4
ftpserver.desdelinux.fan. 10800 IN  A   192.168.10.8
mail.desdelinux.fan.    10800   IN  A   192.168.10.9
proxyweb.desdelinux.fan. 10800  IN  A   192.168.10.6
sysadmin.desdelinux.fan. 10800  IN  A   192.168.10.1
desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 1 86400 3600 604800 10800
;; Query time: 0 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sun Jan 29 11:44:18 EST 2017
;; XFR size: 13 records (messages 1, bytes 385)

buzz@sysadmin:~$ dig 10.168.192.in-addr.arpa axfr
; <<>> DiG 9.9.5-9+deb8u1-Debian <<>> 10.168.192.in-addr.arpa axfr
;; global options: +cmd
10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan.10.168.192.in-addr.arpa. root.dns.desdelinux.fan.10.168.192.in-addr.arpa. 1 86400 3600 604800 10800
10.168.192.in-addr.arpa. 10800  IN  NS  dns.desdelinux.fan.
1.10.168.192.in-addr.arpa. 10800 IN PTR sysadmin.desdelinux.fan.
3.10.168.192.in-addr.arpa. 10800 IN PTR ad-dc.desdelinux.fan.
4.10.168.192.in-addr.arpa. 10800 IN PTR fileserver.desdelinux.fan.
5.10.168.192.in-addr.arpa. 10800 IN PTR dns.desdelinux.fan.
6.10.168.192.in-addr.arpa. 10800 IN PTR proxyweb.desdelinux.fan.
7.10.168.192.in-addr.arpa. 10800 IN PTR blog.desdelinux.fan.
8.10.168.192.in-addr.arpa. 10800 IN PTR ftpserver.desdelinux.fan.
9.10.168.192.in-addr.arpa. 10800 IN PTR mail.desdelinux.fan.
10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan.10.168.192.in-addr.arpa. root.dns.desdelinux.fan.10.168.192.in-addr.arpa. 1 86400 3600 604800 10800
;; Query time: 0 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sun Jan 29 11:44:57 EST 2017
;; XFR size: 11 records (messages 1, bytes 352)

buzz@sysadmin:~$ dig IN SOA desdelinux.fan
buzz@sysadmin:~$ dig IN MX desdelinux.fan
buzz@sysadmin:~$ dig IN TXT desdelinux.fan
buzz@sysadmin:~$ host dns
dns.desdelinux.fan has address 192.168.10.5
buzz@sysadmin:~$ host sysadmin
sysadmin.desdelinux.fan has address 192.168.10.1

... Y cualquier otra comprobación que necesitemos
  • Hasta aquí, tenemos la base para un servidor DNS en nuestra red PYME. Esperamos hayan disfrutado todo el procedimiento, el cual fue bastante sencillo, ¿no?. 😉

Instalamos y configuramos el DHCP

[root@dns ~]# yum install dhcp
Complementos cargados:fastestmirror, langpacks
centos-base                                                                                                  | 3.4 kB  00:00:00     
centos-updates                                                                                               | 3.4 kB  00:00:00     
Loading mirror speeds from cached hostfile
Resolviendo dependencias
--> Ejecutando prueba de transacción
---> Paquete dhcp.x86_64 12:4.2.5-42.el7.centos debe ser instalado
--> Resolución de dependencias finalizada

Dependencias resueltas

====================================================================================================================================
 Package                 Arquitectura              Versión                                     Repositorio                    Tamaño
====================================================================================================================================
Instalando:
 dhcp                    x86_64                    12:4.2.5-42.el7.centos                      centos-base                    511 k

Resumen de la transacción
====================================================================================================================================
Instalar  1 Paquete

Tamaño total de la descarga: 511 k
Tamaño instalado: 1.4 M
Is this ok [y/d/N]: y
Downloading packages:
dhcp-4.2.5-42.el7.centos.x86_64.rpm                                                                          | 511 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Instalando    : 12:dhcp-4.2.5-42.el7.centos.x86_64                                                                            1/1 
  Comprobando   : 12:dhcp-4.2.5-42.el7.centos.x86_64                                                                            1/1 

Instalado:
  dhcp.x86_64 12:4.2.5-42.el7.centos                                                                                                

¡Listo!

[root@dns ~]# nano /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
ddns-update-style interim;
ddns-updates on;
ddns-domainname "desdelinux.fan.";
ddns-rev-domainname "in-addr.arpa.";
ignore client-updates;

authoritative;

option ip-forwarding off;
option domain-name "desdelinux.fan";
# option ntp-servers 0.pool.ntp.org, 1.pool.ntp.org, 2.pool.ntp.org, 3.pool.ntp.org;

include "/etc/dhcp.key";

zone desdelinux.fan. {
    primary 127.0.0.1;
        key dhcp-key;
}
zone 10.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key dhcp-key;
}

shared-network redlocal {
        subnet 192.168.10.0 netmask 255.255.255.0 {
                option routers 192.168.10.1;
                option subnet-mask 255.255.255.0;
                option broadcast-address 192.168.10.255;
                option domain-name-servers 192.168.10.5;
                option netbios-name-servers 192.168.10.5;
                range 192.168.10.30 192.168.10.250;
        }
}
# FIN dhcpd.conf

[root@dns ~]# dhcpd -t
Internet Systems Consortium DHCP Server 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file

[root@dns ~]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

[root@dns ~]# systemctl start dhcpd

[root@dns ~]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
   Active: active (running) since dom 2017-01-29 12:04:59 EST; 23s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 2381 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─2381 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

ene 29 12:04:59 dns dhcpd[2381]: Internet Systems Consortium DHCP Server 4.2.5
ene 29 12:04:59 dns dhcpd[2381]: Copyright 2004-2013 Internet Systems Consortium.
ene 29 12:04:59 dns dhcpd[2381]: All rights reserved.
ene 29 12:04:59 dns dhcpd[2381]: For info, please visit https://www.isc.org/software/dhcp/
ene 29 12:04:59 dns dhcpd[2381]: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
ene 29 12:04:59 dns dhcpd[2381]: Wrote 0 leases to leases file.
ene 29 12:04:59 dns dhcpd[2381]: Listening on LPF/eth0/52:54:00:12:17:04/redlocal
ene 29 12:04:59 dns dhcpd[2381]: Sending on   LPF/eth0/52:54:00:12:17:04/redlocal
ene 29 12:04:59 dns dhcpd[2381]: Sending on   Socket/fallback/fallback-net
ene 29 12:04:59 dns systemd[1]: Started DHCPv4 Server Daemon.

¿Que resta por hacer?

Sencillo. Iniciar un cliente Windows 7 u otro con Software libre y comenzar a probar y comprobar. Nosotros lo hicimos con dos clientes: seven.desdelinux.fan y suse-desktop.desdelinux.fan. Las comprobaciones fueron las siguientes:

buzz@sysadmin:~$ host seven
seven.desdelinux.fan has address 192.168.10.30

buzz@sysadmin:~$ host seven.desdelinux.fan
seven.desdelinux.fan has address 192.168.10.30

buzz@sysadmin:~$ dig IN TXT seven.desdelinux.fan
....
;; QUESTION SECTION:
;seven.desdelinux.fan.      IN  TXT

;; ANSWER SECTION:
seven.desdelinux.fan.   3600    IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"
....

Le cambiamos el nombre al equipo “seven” por “LAGER” y reiniciamos. Después de reiniciar el nuevo LAGER, comprobamos:

buzz@sysadmin:~$ host seven
Host seven not found: 5(REFUSED)

buzz@sysadmin:~$ host seven.desdelinux.fan
Host seven.desdelinux.fan not found: 3(NXDOMAIN)

buzz@sysadmin:~$ host lager
lager.desdelinux.fan has address 192.168.10.30

buzz@sysadmin:~$ host lager.desdelinux.fan
lager.desdelinux.fan has address 192.168.10.30

buzz@sysadmin:~$ dig IN TXT lager.desdelinux.fan
....
;; QUESTION SECTION:
;lager.desdelinux.fan.      IN  TXT

;; ANSWER SECTION:
lager.desdelinux.fan.   3600    IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"
....

Con respecto al cliente suse-desktop:

buzz@sysadmin:~$ host suse-dektop
Host suse-dektop not found: 5(REFUSED)

buzz@sysadmin:~$ host suse-desktop
suse-desktop.desdelinux.fan has address 192.168.10.33

buzz@sysadmin:~$ host suse-desktop.desdelinux.fan
suse-desktop.desdelinux.fan has address 192.168.10.33

buzz@sysadmin:~$ host 192.168.10.33
33.10.168.192.in-addr.arpa domain name pointer suse-desktop.desdelinux.fan.

buzz@sysadmin:~$ host 192.168.10.30
30.10.168.192.in-addr.arpa domain name pointer LAGER.desdelinux.fan.
buzz@sysadmin:~$ dig -x 192.168.10.33
....
;; QUESTION SECTION:
;33.10.168.192.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
33.10.168.192.in-addr.arpa. 3600 IN PTR suse-desktop.desdelinux.fan.

;; AUTHORITY SECTION:
10.168.192.in-addr.arpa. 10800  IN  NS  dns.desdelinux.fan.

;; ADDITIONAL SECTION:
dns.desdelinux.fan. 10800   IN  A   192.168.10.5
....

buzz@sysadmin:~$ dig IN TXT suse-desktop.desdelinux.fan
....
;suse-desktop.desdelinux.fan.   IN  TXT

;; ANSWER SECTION:
suse-desktop.desdelinux.fan. 3600 IN    TXT "31b78d287769160c93e6dca472e9b46d73"

;; AUTHORITY SECTION:
desdelinux.fan.     10800   IN  NS  dns.desdelinux.fan.

;; ADDITIONAL SECTION:
dns.desdelinux.fan. 10800   IN  A   192.168.10.5
....

Ejecutemos también los siguientes comandos

[root@dns ~]# dig desdelinux.fan axfr
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> desdelinux.fan axfr
;; global options: +cmd
desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 6 86400 3600 604800 10800
desdelinux.fan.     10800   IN  NS  dns.desdelinux.fan.
desdelinux.fan.     10800   IN  MX  10 mail.desdelinux.fan.
desdelinux.fan.     10800   IN  TXT "DesdeLinux, su Blog dedicado al Software Libre"
ad-dc.desdelinux.fan.   10800   IN  A   192.168.10.3
blog.desdelinux.fan.    10800   IN  A   192.168.10.7
dns.desdelinux.fan. 10800   IN  A   192.168.10.5
fileserver.desdelinux.fan. 10800 IN A   192.168.10.4
ftpserver.desdelinux.fan. 10800 IN  A   192.168.10.8
LAGER.desdelinux.fan.   3600    IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"
LAGER.desdelinux.fan.   3600 IN  A   192.168.10.30
mail.desdelinux.fan.    10800   IN  A   192.168.10.9
proxyweb.desdelinux.fan. 10800  IN  A   192.168.10.6
suse-desktop.desdelinux.fan. 3600 IN    TXT "31b78d287769160c93e6dca472e9b46d73"
suse-desktop.desdelinux.fan. 3600 IN A   192.168.10.33
sysadmin.desdelinux.fan. 10800  IN  A   192.168.10.1
desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 6 86400 3600 604800 10800

En la salida anterior, resaltamos en negritas los TTL -en segundos- para los equipos con direcciones IP otorgadas por el servicio DHCP los que poseen una declaración explícita del TTL 3600 dada por el DHCP.  Las IP fijas se guían por el $TTL de 3H -3 horas = 10800 segundos- declarados en el registro SOA de cada archivo de zona.

Pueden comprobar de igual forma la zona inversa.

[root@dns ~]# dig 10.168.192.in-addr.arpa axfr

Otros comandos sumamente interesantes son:

[root@dns ~]# named-journalprint /var/named/dynamic/db.desdelinux.fan.jnl
[root@dns ~]# named-journalprint /var/named/dynamic/db.10.168.192.in-addr.arpa.jnl
[root@dns ~]# journalctl -f

Modificación manual de archivos de Zonas

Después que el DHCP entra en el juego de actualizar de forma dinámica a los archivos de zonas del named, si necesitamos en algún momento modificar manualmente un archivo de zona, debemos efectuar el siguiente procedimiento, no sin antes conocer un poco mas el funcionamiento de la utilidad rndc para el control del servidor de nombre.

[root@dns ~]# man rndc
....
       freeze [zone [class [view]]]
           Suspend updates to a dynamic zone. If no zone is specified, then
           all zones are suspended. This allows manual edits to be made to a
           zone normally updated by dynamic update. It also causes changes in
           the journal file to be synced into the master file. All dynamic
           update attempts will be refused while the zone is frozen.

       thaw [zone [class [view]]]
           Enable updates to a frozen dynamic zone. If no zone is specified,
           then all frozen zones are enabled. This causes the server to reload
           the zone from disk, and re-enables dynamic updates after the load
           has completed. After a zone is thawed, dynamic updates will no
           longer be refused. If the zone has changed and the
           ixfr-from-differences option is in use, then the journal file will
           be updated to reflect changes in the zone. Otherwise, if the zone
           has changed, any existing journal file will be removed.
....

¿Qué, pensaron que iba a transcribir todo el manual?… un pedazo y van en coche. Lo demás se lo dejo a Ustedes. 😉

Básicamente:

  • rndc freeze [zone [class [view]]], suspende la actualización dinámica de una zona. Sino se especifica una, todas se congelarán. El comando permite la edición manual de la zona congelada o de todas las zonas. Se negará cualquier actualización dinámica mientras esté congelada.
  • rndc thaw [zone [class [view]]], habilita las actualizaciones dinámicas en una zona previamente congelada. El servidor DNS recarga el archivo de zona desde el disco y se vuelven a habilitar las actualizaciones dinámicas después que la recarga se termine.

¿Cuidados a tener cuando editamos manualmente un archivo de zona?. Los mismos que si la estuviéramos creando, sin olvidar incrementar en 1 el número de serie o serial antes de guardar el archivo con los cambios definitivos.

Ejemplo:

[root@dns ~]# rndc freeze desdelinux.fan

[root@dns ~]# nano /var/named/dynamic/db.desdelinux.fan
Modifico el archivo de la zona por cualquier razón, necesaria o no.
Guardo los cambios

[root@dns ~]# rndc thaw desdelinux.fan
A zone reload and thaw was started.
Check the logs to see the result.

[root@dns ~]# journalctl -f
ene 29 14:06:46 dns named[2257]: thawing zone 'desdelinux.fan/IN': success
ene 29 14:06:46 dns named[2257]: zone desdelinux.fan/IN: zone serial (6) unchanged. zone may fail to transfer to slaves.
ene 29 14:06:46 dns named[2257]: zone desdelinux.fan/IN: loaded serial 6

El error en la salida anterior, que en la consola se muestra en rojo, se debe a que “olvidé” aumentar el serial en 1. De haber seguido el procedimiento de correctamente, la salida hubiera sido:

[root@dns ~]# journalctl -f
-- Logs begin at dom 2017-01-29 08:31:32 EST. --
ene 29 14:06:46 dns named[2257]: zone desdelinux.fan/IN: loaded serial 6
ene 29 14:10:01 dns systemd[1]: Started Session 43 of user root.
ene 29 14:10:01 dns systemd[1]: Starting Session 43 of user root.
ene 29 14:10:01 dns CROND[2693]: (root) CMD (/usr/lib64/sa/sa1 1 1)
ene 29 14:10:45 dns named[2257]: received control channel command 'freeze desdelinux.fan'
ene 29 14:10:45 dns named[2257]: freezing zone 'desdelinux.fan/IN': success
ene 29 14:10:58 dns named[2257]: received control channel command 'thaw desdelinux.fan'
ene 29 14:10:58 dns named[2257]: thawing zone 'desdelinux.fan/IN': success
ene 29 14:10:58 dns named[2257]: zone desdelinux.fan/IN: journal file is out of date: removing journal file
ene 29 14:10:58 dns named[2257]: zone desdelinux.fan/IN: loaded serial 7
  • Amigos Lectores, repito que hay que leer minuciosamente las salidas de los comandos. Por algo sus desarrolladores pasaron tanto trabajo en programar cada comando, por muy sencillo que sea.

Resumen

Hasta aquí hemos abordado la implementación de la dupla DNS – DHCP, importantes y cruciales servicios para el buen desempeño de nuestra Red PYME, referentes al otorgamiento de direcciones dinámicas mediante el DHCP y la resolución de nombres de equipos y dominio por el DNS.

Seriamente esperamos hayan disfrutado de todo el procedimiento como lo hicimos nosotros . Aunque parezca más difícil mediante la consola, es mucho mas sencillo y educativo el implementar un servicio en UNIX®/Linux con su ayuda.

Me perdonan cualquier mala interpretación de conceptos pensados, creados, escritos, revisados, vueltos a escribir, y publicados en el idioma de Shakespeare, que no Cervantes. 😉

Próxima entrega

Creo que un poco mas de lo mismo -con adiciones teóricas sobre registros DNS- pero en Debian. No podemos olvidar a esa distribución, ¿nó?.

↓↓↓¿Te sirvió este artículo?, Vota por nosotros en los OpenAwards↓↓↓

12 COMENTARIOS

  1. Después de haber hecho una primera vista al este nuevo post de Federico se nota nuevamente la gran profesionalidad que se visto a todo lo largo de la serie “PYMES”; además del gran detalle que ilustra su dominio sobre dos de los servicios (DNS y DHCP) mas importantes de una cualquier red de trabajo. En este ocasión y a diferencia de mis comentarios anteriores, se me queda pendiente un 2do comentario después de haber llevado a la practica lo expuesto en este post.

  2. Sin comentarios, pa’ 400!!! Fico agradecerte pues muy bien sabes que leo tus posts y más no podemos pedirte. Comienzas con una muy buena organización, desde como instalar y ambientar el escritorio personal de un usuario, la estación de trabajo es la base, es el sentido de ser de aquellos servicios de red que muy bien nos explicas. Haz ido escalando y si bien es cierto que el nível es cada vez más mayor, cierto es que haz escrito y publicado para los que menos que son los que comienzan, para los que llevan algún tiempo como yo y para los más avanzados.
    Con el tiempo he llegado a la conclusión que sé muchos ya han llegado, la teoría, esa que nos cuesta tanto lograr adquirir por el simple hecho de no querer leer, porque ejecutar ya es mucho más fácil cuando sabemos lo que hacemos, los por qué ???, las cuestiones, dónde encontrar y cómo salir del error que tanto dolor de cabeza dan cuando ni sabemos de dónde provienen valga la redundancia.
    Por ello no quisiera que dejaras atrás esos elementos teóricos que incluirás sobre los registros DNS en la próxima publicación como anunciabas y mucho menos cuando se trata del querido y amado DEBIAN.
    GRACIAS MUCHAS y estamos a la espera.

  3. Wong: una opinión tuya después de leer vale mucho. Espero tus comentarios cuando pruebes el contenido, pues se que es como te gusta hacer. 😉

  4. Crespo: Como siempre tus comentarios son muy bien recibidos. Veo que has captado la línea general que me he planteado en la composición de ésta serie. Espero que, al igual que tu, muchos se hayan dado cuenta ya. Gracias por tu comentario.

  5. Dhunter: ¡Que bueno leerte de nuevo!. No vas a tener que esperar mucho. Para el lunes a mas tardar -o antes- quedará terminada para su publicación. No creas que me es fácil abarcar tres distros diferentes, pero el Respetable Lector, así lo pide. No solo Debian y Ubuntu, sino las Tres Orientadas a PYMES.

  6. Vamos que sí haz publicado es porque puedes, te apoyamos y sabemos que seguirás esa línea.
    Como dhunter espero la publicación de Debian con los dientes afilados. Sería bueno que abordaras un poquito sobre NTP. Sl2 y un fuerte abrazo. Si mis profesores me lo hubiesen enseñado todo así, JAJAJJA, Título de Platino, JAJAJJA.

  7. EL nivel de detalle en salidas de comandos es necesario para mostrar su importancia. Dicen mucho. Cierto que pocos artículos abordan éste nivel de datalle, porque piensan que serían artículos largos y pesados de leer. Bueno, parte del trabajo de un SysAdmin es leer esas pesadas y detalladas salidas, no solo ante un problema, sino también ante comprobaciones.

  8. Hola Federico, había prometido antes, escribir unos comentarios después de haber estudiado minuciosamente el post en cuestión; pues aquí van a continuación:
    – Genial la técnica de en vez de generar la clave TSIG para las actualizaciones dinámicas del DNS por el DHCP, copiar la misma clave rndc.key como dhcp.key , esto en apariencia “tan simple” demuestra que el objetivo no solo es el tecnicismo del HOWTO-INSTALL-DNS-&-DHCP sino el enseñarnos a pensar, 5 ESTRELLAS PARA EL AUTOR.
    – Muy interesante en el archivo de configuración del DNS, named.conf, la presencia de la linea “allow-transfer { localhost; 192.168.10.1; };” para realizar test el Dominio “desdelinux.fan” solamente desde la estación de trabajo del SysAdmin y el localhost (el propio server DNS), y además de la inserción de la clave TSIG para la actualización del DNS desde el DHCP.
    – Muy bueno la creación de las zonas directa e inversa del DNS junto con la explicación “detallada” de sus tipos de registros, además de la ejecución del comando “# named-checkconf -zp” para comprobar toda la sintaxis del named previo a su reinicio definitivo, así como los ejemplos de ejecución del comando “dig” para verificar diferentes tipos de registros del DNS.
    . En la configuración del DHCP (utilizando el arch /etc/dhcp/dhcpd.conf):
    – El como agregar nuestra red local con su rango para direcciones IP dinámicas a asignar, la definición del name-server, etc; además de como decirle al DHCP que actualice los registros del DNS a través del uso de las lineas “ddns-…” en su configuración.
    . Cuando todo ya esta operativo, 5 ESTRELLAS PARA EL AUTOR, en la ejecucion del comando “# dig desdelinux.fan axfr” para comprobar el TTL de los equipos de la LAN que tienen IP static de los que tienen IP dinámicas asignadas.
    . Por ultimo, GENIAL, la modificación manual de archivos de Zonas congelándolas primero con “# rndc freeze desdelinux.fan”, realizando a continuación la modificación y descongelándolas finalmente con “# rndc thaw desdelinux.fan”
    . Y LO MEJOR, TODO FUE REALIZADO DESDE EL TERMINAL.
    Sigue así Fico.

  9. Wong: tu comentario complementa al artículo. En serio, se nota que lo has estudiado concienzudamente. Sino, no pudieras comentar con el nivel de detalle que lo haces. Solo agregar que allow-transfer se usa fundamentalmente para cuando tenemos un DNS Esclavo y permitimos la transferencia de zonas dese el maestro hacia él. Lo uso de esa forma porque es un mecanismo fácil de implementar para hacer comprobaciones no peligrosas desde un solo equipo. Muchas Gracias por tu evaluación de 5. ¡Saludos! y te seguiré esperando en mis próximos artículos.

Dejar una respuesta