Cómo instalar el servidor DNS Bind en CentOS 9

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.

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:

como instalar y configurar el servidor dns bind en centos stream 9

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!

Valora esta entrada

¿Qué te ha parecido esta entrada?

Deja un comentario