En este artículo veremos cómo instalar el servidor DNS Bind en CentOS 9 paso a paso, de modo que al final de este tutorial tendrás disponible para tu red local un servicio DNS capaz de resolver nombres de Internet y del dominio de tu red local.
Contenido
Antes de instalar el servidor DNS Bind en CentOS 9
Para completar esta breve guía de instalación del servidor DNS Bind en CentOS 9 necesitarás partir de unos mínimos requerimientos:
- Un sistema CentOS Stream 9 actualizado.
- Acceso a consola como root o un usuario con permisos de sudo.
- Conexión a Internet.
- Otros sistemas en red para probar el servicio.
En este tutorial trabajaremos sobre una red 192.168.1.0/24, con un servidor CentOS 9 en la dirección IP 192.168.1.196 que actuará como servidor DNS. Adicionalmente, configuraremos el servicio Bind para ofrecer resolución de nombres para el dominio dominio.lan.
Cómo instalar el servidor DNS Bind en CentOS 9
Para instalar el servidor DNS Bind en CentOS 9 usaremos los paquetes de la distribución, así que como primer paso actualizaremos la información de los repositorios:
~$ sudo yum update -y
El paquete que necesitamos es bind, aunque también añadiremos el paquete bind-utils para poder usar algunas herramientas interesantes:
~$ sudo yum install -y bind bind-utils
Tras la descarga e instalación de estos paquetes, un nuevo servicio está disponible en CentOS 9, el servicio named.service o named para abreviar. Para que el servicio DNS named arranque con cada inicio de CentOS 9 tendremos que habilitarlo con systemctl:
~$ sudo systemctl enable named
Todavía no vamos a iniciar el servicio DNS, ya que con la configuración por defecto no servirá de mucho.
Configurar el firewall de CentOS 9 para el servicio DNS
En CentOS 9 el firewall suele estar activado por defecto, así que es necesario añadir una regla que permita el acceso al servicio DNS desde la red local:
~$ sudo firewall-cmd --permanent --zone=public --add-service=dns
Aplicamos los cambios recargando la configuración del firewall:
~$ sudo firewall-cmd --reload
Cómo configurar el servidor DNS Bind en CentOS 9
Para configurar el servicio DNS Bind en CentOS 9 debemos saber que el archivo principal es /etc/named.conf.
~$ sudo nano /etc/named.conf
En primer lugar permitiremos que el servicio escuche peticiones de red desde todas las interfaces disponibles, ya que por defecto sólo permite conexiones desde el adaptador loopback, es decir, desde la propia máquina local. Para ello buscaremos las directivas listen-on y listen-on-v6:
... listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; ...
Y las desactivaremos:
... # listen-on port 53 { 127.0.0.1; }; # listen-on-v6 port 53 { ::1; }; ...
Aunque ya podría recibir peticiones desde red, el servicio sólo responde a peticiones locales debido a la configuración de la directiva allow-query:
... allow-query { localhost; }; ...
En un entorno de red local querremos que las consultas de los clientes sean tramitadas, así que tendremos que cambiar el valor de este bloque. Podríamos añadir direcciones IP individuales, rangos de red, etc. pero en este tipo de entornos es más fácil usar el valor any:
... allow-query { any; }; ...
Guardamos los cambios y antes de iniciar Bind con la nueva configuración comprobamos que no haya errores en la configuración con el comando named-checkconf:
~$ sudo named-checkconf
Si este comando no produce ninguna salida, la sintaxis de la configuración es correcta, y podemos arrancar el servicio Bind:
~$ sudo systemctl start named
Podrás comprobar en cualquier momento el estado del servicio con el comando systemctl status named
:
Si al consultar el estado del servicio obtienes resultados de este tipo:
...named[10098]: network unreachable resolving './DNSKEY/IN': 2001:dc3::35#53 ...named[10098]: network unreachable resolving './DNSKEY/IN': 2001:500:2::c#53 ...named[10098]: network unreachable resolving './DNSKEY/IN': 2001:7fe::53#53 ...
Es síntoma de que hay problemas con el sistema de direcciones IPv6, pudiendo ser un problema con el router, puerta de enlace, o tu propia máquina CentOS 9. Si no necesitas el soporte IPv6, puedes configurar el inicio del servicio named para que sólo trabaje con el protocolo IPv4, editando el archivo /etc/sysconfig/named:
~$ sudo nano /etc/sysconfig/named
Tendrás que añadir la directiva OPTIONS:
... OPTIONS="-4"
Tras guardar los cambios, reinicia el servicio:
~$ sudo systemctl restart named
Al volver a comprobar el estado del servicio habrán desaparecido esos mensajes.
Configuración de los clientes de la red
Para que otras máquinas de la red puedan usar nuestro servidor DNS CentOS 9 deberían tener configurada la sección de servidores de nombres de su configuración de red. En caso de configuración estática o manual simplemente cambiamos los servidores actuales por la dirección IP del servidor DNS CentOS 9. Si la configuración de red se realiza a través de DHCP (por ejemplo, mediante un router) entonces sería en dicho servicio donde hay que hacer los cambios.
En el caso de este tutorial, la propia máquina CentOS 9 que actúa como servidor DNS también será cliente de su propio servicio. Su configuración de red es a través de DHCP, por lo que recibe otros servidores DNS. Como todavía no queremos cambiar la configuración del servicio DHCP, modificaremos la configuración del servicio NetworkManager para que ignore dicha información.
Para ello creamos un archivo de configuración adicional:
~$ sudo nano /etc/NetworkManager/conf.d/10-dns.conf
Y añadimos lo siguiente:
[main] dns=none
Guardamos los cambios y recargamos la configuración del servicio:
~$ sudo systemctl reload NetworkManager
Ahora podemos hacer cambios persistentes en el archivo /etc/resolv.conf, ya que NetworkManager los respetará. Editamos dicho archivo:
~$ sudo nano /etc/resolv.conf
Desactivaremos cualquier directiva nameserver presente e incluiremos una nueva con la dirección IP del servidor CentOS 9 en el que está corriendo el servicio DNS Bind:
... #nameserver xxx.xxx.xxx.xxx nameserver 127.0.0.1
En el caso del propio servidor DNS CentOS 9 la dirección es 127.0.0.1, pero en otras máquinas CentOS 9 sería la IP del adaptador de red, en nuestro ejemplo, 192.168.1.196.
Tras guardar los cambios y cerrar el archivo, ya podemos probar la resolución de nombres en cualquier máquina de la red con el comando nslookup y el dominio de Internet que prefieras:
~$ nslookup kernel.org Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: kernel.org Address: 139.178.84.217 Name: kernel.org Address: 2604:1380:4641:c500::1
Si quieres probar el servicio DNS desde otra máquina de red sin modificar aún su configuración de red, puedes usar el comando nslookup añadiendo la dirección IP del servidor DNS:
~$ nslookup kernel.org 192.168.1.196 Server: 192.168.1.196 Address: 192.168.1.196#53 Non-authoritative answer: Name: kernel.org Address: 139.178.84.217 Name: kernel.org Address: 2604:1380:4641:c500::1
CentOS 9 como servidor de nombres del dominio de la red local
En el siguiente paso de la configuración del servidor DNS Bind haremos que también resuelva los nombres de las máquinas de nuestra red local que, en este ejemplo, estarán asociadas al dominio ficticio dominio.lan.
Empezaremos creando el archivo de zona (una especie de base de datos en formato texto), named.dominio.lan, en la ruta /var/named/, que es donde la configuración por defecto busca estos archivos:
~$ sudo nano /var/named/named.dominio.lan
Y creamos toda la estructura de un típico archivo de zona:
$TTL 1D @ IN SOA ns.dominio.lan. root.dominio.lan. ( 1 ; serial 604800 ; refresh 86400 ; retry 2419200 ; expiration 604800 ; TTL negative cache ); ; Servidores de nombres IN NS ns.dominio.lan. ; Registros ns.dominio.lan. IN A 192.168.1.196 router.dominio.lan. IN A 192.168.1.1 nas.dominio.lan. IN A 192.168.1.2 centos9.dominio.lan. IN A 192.168.1.196
En el encabezado del registro SOA figuran el nombre del servidor DNS del dominio (el que estamos configurando), y la dirección de correo del administrador, pero sustituyendo la @ por un punto. Dentro de los campos del registro SOA, el serial representa un número de serie que debería cambiar cada vez que modifiquemos el archivo, lo que indicaría a servidores secundarios que su contenido ha cambiado.
IMPORTANTE: Todos los nombres de dominio deben terminar con un punto.
A continuación indicamos los servidores de nombres del dominio (en este caso sólo el que estamos configurando) con registros NS y, finalmente, los registros tipo A para los nombres de las distintas máquinas. En este ejemplo, ns.dominio.lan es la misma máquina que centos9.dominio.lan.
Guardados los cambios comprobamos la sintaxis del archivo de zona con el comando named-checkzone, indicando el dominio y el nombre del archivo:
~$ sudo named-checkzone dominio.lan /var/named/named.dominio.lan zone dominio.lan/IN: loaded serial 1 OK
Ahora ya podemos incluir este archivo de zona en el archivo named.conf, así que lo editamos:
~$ sudo nano /etc/named.conf
Al final del archivo añadimos la definición de la zona de resolución directa (de nombre a dirección IP) para el dominio dominio.lan:
... zone "dominio.lan" IN { type master; file "named.dominio.lan"; };
Guardamos los cambios y comprobamos la configuración general con named-checkconf:
~$ sudo named-checkconf
Es el momento de recargar la configuración del servicio named:
~$ sudo systemctl reload named
Ahora podemos probar la resolución de nombres entre unas máquinas y otras, con el comando ping y los nombres de máquina que hayas definido:
~$ ping nas.dominio.lan PING nas.dominio.lan (192.168.1.2) 56(84) bytes of data. 64 bytes from 192.168.1.2 (192.168.1.2): icmp_seq=1 ttl=64 time=0.724 ms 64 bytes from 192.168.1.2 (192.168.1.2): icmp_seq=2 ttl=64 time=0.500 ms 64 bytes from 192.168.1.2 (192.168.1.2): icmp_seq=3 ttl=64 time=0.471 ms ...
Justo lo que buscábamos.
Resolución inversa de nombres en CentOS 9
Puede que adicionalmente te interese la resolución inversa, que consiste en que dada una dirección IP obtengas su nombre de red. Por ejemplo, tomando el ejemplo anterior con ping, podríamos usar el comando nslookup para ver qué nombre corresponde a la dirección IP 192.168.1.2 (en nuestro ejemplo sería nas.dominio.lan):
~$ nslookup 192.168.1.2 ** server can't find 2.1.168.192.in-addr.arpa: NXDOMAIN
Pero no funciona porque nuestro servicio DNS no ofrece resolución inversa. Vamos a solucionarlo creando una zona de resolución inversa para la red local de este ejemplo, la 192.168.1.0:
~$ sudo nano /var/named/named.1.168.192
El contenido será algo como esto:
$TTL 1D @ IN SOA dominio.lan. root.dominio.lan. ( 1 ; serial 604800 ; refresh 86400 ; retry 2419200 ; expires 604800 ; TTL negative cache ) ; Servidores de nombres IN NS ns.dominio.lan. ; Registros PTR 196 IN PTR ns.dominio.lan. 1 IN PTR router.dominio.lan. 2 IN PTR nas.dominio.lan. 196 IN PTR centos9.dominio.lan.
La estructura es muy similar a la del archivo de zona directa, pero ahora usamos registros PTR que relacionan la parte que varía de la dirección IP con su nombre de red.
Guardados los cambios comprobamos la sintaxis del nuevo archivo:
~$ sudo named-checkzone 0.168.192 /var/named/named.1.168.192 zone 1.168.192/IN: loaded serial 1 OK
Ya podemos añadir esta zona de resolución inversa editando de nuevo el archivo named.conf:
~$ sudo nano /etc/named.conf
A continuación de la definición de zona directa que incluimos anteriormente, añadiremos la siguiente:
... zone "1.168.192.in-addr.arpa" { type master; file "named.1.168.192"; }; ...
Guardamos los cambios y comprobamos la configuración:
~$ sudo named-checkconf
Recargamos la configuración del servicio named:
~$ sudo systemctl reload named
Y podremos probar de nuevo el comando nslookup:
~$ nslookup 192.168.1.2 2.1.168.192.in-addr.arpa name = nas.dominio.lan.
Ahora sí que funciona.
Conclusión
Ahora que sabes cómo instalar y configurar el servidor DNS Bind en CentOS 9 ya puedes ofrecer resolución de nombres para los sistemas de tu red, tanto nombres de Internet como dominios locales. Lo siguiente es añadir algún servidor DNS secundario que replique la configuración del primario y entre a funcionar en caso de caída.
Si tienes alguna duda, pregunta, sugerencia, etc. puedes dejar un comentario.
¡Apoya comoinstalar.me!
¿Te ha servido esta pequeña guía de instalación y configuración del servicio DNS Bind en CentOS 9? Si es así y estás tan agradecido que te gustaría añadir tu granito de arena al mantenimiento de este sitio y elaboración de más tutoriales de CentOS 9 y DNS, cualquier mínima contribución es bien recibida, y puedes hacerlo dejando 1 $ de propina desde PayPal:
O, si te sientes especialmente agradecido, invitándonos a un café:
¡Gracias!