DNS y DHCP en CentOS 7 – Redes PYMES
¡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:
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ó?.
El artículo DNS y DHCP en CentOS 7 – Redes PYMES aparece primero en DNS y DHCP en CentOS 7 – Redes PYMES.