Desde Linux fico  

DNS y DHCP en Debian 8 “Jessie” – Redes PYMES

¡Hola amigos!. Después del par de artículos anteriores sobre el Domain Name System y el Dynamic Host Configuration Protocol publicados en “DNS y DHCP en openSUSE 13.2 ‘Harlequin‘” y “DNS y DHCP en CentOS 7“, ambos de la serie Redes PYMES, nos toca la configuración de esos servicios en Debian.

Repetimos que un buen punto de partida para aprender sobre los conceptos teóricos del DNS y el DHCP lo constituye Wikipedia.

Instalación del sistema operativo

Partiremos de la instalación básica de un servidor con el sistema operativo Debian 8 “Jessie”  sin instalar ambiente gráfico alguno u otro programa. Una máquina virtual con 512 megas de RAM y un disco duro de 20 Gigas es más que suficiente.

Durante el proceso de instalación -en modo texto preferentemente- y siguiendo el orden de las pantallas escogimos los siguientes parámetros:

  • Idioma:  Spanish – Español
  • País, territorio o área: Estados Unidos
  • Mapa de teclado a usar: Inglés estadounidense
  • Configurar la red manualmente:
    • Dirección IP: 192.168.10.5
    • Máscara de red: 255.255.255.0
    • Pasarela: 192.168.10.1
    • Direcciones de servidores de nombres: 127.0.0.1
    • Nombre de la máquina: dns
    • Nombre del dominio: desdelinux.fan
  • Clave del súper usuario: SuClave (después pide confirmación)
  • Nombre completo para el nuevo usuario: Debian First OS Buzz
  • Nombre de usuario para la cuenta: buzz
  • Elija una contraseña para el nuevo usuario: SuClave (después pide confirmación)
  • Seleccione su zona horaria: Este
  • Método de particionado: Guiado – utilizar todo el disco
    • Elija disco a particionar: Disco virtual 1 (vda) – 21.5 GB Virto Block Device
    • Esquema de particionado: Todos los ficheros en una partición (recomendado para novatos).
    • Finalizar el particionado y escribir cambios en el disco <Enter>
    • ¿Desea escribir los cambios en los discos? <Sí>
  • ¿Desea analizar otro CD o DVD?: <No>
  • ¿Desea utilizar una réplica de red?: <No>
  • ¿Desea participar en la encuesta sobre el uso de los paquetes?: <No>
  • Elegir los programas a instalar:
    [  ]  Entorno de escritorio Debian
    [*]  Utilidades estándar del sistema
    <Continuar>
  • ¿Desea instalar el cargador de arranque GRUB en el registro principal de arranque? <Sí>
    • /dev/vda <Enter>
  • “Instalación completada”: <Continuar>

En mi modesta opinión, instalar Debian es sencillo. Solo se requiere responder a preguntas de opciones predefinidas y algún que otro dato. Incluso me atrevo a decir que es más fácil seguir los pasos anteriores que mediante un vídeo, por ejemplo. Al leer no pierdo la concentración. Otra cuestión es ver, leer, interpretar, y dar hacia atrás y adelante al vídeo, cuando me pierda o no entienda bien algún significado importante. Un hoja escrita a mano, o un archivo de texto plano copiado en el móvil, servirán perfectamente como una guía eficaz.

Ajustes iniciales

Después de terminada la instalación básica y el primer reinicio, procedemos a declarar los Repositorios de Programas.

Al editar el archivo sources.list, comentamos todas las entradas existentes por defecto debido a que trabajaremos con repositorios locales nada mas. El contenido final del archivo -excluyendo las líneas comentadas- sería:

root@dns:~# nano /etc/apt/sources.list
deb http://192.168.10.1/repos/jessie/debian/ jessie main contrib
deb http://192.168.10.1/repos/jessie/debian-security/ jessie/updates main contrib

Actualizamos el sistema

root@dns:~# aptitude update
root@dns:~# aptitude upgrade
root@dns:~# reboot

Instalamos SSH para acceder remotamente

root@dns:~# aptitude install ssh

Para permitir el inicio de una sesión remota vía SSH al usuario root -desde la LAN Empresarial solamente- modificamos su archivo de configuración:

root@dns:~# nano /etc/ssh/sshd_config
....
PermitRootLogin yes
....

root@dns:~# systemctl restart ssh.service
root@dns:~# systemctl status ssh.service

Iniciamos sesión remota vía SSH en “dns” desde la máquina “sysadmin”:

buzz@sysadmin:~$ rm .ssh/known_hosts 
buzz@sysadmin:~$ ssh root@192.168.10.5
...
root@192.168.10.5's password: 
...
root@dns:~#

Archivos principales de configuración

Los archivos principales de la configuración del sistema estarán acordes a nuestras selecciones durante la instalación:

root@dns:~# cat /etc/hosts
127.0.0.1   localhost
192.168.10.5    dns.desdelinux.fan  dns

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

root@dns:~# cat /etc/resolv.conf 
search desdelinux.fan
nameserver 127.0.0.1

root@dns:~# hostname
dns

root@dns:~# hostname -f
dns.desdelinux.fan

root@dns:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
    address 192.168.10.5
    netmask 255.255.255.0
    network 192.168.10.0
    broadcast 192.168.10.255
    gateway 192.168.10.1
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 127.0.0.1
    dns-search desdelinux.fan

Instalamos paquetes de súper vivencia

root@dns:~# aptitude install htop mc deborphan

Limpieza de paquetes descargados si los hubiera

root@dns:~# aptitude install -f
root@dns:~# aptitude purge ~c
root@dns:~# aptitude clean
root@dns:~# aptitude autoclean

Instalamos el BIND9

  • ANTES de instalar el BIND recomendamos encarecidamente visiten la página Tipos de registros DNS en Wikipedia, tanto en sus versiones en español como en inglés. Esos tipos de registros son los que utilizaremos en la configuración de los archivos Zonas, tanto Directa como Inversa. Es muy educativo conocer con qué estamos lidiando.
  • También sugerimos lean las siguientes Request for Comments RFC – Solicitudes para Comentarios, las cuales están íntimamente relacionadas con un saludable funcionamiento del servicio DNS, sobre todo con respecto a la Recursividad hacia los Servidores Raíces:
    • RFCs 1912, 5735, 6303, and BCP 32: relativas al localhost
    • RFCs 1912, 6303: Style zone for IPv6 localhost address
    • RFCs 1912, 5735 and 6303: relativas a la Red Local – “This” Network
    • RFCs 1918, 5735 and 6303: Private Use Networks
    • RFC 6598: Shared Address Space
    • RFCs 3927, 5735 and 6303: Link-local/APIPA
    • RFCs 5735 and 5736: Internet Engineering Task Force protocol assignments
    • RFCs 5735, 5737 and 6303: TEST-NET-[1-3] for Documentation
    • RFCs 3849 and 6303: IPv6 Example Range for Documentation
    • BCP 32: Domain Names for Documentation and Testing
    • RFCs 2544 and 5735: Router Benchmark Testing
    • RFC 5735: IANA Reserved – Old Class E Space
    • RFC 4291: IPv6 Unassigned Addresses
    • RFCs 4193 and 6303: IPv6 ULA
    • RFCs 4291 and 6303: IPv6 Link Local
    • RFCs 3879 and 6303: IPv6 Deprecated Site-Local Addresses
    • RFC 4159: IP6.INT is Deprecated

Instalación

root@dns:~# aptitude search bind9
p   bind9                                                     - Internet Domain Name Server                                         
p   bind9-doc                                                 - Documentation for BIND                                              
i   bind9-host                                                - Version of 'host' bundled with BIND 9.X                             
p   bind9utils                                                - Utilities for BIND                                                  
p   gforge-dns-bind9                                          - collaborative development tool - DNS management (using Bind9)       
i A libbind9-90                                               - BIND9 Shared Library used by BIND

Pruebe también a ejecutar aptitude search ~dbind9

root@dns:~# aptitude install bind9

root@dns:~# systemctl restart bind9.service

root@dns:~# systemctl status bind9.service
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since vie 2017-02-03 10:33:11 EST; 1s ago
     Docs: man:named(8)
  Process: 1460 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 1465 (named)
   CGroup: /system.slice/bind9.service
           └─1465 /usr/sbin/named -f -u bind

feb 03 10:33:11 dns named[1465]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
feb 03 10:33:11 dns named[1465]: command channel listening on 127.0.0.1#953
feb 03 10:33:11 dns named[1465]: command channel listening on ::1#953
feb 03 10:33:11 dns named[1465]: managed-keys-zone: loaded serial 2
feb 03 10:33:11 dns named[1465]: zone 0.in-addr.arpa/IN: loaded serial 1
feb 03 10:33:11 dns named[1465]: zone localhost/IN: loaded serial 2
feb 03 10:33:11 dns named[1465]: zone 127.in-addr.arpa/IN: loaded serial 1
feb 03 10:33:11 dns named[1465]: zone 255.in-addr.arpa/IN: loaded serial 1
feb 03 10:33:11 dns named[1465]: all zones loaded
feb 03 10:33:11 dns named[1465]: running
Hint: Some lines were ellipsized, use -l to show in full.

Archivos de configuración instalados por el BIND9

De forma un poco diferente a la configuración del servicio DNS en CentOS y openSUSE, en Debian se crean los siguientes archivos en el directorio /etc/bind:

root@dns:~# ls -l /etc/bind/
total 52
-rw-r--r-- 1 root root 2389 jun 30  2015 bind.keys
-rw-r--r-- 1 root root  237 jun 30  2015 db.0
-rw-r--r-- 1 root root  271 jun 30  2015 db.127
-rw-r--r-- 1 root root  237 jun 30  2015 db.255
-rw-r--r-- 1 root root  353 jun 30  2015 db.empty
-rw-r--r-- 1 root root  270 jun 30  2015 db.local
-rw-r--r-- 1 root root 3048 jun 30  2015 db.root
-rw-r--r-- 1 root bind  463 jun 30  2015 named.conf
-rw-r--r-- 1 root bind  490 jun 30  2015 named.conf.default-zones
-rw-r--r-- 1 root bind  165 jun 30  2015 named.conf.local
-rw-r--r-- 1 root bind  890 feb  3 10:32 named.conf.options
-rw-r----- 1 bind bind   77 feb  3 10:32 rndc.key
-rw-r--r-- 1 root root 1317 jun 30  2015 zones.rfc1918

Todos los archivos anteriores están en texto plano. Si queremos conocer el significado y contenido de cada uno de ellos, lo podemos hacer mediante los comandos less o cat, lo cual es una buena práctica.

Documentación acompañante

En el directorio /usr/share/doc/bind9 tendremos:

root@dns:~# ls -l /usr/share/doc/bind9
total 56
-rw-r--r-- 1 root root  5927 jun 30  2015 copyright
-rw-r--r-- 1 root root 19428 jun 30  2015 changelog.Debian.gz
-rw-r--r-- 1 root root 11790 ene 27  2014 FAQ.gz
-rw-r--r-- 1 root root   396 jun 30  2015 NEWS.Debian.gz
-rw-r--r-- 1 root root  3362 jun 30  2015 README.Debian.gz
-rw-r--r-- 1 root root  5840 ene 27  2014 README.gz

En la documentación anterior encontraremos Abundante Material de Estudio que recomendamos leer ANTES de configurar el BIND, e incluso ANTES de buscar en Internet artículos relativos el BIND y al DNS en general. Vamos a leer el contenido de algunos de esos archivos:

FAQs o Frequently Asked Questions about BIND 9

  1. Compilation and Installation Questions – Preguntas sobre la Compilación e Instalación
  2. Configuration and Setup Questions – Preguntas sobre la Configuración y puesta a punto
  3. Operations Questions – Preguntas sobre la Operación
  4. General Questions – Preguntas Generales
  5. Operating-System Specific Questions – Preguntas Específicas sobre cada Sistema Operativo
    1. HPUX
    2. Linux
    3. Windows
    4. FreeBSD
    5. Solaris
    6. Apple Mac OS X

NEWS.Debian.gz

NEWS.Debian nos dice en resumen que los parámetros allow-query-cache y allow-recursion están habilitados por defecto para las ACL incorporadas en el BIND –built-in– ‘localnets‘ y ‘localhost‘. También nos informa que los cambios por defecto se llevaron a cabo para hacer menos atractivo a los servidores caché a un ataque por Spoofing desde redes externas.

Para comprobar lo escrito en el párrafo anterior, si desde una máquina de la propia red 192.168.10.0/24 que es la de nuestro ejemplo, realizamos una petición DNS sobre el dominio desdelinux.net, y al mismo tiempo en el propio servidor dns.desdelinux.fan ejecutamos tail -f /var/log/syslog obtendremos lo siguiente:

buzz@sysadmin:~$ dig localhost
....
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;localhost.         IN  A

;; ANSWER SECTION:
localhost.      604800  IN  A   127.0.0.1

;; AUTHORITY SECTION:
localhost.      604800  IN  NS  localhost.

;; ADDITIONAL SECTION:
localhost.      604800  IN  AAAA    ::1

buzz@sysadmin:~$ dig desdelinux.net
....
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;desdelinux.net.            IN  A
....
root@dns:~# tail -f /var/log/syslog
....
Feb  4 13:04:31 dns named[1602]: error (network unreachable) resolving 'desdelinux.net/A/IN': 2001:7fd::1#53
Feb  4 13:04:31 dns named[1602]: error (network unreachable) resolving 'desdelinux.net/A/IN': 2001:503:c27::2:30#53
....

La salida del syslog es mucho más larga debido a la búsqueda de los servidores raíces por parte del BIND. Por supuesto que el archivo /etc/resolv.conf en el equipo sysadmin.desdelinux.fan apunta al DNS 192.168.10.5.

De la ejecución de los comandos anteriores podemos sacar varias conclusiones a priori:

  • El BIND queda configurado por defecto como un Servidor Caché funcional sin necesidad de configuraciones posteriores, y responde consultas DNS para las localnets y el localhost
  • La Recursividad – Recursion está habilitada para las localnets y el localhost
  • Aun no es un servidor Autoritario
  • A diferencia de CentOS, donde tuvimos que declarar el parámetro “listen-on port 53 { 127.0.0.1; 192.168.10.5; };” de manera explícita para que escuchara peticiones DNS por la interfaz de red 192.168.10.5 del propio DNS, en Debian no es necesario porque admite peticiones DNS para las localnets y el localhost por defecto. Revisen el contenido del archivo /etc/bind/named.conf.options y verán que no existe declaración alguna listen-on.
  • Están habilitadas las consultas IPv4 e IPv6

Si con solo leer e interpretar -un tin como decimos en Cuba- el archivo NEWS.Debian.gz hemos arribado a interesantes conclusiones que nos permiten conocer un poco mas sobre la Filosofía de Configuración por defecto del Team Debian con respecto al BIND, ¿qué otros aspectos interesantes podemos conocer de seguir leyendo los archivos de la Documentación Acompañante?.

README.Debian.gz

README.Debian nos informa -entre muchos otros aspectos- que las Extensiones de seguridad para el Sistema de Nombres de Dominio – Domain Name System Security Extensions o DNSSEC, están habilitadas; y reafirma que la configuración por defecto trabaja para la mayoría de los servidores (servidores hojas – leaf servers refiríendose a las hojas del árbol de dominios) sin necesidad de la intervención del usuario.

  • DNSSEC según Wikipedia: Las Extensiones de seguridad para el Sistema de Nombres de Dominio ( del inglés Domain Name System Security Extensions, o DNSSEC) es un conjunto de especificaciones de la Internet Engineering Task Force (IETF) para asegurar cierto tipo de información proporcionada por el sistema de nombre de dominio (DNS) que se usa en el protocolo de Internet (IP). Se trata de un conjunto de extensiones al DNS que proporcionan a los clientes DNS (o resolvers) la autenticación del origen de datos DNS, la negación autenticada de la existencia e integridad de datos, pero no disponibilidad o confidencialidad.

Sobre el Esquema de Configuración nos dice que todos los Archivos de Configuración Estáticos, los Archivos de las Zonas para los Servidores Raíces, y las Zonas Directa e Inversa del localhost están en /etc/bind.

El Directorio de Trabajo del demonio named es /var/cache/bind de forma que, cualquier archivo transitorio que genere el named tales como bases de datos para la cual actúa como Servidor Esclavo, sean escritas en el Sistema de Archivos /var, que es adonde pertenecen.

Al contrario que las versiones anteriores del paquete BIND para Debian, el archivo named.conf y las db.* suministradas, están etiquetadas como archivos de configuración. De forma tal que si necesitamos un Servidor DNS que actúe principalmente como Servidor Caché y que no sea Autoritario para nadie más, lo podamos utilizar tal cual se instala y queda configurado por defecto.

Si se necesita implementar un DNS Autoritario, sugieren colocar los archivos de las Zonas Maestras en el mismo directorio /etc/bind. Si la complejidad de las zonas para las que el named será Autoritario lo requiere, se recomienda la creación de una estructura de subdirectorios, haciendo referencia a los archivos de zonas de forma absoluta en el archivo named.conf.

Cualquier Archivo de Zona para la que el named actúe como Servidor Esclavo se debe ubicar en /var/cache/bind.

Los Archivos de Zonas sujetos a Actualizaciones Dinámicas por parte de un DHCP o del comando nsupdate, se deben almacenar en /var/lib/bind.

Si el sistema operativo utiliza apparmor, el perfil instalado solo funciona con la configuración por defecto del BIND. Posteriores cambios en la configuración del named puede que requieran de cambios en el perfil del apparmor. Visite https://wiki.ubuntu.com/DebuggingApparmor antes de rellenar un formulario acusando un bug en ese servicio.

Existen varias cuestiones asociadas a la ejecución del Debian BIND en una Jaula Chroot – chroot jail. Visite http://www.tldp.org/HOWTO/Chroot-BIND-HOWTO.html para mas información.

Otras informaciones

man named, man named.conf, man named-checkconf, man named-checkzone, man rndc, etcétera.

root@dns:~# named -v
BIND 9.9.5-9+deb8u1-Debian (Extended Support Version)

root@dns:~# named -V
BIND 9.9.5-9+deb8u1-Debian (Extended Support Version) <id:f9b8a50e> 
built by make with '--prefix=/usr' '--mandir=/usr/share/man' \
'--infodir=/usr/share/info' '--sysconfdir=/etc/bind' \
'--localstatedir=/var' '--enable-threads' '--enable-largefile' \
'--with-libtool' '--enable-shared' '--enable-static' \
'--with-openssl=/usr' '--with-gssapi=/usr' '--with-gnu-ld' \
'--with-geoip=/usr' '--with-atf=no' '--enable-ipv6' '--enable-rrl' \
'--enable-filter-aaaa' \
'CFLAGS=-fno-strict-aliasing -fno-delete-null-pointer-checks -DDIG_SIGCHASE -O2'
compiled by GCC 4.9.2
using OpenSSL version: OpenSSL 1.0.1k 8 Jan 2015
using libxml2 version: 2.9.1

root@dns:~# ps -e | grep named
  408 ?        00:00:00 named

root@dns:~# ps -e | grep bind
  339 ?        00:00:00 rpcbind

root@dns:~# ps -e | grep bind9
root@dns:~#

root@dns:~# ls /var/run/named/
named.pid    session.key  
root@dns:~# ls -l /var/run/named/named.pid 
-rw-r--r-- 1 bind bind 4 feb  4 13:20 /var/run/named/named.pid

root@dns:~# rndc status
version: 9.9.5-9+deb8u1-Debian <id:f9b8a50e>
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 100
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
  • Es innegable la importancia de consultar la Documentación isntalada con el paquete BIND9 antes que cualquier otra.

bind9-doc

root@dns:~# aptitude install bind9-doc links2
root@dns:~# dpkg -L bind9-doc

El paquete bind9-doc instala, entre otras informaciones útiles, el Manual de Referencia del Administrador del BIND 9. Para acceder al manual -en inglés- ejecutamos:

root@dns:~# links2 file:///usr/share/doc/bind9-doc/arm/Bv9ARM.html
BIND 9 Administrator Reference Manual
Copyright (c) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
Copyright (c) 2000-2003 Internet Software Consortium.

Esperamos que disfruten su lectura.

  • Sin salir de casa, tenemos a mano Abundante Documentación Oficial sobre el BIND y sobre el servicio DNS en general.

Configuramos el BIND al estilo Debian

/etc/bind/named.conf “el principal”

root@dns:~# nano /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

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

¿Requiere de traducción el encabezado comentado?.

/etc/bind/named.conf.options

root@dns:~# cp /etc/bind/named.conf.options /etc/bind/named.conf.options.original

root@dns:~# nano /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //=====================================================================$
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //=====================================================================$

    // No queremos DNSSEC
        dnssec-enable no;
        //dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035

 // No necesitamos escuchar por direcciones IPv6
        // listen-on-v6 { any; };
    listen-on-v6 { none; };

 // Para comprobaciones desde el localhost y sysadmin
    // mediante dig desdelinux.fan axfr
    // No tenemos DNS Esclavos... hasta ahora
 allow-transfer { localhost; 192.168.10.1; };
};

root@dns:~# named-checkconf 
root@dns:~#

/etc/bind/named.conf.local

En el encabezado comentado de éste archivo recomiendan incluir las Zonas indicadas en las RFC-1918 descritas en el archivo /etc/bind/zones.rfc1918. La inclusión de esas zonas localmente prevée que cualquier consulta relativa a ellas no salga de la red local hacia los servidores raíces, lo cual tiene dos ventajas significativas:

  • Resolución local más rápida para los usuarios locales
  • No se crea un tráfico innecesario -o espurio- hacia los servidores raíces.

Personalmente no dispongo de conexión con Internet para probar la Recursividad o el Forwarding. No obstante, y como no hemos invalidado la Recursividad en el archivo named.conf.options -mediante recursion no;-  podemos incluir las mencionadas zonas y otras más que explico a continuación.

Al instalar el BIND 9.9.7 en el Sistema Operativo FreeBSD 10.0, que también -y de paso- es Software Libre, el archivo de configuración /usr/local/etc/namedb/named.conf.sample contiene toda una serie de zonas que recomiendan servir localmente para -también- obtener las ventajas antes mencionadas.

Para no alterar la configuración original del BIND en Debian, sugerimos crear el archivo /etc/bind/zones.rfcFreeBSD e incluirlo en el /etc/bind/named.conf.local con el contenido indicado abajo, y con los caminos – paths a los archivos ya adaptados a Debian:

root@dns:~# nano /etc/bind/zones.rfcFreeBSD
// Shared Address Space (RFC 6598)
zone "64.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "65.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "66.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "67.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "68.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "69.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "70.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "71.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "72.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "73.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "74.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "75.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "76.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "77.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "78.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "79.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "80.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "81.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "82.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "83.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "84.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "85.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "86.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "87.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "88.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "89.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "90.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "91.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "92.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "93.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "94.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "95.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "96.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "97.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "98.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "99.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "100.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "101.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "102.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "103.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "104.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "105.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "106.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "107.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "108.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "109.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "110.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "111.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "112.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "113.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "114.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "115.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "116.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "117.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "118.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "119.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "120.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "121.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "122.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "123.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "124.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "125.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "126.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "127.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// Link-local/APIPA (RFCs 3927, 5735 and 6303)
zone "254.169.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// IETF protocol assignments (RFCs 5735 and 5736)
zone "0.0.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// TEST-NET-[1-3] for Documentation (RFCs 5735, 5737 and 6303)
zone "2.0.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "100.51.198.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "113.0.203.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// IPv6 Example Range for Documentation (RFCs 3849 and 6303)
zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/bind/db.empty"; };

// Domain Names for Documentation and Testing (BCP 32)
zone "test" { type master; file "/etc/bind/db.empty"; };
zone "example" { type master; file "/etc/bind/db.empty"; };
zone "invalid" { type master; file "/etc/bind/db.empty"; };
zone "example.com" { type master; file "/etc/bind/db.empty"; };
zone "example.net" { type master; file "/etc/bind/db.empty"; };
zone "example.org" { type master; file "/etc/bind/db.empty"; };

// Router Benchmark Testing (RFCs 2544 and 5735)
zone "18.198.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "19.198.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// IANA Reserved - Old Class E Space (RFC 5735)
zone "240.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "241.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "242.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "243.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "244.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "245.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "246.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "247.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "248.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "249.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "250.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "251.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "252.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "253.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "254.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// IPv6 Unassigned Addresses (RFC 4291)
zone "1.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "3.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "4.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "5.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "6.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "7.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "8.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "9.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "a.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "b.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "c.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "d.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "e.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "0.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "1.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "2.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "3.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "4.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "5.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "6.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "7.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "8.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "9.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "a.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "b.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "0.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "1.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "2.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "3.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "4.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "5.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "6.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "7.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };

// IPv6 ULA (RFCs 4193 and 6303)
zone "c.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "d.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };

// IPv6 Link Local (RFCs 4291 and 6303)
zone "8.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "9.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "a.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "b.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };

// IPv6 Deprecated Site-Local Addresses (RFCs 3879 and 6303)
zone "c.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "d.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "e.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "f.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };

// IP6.INT is Deprecated (RFC 4159)
zone "ip6.int"      { type master; file "/etc/bind/db.empty"; };

Aunque hemos eliminado la posibilidad de escuchar peticiones IPv6 en nuestro ejemplo, no está demás la inclusión de las zonas IPv6 en el archivo anterior para quien las necesite.

El contenido final de /etc/bind/named.conf.local es:

root@dns:~# nano /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
include "/etc/bind/zones.rfc1918";
include "/etc/bind/zones.rfcFreeBSD";

// 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 "/var/lib/bind/db.desdelinux.fan";
};

zone "10.168.192.in-addr.arpa" {
 type master;
 file "/var/lib/bind/db.10.168.192.in-addr.arpa";
};

root@dns:~# named-checkconf 
root@dns:~#

Creamos los archivos de cada Zona

El contenido de los archivos de cada zona lo podemos copiar literalmente desde el artículo “DNS y DHCP en CentOS 7“, siempre y cuado pongamos cuidado en cambiar el directorio de destino a /var/lib/bind:

[root@dns ~]# nano /var/lib/bind/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

[root@dns ~]# nano /var/lib/bind/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.

Comprobamos la sintaxis de cada zona

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

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

Comprobación de la configuración general del BIND

root@dns:~# named-checkconf -zp
  • 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 BIND y comprobamos su status

[root@dns ~]# systemctl restart bind9.service
[root@dns ~]# systemctl status bind9.service
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since dom 2017-02-05 07:45:03 EST; 5s ago
     Docs: man:named(8)
  Process: 1345 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 1350 (named)
   CGroup: /system.slice/bind9.service
           └─1350 /usr/sbin/named -f -u bind

feb 05 07:45:03 dns named[1350]: zone 1.f.ip6.arpa/IN: loaded serial 1
feb 05 07:45:03 dns named[1350]: zone a.f.ip6.arpa/IN: loaded serial 1
feb 05 07:45:03 dns named[1350]: zone localhost/IN: loaded serial 2
feb 05 07:45:03 dns named[1350]: zone test/IN: loaded serial 1
feb 05 07:45:03 dns named[1350]: zone example/IN: loaded serial 1
feb 05 07:45:03 dns named[1350]: zone 5.e.f.ip6.arpa/IN: loaded serial 1
feb 05 07:45:03 dns named[1350]: zone b.f.ip6.arpa/IN: loaded serial 1
feb 05 07:45:03 dns named[1350]: zone ip6.int/IN: loaded serial 1
feb 05 07:45:03 dns named[1350]: all zones loaded
feb 05 07:45:03 dns named[1350]: running

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.

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: 1 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sun Feb 05 07:49:01 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. root.dns.desdelinux.fan. 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. root.dns.desdelinux.fan. 1 86400 3600 604800 10800
;; Query time: 1 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sun Feb 05 07:49:47 EST 2017
;; XFR size: 11 records (messages 1, bytes 333)

buzz@sysadmin:~$ dig IN SOA desdelinux.fan
buzz@sysadmin:~$ dig IN MX desdelinux.fan
buzz@sysadmin:~$ dig IN TXT desdelinux.fan

buzz@sysadmin:~$ host proxyweb
proxyweb.desdelinux.fan has address 192.168.10.6

buzz@sysadmin:~$ host ftpserver
ftpserver.desdelinux.fan has address 192.168.10.8

buzz@sysadmin:~$ host 192.168.10.9
9.10.168.192.in-addr.arpa domain name pointer mail.desdelinux.fan.

… Y cualquier otra comprobación que necesitemos.

Instalamos y configuramos el DHCP

En Debian, el servicio DHCP lo brinda el paquete isc-dhcp-server:

root@dns:~# aptitude search isc-dhcp
i   isc-dhcp-client      - DHCP client for automatically obtaining an IP address               
p   isc-dhcp-client-dbg  - ISC DHCP server for automatic IP address assignment (client debug)  
i   isc-dhcp-common      - common files used by all of the isc-dhcp packages                   
p   isc-dhcp-dbg         - ISC DHCP server for automatic IP address assignment (debuging symbol
p   isc-dhcp-dev         - API for accessing and modifying the DHCP server and client state    
p   isc-dhcp-relay       - ISC DHCP relay daemon                                               
p   isc-dhcp-relay-dbg   - ISC DHCP server for automatic IP address assignment (relay debug)   
p   isc-dhcp-server      - ISC DHCP server for automatic IP address assignment                 
p   isc-dhcp-server-dbg  - ISC DHCP server for automatic IP address assignment (server debug)  
p   isc-dhcp-server-ldap - DHCP server that uses LDAP as its backend

root@dns:~# aptitude install isc-dhcp-server

Terminada la instalación del paquete, el -omnipresente- systemd se queja de que no pudo iniciar el servicio. En Debian, tenemos que declarar explícitamente por cual interfaz de red arrendará direcciones IP y responderá a las solicitudes, el isc-dhcp-server:

root@dns:~# nano /etc/default/isc-dhcp-server
....
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth0"

Documentación instalada

root@dns:~# ls -l /usr/share/doc/isc-dhcp-server/
total 44
-rw-r--r-- 1 root root  1235 dic 14  2014 copyright
-rw-r--r-- 1 root root 26031 feb 13  2015 changelog.Debian.gz
drwxr-xr-x 2 root root  4096 feb  5 08:10 examples
-rw-r--r-- 1 root root   592 dic 14  2014 NEWS.Debian.gz
-rw-r--r-- 1 root root  1099 dic 14  2014 README.Debian

Clave TSIG “dhcp-key”

Es recomendable la generación de la clave TSIG o Firma de Transacción – Transaction SIGnature, para la autenticación de las actualizaciones dinámicas del DNS por el DHCP. Como vimos en el artículo anterior “DNS y DHCP en CentOS 7“, consideramos que no es tan imprescindible la generación de esa clave, sobre todo cuando ambos servicios están instalados en un mismo servidor. No obstante, ofrecemos el procedimiento general para su generación automática:

root@dns:~# dnssec-keygen -a HMAC-MD5 -b 128 -r /dev/urandom -n USER dhcp-key
Kdhcp-key.+157+11088

root@dns:~# cat Kdhcp-key.+157+11088.private 
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: TEqfcx2FUMYBQ1hA1ZGelA==
Bits: AAA=
Created: 20170205121618
Publish: 20170205121618
Activate: 20170205121618

root@dns:~# nano dhcp.key
key dhcp-key {
        algorithm hmac-md5;
        secret "TEqfcx2FUMYBQ1hA1ZGelA==";
};

root@dns:~# install -o root -g bind -m 0640 dhcp.key /etc/bind/dhcp.key
root@dns:~# install -o root -g root -m 0640 dhcp.key /etc/dhcp/dhcp.key
root@dns:~# ls -l /etc/bind/*.key
-rw-r----- 1 root bind 78 feb  5 08:21 /etc/bind/dhcp.key
-rw-r----- 1 bind bind 77 feb  4 11:47 /etc/bind/rndc.key
root@dns:~# ls -l /etc/dhcp/dhcp.key 
-rw-r----- 1 root root 78 feb  5 08:21 /etc/dhcp/dhcp.key

Actualización de las Zonas del BIND mediante la clave dhcp-key

root@dns:~# nano /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
include "/etc/bind/zones.rfc1918";
include "/etc/bind/zones.rfcFreeBSD";
include "/etc/bind/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 "/var/lib/bind/db.desdelinux.fan";
 allow-update { key dhcp-key; };
};

zone "10.168.192.in-addr.arpa" {
    type master;
    file "/var/lib/bind/db.10.168.192.in-addr.arpa";
 allow-update { key dhcp-key; };
};
root@dns:~# named-checkconf 
root@dns:~#

Configuramos el isc-dhcp-server

root@dns:~# mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.original
root@dns:~# nano /etc/dhcp/dhcpd.conf
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";

include "/etc/dhcp/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

Comprobamos el archivo dhcpd.conf

root@dns:~# dhcpd -t
Internet Systems Consortium DHCP Server 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcp/dhcpd.leases
PID file: /var/run/dhcpd.pid

Reiniciamos el BIND e iniciamos el isc-dhcp-server

root@dns:~# systemctl restart bind9.service 
root@dns:~# systemctl status bind9.service 

root@dns:~# systemctl start isc-dhcp-server.service
root@dns:~# systemctl status isc-dhcp-server.service 
● isc-dhcp-server.service - LSB: DHCP server
   Loaded: loaded (/etc/init.d/isc-dhcp-server)
   Active: active (running) since dom 2017-02-05 08:41:45 EST; 6s ago
  Process: 2039 ExecStop=/etc/init.d/isc-dhcp-server stop (code=exited, status=0/SUCCESS)
  Process: 2049 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/isc-dhcp-server.service
           └─2057 /usr/sbin/dhcpd -q -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid eth0

feb 05 08:41:43 dns dhcpd[2056]: Wrote 0 leases to leases file.
feb 05 08:41:43 dns dhcpd[2057]: Server starting service.
feb 05 08:41:45 dns isc-dhcp-server[2049]: Starting ISC DHCP server: dhcpd.

Comprobaciones con clientes

Iniciamos un cliente con el sistema operativo Windows 7, con el nombre “LAGER”.

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

buzz@sysadmin:~$ dig in txt lager.desdelinux.fan

Cambiamos el nombre de ese cliente a “seven” y reiniciamos al cliente

buzz@sysadmin:~$ host lager
;; connection timed out; no servers could be reached

buzz@sysadmin:~$ host seven
seven.desdelinux.fan has address 192.168.10.30
buzz@sysadmin:~$ host 192.168.10.30
30.10.168.192.in-addr.arpa domain name pointer seven.desdelinux.fan.

buzz@sysadmin:~$ dig in txt seven.desdelinux.fan

Volvimos a cambiar el nombre del cliente con Windows 7 a “win7”

buzz@sysadmin:~$ host seven
;; connection timed out; no servers could be reached

buzz@sysadmin:~$ host win7
win7.desdelinux.fan has address 192.168.10.30
buzz@sysadmin:~$ host 192.168.10.30
30.10.168.192.in-addr.arpa domain name pointer win7.desdelinux.fan.

buzz@sysadmin:~$ dig in txt win7.desdelinux.fan
; <<>> DiG 9.9.5-9+deb8u1-Debian <<>> in txt win7.desdelinux.fan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11218
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;win7.desdelinux.fan.       IN  TXT

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

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

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

;; Query time: 0 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sun Feb 05 09:13:20 EST 2017
;; MSG SIZE  rcvd: 129

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. 8 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
win7.desdelinux.fan. 3600 IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"
win7.desdelinux.fan. 3600    IN  A   192.168.10.30
desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 8 86400 3600 604800 10800
;; Query time: 2 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sun Feb 05 09:15:13 EST 2017
;; XFR size: 15 records (messages 1, bytes 453)

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/lib/bind/db.desdelinux.fan.jnl
del desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 1 86400 3600 604800 10800
add desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 2 86400 3600 604800 10800
add LAGER.desdelinux.fan.   3600    IN  A   192.168.10.30
add LAGER.desdelinux.fan.   3600    IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"
del desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 2 86400 3600 604800 10800
del LAGER.desdelinux.fan.   3600    IN  A   192.168.10.30
add desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 3 86400 3600 604800 10800
del desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 3 86400 3600 604800 10800
del LAGER.desdelinux.fan.   3600    IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"
add desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 4 86400 3600 604800 10800
del desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 4 86400 3600 604800 10800
add desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 5 86400 3600 604800 10800
add seven.desdelinux.fan.   3600    IN  A   192.168.10.30
add seven.desdelinux.fan.   3600    IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"
del desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 5 86400 3600 604800 10800
del seven.desdelinux.fan.   3600    IN  A   192.168.10.30
add desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 6 86400 3600 604800 10800
del desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 6 86400 3600 604800 10800
del seven.desdelinux.fan.   3600    IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"
add desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 7 86400 3600 604800 10800
del desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 7 86400 3600 604800 10800
add desdelinux.fan.     10800   IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 8 86400 3600 604800 10800
add win7.desdelinux.fan.    3600    IN  A   192.168.10.30
add win7.desdelinux.fan.    3600    IN  TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"

[root@dns ~]# named-journalprint /var/lib/bind/db.10.168.192.in-addr.arpa.jnl
del 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 1 86400 3600 604800 10800
add 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 2 86400 3600 604800 10800
add 30.10.168.192.in-addr.arpa. 3600 IN PTR LAGER.desdelinux.fan.
del 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 2 86400 3600 604800 10800
del 30.10.168.192.in-addr.arpa. 3600 IN PTR LAGER.desdelinux.fan.
add 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 3 86400 3600 604800 10800
del 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 3 86400 3600 604800 10800
add 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 4 86400 3600 604800 10800
add 30.10.168.192.in-addr.arpa. 3600 IN PTR seven.desdelinux.fan.
del 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 4 86400 3600 604800 10800
del 30.10.168.192.in-addr.arpa. 3600 IN PTR seven.desdelinux.fan.
add 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 5 86400 3600 604800 10800
del 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 5 86400 3600 604800 10800
add 10.168.192.in-addr.arpa. 10800  IN  SOA dns.desdelinux.fan. root.dns.desdelinux.fan. 6 86400 3600 604800 10800
add 30.10.168.192.in-addr.arpa. 3600 IN PTR win7.desdelinux.fan.

[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 BIND, 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 rndcman rndc– para el control del named.

  • 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.

Congelamos las zonas

Como vamos a realizar cambios en las Zonas Directa e Inversa mientras se están ejecutando el DNS y el DHCP, lo mas saludable es congelar las Zonas del DNS:

[root@dns ~]# rndc freeze

La Zona desdelinux.fan contiene los siguientes registros:

[root@dns ~]# cat /var/lib/bind/db.desdelinux.fan
$ORIGIN .
$TTL 10800      ; 3 hours
desdelinux.fan          IN SOA  dns.desdelinux.fan. root.dns.desdelinux.fan. (
                                8          ; serial
                                86400      ; refresh (1 day)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                10800      ; minimum (3 hours)
                                )
                        NS      dns.desdelinux.fan.
                        MX      10 mail.desdelinux.fan.
                        TXT     "DesdeLinux, su Blog dedicado al Software Libre"
$ORIGIN desdelinux.fan.
ad-dc                   A       192.168.10.3
blog                    A       192.168.10.7
dns                     A       192.168.10.5
fileserver              A       192.168.10.4
ftpserver               A       192.168.10.8
mail                    A       192.168.10.9
proxyweb                A       192.168.10.6
sysadmin                A       192.168.10.1
$TTL 3600       ; 1 hour
win7                    A       192.168.10.30
                        TXT     "31b7228ddd3a3b73be2fda9e09e601f3e9"

Agreguemos el servidor “shorewall” con la IP 192.168.10.10:

root@dns:~# nano /var/lib/bind/db.desdelinux.fan
$ORIGIN .
$TTL 10800  ; 3 hours
desdelinux.fan      IN SOA  dns.desdelinux.fan. root.dns.desdelinux.fan. (
                9          ; serial
                86400      ; refresh (1 day)
                3600       ; retry (1 hour)
                604800     ; expire (1 week)
                10800      ; minimum (3 hours)
                )
            NS  dns.desdelinux.fan.
            MX  10 mail.desdelinux.fan.
            TXT "DesdeLinux, su Blog dedicado al Software Libre"
$ORIGIN desdelinux.fan.
ad-dc           A   192.168.10.3
blog            A   192.168.10.7
dns         A   192.168.10.5
fileserver      A   192.168.10.4
ftpserver       A   192.168.10.8
mail            A   192.168.10.9
proxyweb        A   192.168.10.6
shorewall        A   192.168.10.10
sysadmin        A   192.168.10.1
$TTL 3600   ; 1 hour
win7            A   192.168.10.30
            TXT "31b7228ddd3a3b73be2fda9e09e601f3e9"

Se supone debemos modificar también la Zona inversa:

root@dns:~# nano /var/lib/bind/db.10.168.192.in-addr.arpa
$ORIGIN .
$TTL 10800      ; 3 hours
10.168.192.in-addr.arpa IN SOA  dns.desdelinux.fan. root.dns.desdelinux.fan. (
                                7          ; serial
                                86400      ; refresh (1 day)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                10800      ; minimum (3 hours)
                                )
                        NS      dns.desdelinux.fan.
$ORIGIN 10.168.192.in-addr.arpa.
1                       PTR     sysadmin.desdelinux.fan.
3                       PTR     ad-dc.desdelinux.fan.
$TTL 3600       ; 1 hour
30                      PTR     win7.desdelinux.fan.
$TTL 10800      ; 3 hours
4                       PTR     fileserver.desdelinux.fan.
5                       PTR     dns.desdelinux.fan.
6                       PTR     proxyweb.desdelinux.fan.
7                       PTR     blog.desdelinux.fan.
8                       PTR     ftpserver.desdelinux.fan.
9                       PTR     mail.desdelinux.fan.
10                      PTR     shorewall.desdelinux.fan.

Descongelamos y recargamos las zonas

[root@dns ~]# rndc thaw

root@dns:~# journalctl -f
-- Logs begin at dom 2017-02-05 06:27:10 EST. --
feb 05 12:00:29 dns named[1996]: received control channel command 'thaw'
feb 05 12:00:29 dns named[1996]: thawing all zones: success
feb 05 12:00:29 dns named[1996]: zone 10.168.192.in-addr.arpa/IN: journal file is out of date: removing journal file
feb 05 12:00:29 dns named[1996]: zone 10.168.192.in-addr.arpa/IN: loaded serial 7
feb 05 12:00:29 dns named[1996]: zone desdelinux.fan/IN: journal file is out of date: removing journal file
feb 05 12:00:29 dns named[1996]: zone desdelinux.fan/IN: loaded serial 9

buzz@sysadmin:~$ host shorewall
shorewall.desdelinux.fan has address 192.168.10.10

buzz@sysadmin:~$ host 192.168.10.10
10.10.168.192.in-addr.arpa domain name pointer shorewall.desdelinux.fan.

buzz@sysadmin:~$ dig desdelinux.fan axfr

buzz@sysadmin:~$ dig 10.168.192.in-addr.arpa axfr

root@dns:~# journalctl -f
....
feb 05 12:03:05 dns named[1996]: client 192.168.10.1#37835 (desdelinux.fan): transfer of 'desdelinux.fan/IN': AXFR started
feb 05 12:03:05 dns named[1996]: client 192.168.10.1#37835 (desdelinux.fan): transfer of 'desdelinux.fan/IN': AXFR ended
feb 05 12:03:20 dns named[1996]: client 192.168.10.1#46905 (10.168.192.in-addr.arpa): transfer of '10.168.192.in-addr.arpa/IN': AXFR started
feb 05 12:03:20 dns named[1996]: client 192.168.10.1#46905 (10.168.192.in-addr.arpa): transfer of '10.168.192.in-addr.arpa/IN': AXFR ended

Resumen

Hasta aquí tenemos en funcionamiento un servidor DNS Caché, que admite la Recursividad, que es Autoritario para la Zona desdelinux.fan, y que le permite al DHCP actualizar las Zonas Directa e Inversa con los nombres de equipos e IP que él otorga.

Éste artículo y los dos anteriores “DNS y DHCP en openSUSE 13.2 ‘Harlequin‘” y “DNS y DHCP en CentOS 7” constituyen prácticamente uno solo. Encontrarán conceptos generales sobre el DNS y DHCP, y particularidades de cada distribución en cada uno de ellos. Son un Punto de Entrada al tema, y una base para desarrollos mas complejos.

No dudaremos en insistir -una vez más- en la importancia que tiene el leer la documentación técnica que se instala por defecto con cada paquete, ANTES de configurar cualquier detalle. Lo decimos por propia experiencia.

Próxima entrega

Probablemente sea “Microsoft® Active Directory + BIND”

El artículo DNS y DHCP en Debian 8 “Jessie” – Redes PYMES aparece primero en DNS y DHCP en Debian 8 “Jessie” – Redes PYMES.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.