Cómo instalar el servidor DNS Bind en CentOS 7

En este artículo veremos cómo instalar el servidor DNS Bind en CentOS 7 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 7

Para completar esta breve guía de instalación del servidor DNS Bind en CentOS 7 necesitarás partir de unos mínimos requerimientos:

  • Un sistema CentOS 7 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.0.0/24, con un servidor CentOS 7 en la dirección IP 192.168.0.102 que será el que actúe como servidor DNS. Adicionalmente, configuraremos el servicio Bind para ofrecer resolución de nombres para el dominio dominio.local.

Cómo instalar el servidor DNS Bind en CentOS 7

Para instalar el servidor DNS Bind en CentOS 7 usaremos los paquetes de la distribución, así que como primer paso actualizaremos las listas y los paquetes instalados:

~$ 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. Todos estos paquetes los instalaremos con yum:

~$ sudo yum install -y bind bind-utils

Tras la descarga e instalación de los paquetes, un nuevo servicio está disponible en CentOS 7, el servicio named.service o named para abreviar. Para que el servicio DNS named arranque con cada inicio de CentOS 7 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 7 para el servicio DNS

En CentOS 7 el firewall suele estar activado por defecto, así que es necesario añadir una regla que permita el acceso al servicio DNS:

~$ sudo firewall-cmd --permanent --zone=public --add-service=dns

Se aplicarán los cambios al recargar la configuración del firewall:

~$ sudo firewall-cmd --reload

Cómo configurar el servidor DNS Bind en CentOS 7

Para configurar el servicio DNS Bind en CentOS 7 debemos tener en cuenta 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. Para ello desactivaremos las directivas listen-on y listen-on-v6:

...
#       listen-on port 53 { 127.0.0.1; };
#       listen-on-v6 port 53 { ::1; };
...

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 7

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, puediendo ser un problema con el router, puerta de enlace, o tu propia máquina CentOS 7. 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:

instalar y configurar el servidor dns bind en centos 7

Configuración de los clientes de la red

En este caso el propio servidor CentOS 7 que actúa como servidor DNS también será cliente de su propio servicio. Por tanto se le aplica lo mismo que al resto de máquinas de la red que usen el servicio DNS.

Edita el archivo /etc/resolv.conf en cada máquina que vaya a usar el servicio:

~$ sudo nano /etc/resolv.conf

Desactivaremos cualquier directiva nameserver presente e incluiremos una nueva con la dirección IP del servidor CentOS 7 en el que está corriendo el servicio DNS Bind:

...
#nameserver xxx.xxx.xxx.xxx
nameserver 192.168.0.102

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 ping y el dominio de Internet que prefieras:

~$ ping kernel.org
PING kernel.org (198.145.29.83) 56(84) bytes of data.
64 bytes from kernel.org (198.145.29.83): icmp_seq=1 ttl=47 time=164 ms
64 bytes from kernel.org (198.145.29.83): icmp_seq=2 ttl=47 time=183 ms
64 bytes from kernel.org (198.145.29.83): icmp_seq=3 ttl=47 time=165 ms
...

Ya podemos pasar al siguiente paso de la configuración.

Si finalmente terminas de configurar el servicio DNS de acuerdo a tus necesidades, sería interesante incluirlo en la configuración del servidor DHCP que use tu red.

CentOS 7 como servidor de nombres de la red local

En el siguiente paso de la configuración del servidor DNS haremos que también resuelva los nombres de las máquinas de la red local.

Para ello añadiremos al final del archivo named.conf la zona de resolución directa (de nombre a dirección IP) para el dominio de nuestra red local, en este ejemplo dominio.local:

~$ sudo nano /etc/named.conf

Al final del archivo añadimos la definición de la zona:

zone "dominio.local" IN {
        type master;
        file "named.dominio.local";
};

Guardamos los cambios y creamos el archivo que acabamos de indicar, named.dominio.local, en la ruta /var/named/, que es donde la configuración por defecto busca estos archivos:

~$ sudo nano /var/named/named.dominio.local

Y creamos toda la estructura de un típico archivo de zona:

$TTL    1D
@       IN      SOA     ns.dominio.local. root.dominio.local. (
                            1       ; serial
                            604800  ; refresh
                            86400   ; retry
                            2419200 ; expiration
                            604800  ; TTL negative cache
    );

; Servidores de nombres

                        IN      NS      ns.dominio.local.

; Registros

ns.dominio.local.       IN      A       192.168.0.102
centos6.dominio.local.  IN      A       192.168.0.117
centos7.dominio.local.  IN      A       192.168.0.102
centos8.dominio.local.  IN      A       192.168.0.113

En el encabezado del registro SOA figuran el servidor DNS del dominio, el que estamos configurando, y la dirección de correo del administrador, pero sin la @. 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 terminan con un punto.

A continuación indicamos los servidores de nombres del dominio (en este caso sólo el que estamos configurando) y finalmente los registros de nombres, tipo A, de las distintas máquinas. En este ejemplo, ns.dominio.local es la misma máquina que centos7.dominio.local.

Guardados los cambios, además de comprobar la configuración general con named-checkconf, podemos comprobar también la del archivo de zona con el comando named-checkzone, indicando el dominio y el archivo de zona:

~$ sudo named-checkzone dominio.local /var/named/named.dominio.local
zone dominio.local/IN: loaded serial 0
OK

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 centos7.dominio.local
PING centos7.dominio.local (192.168.0.102) 56(84) bytes of data.
64 bytes from 192.168.0.102 (192.168.0.102): icmp_seq=1 ttl=64 time=0.334 ms
64 bytes from 192.168.0.102 (192.168.0.102): icmp_seq=2 ttl=64 time=0.550 ms
64 bytes from 192.168.0.102 (192.168.0.102): icmp_seq=3 ttl=64 time=0.433 ms
...

Justo lo que buscábamos.

Resolución inversa de nombres en CentOS 7

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 (centos7.dominio.local) corresponde a la dirección IP 192.168.0.102:

~$ nslookup 192.168.0.102
** server can't find 102.0.168.192.in-addr.arpa: NXDOMAIN

Pero no funciona porque nuestro servicio DNS no ofrece resolución inversa. Pero vamos a solucionarlo añadiendo una zona de resolución inversa, para lo que editaremos 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 "168.192.in-addr.arpa" {
        type master;
        file "named.0.168.192";
};
...

Guardamos los cambios y editamos el nuevo fichero de zona inversa:

~$ sudo nano /var/named/named.0.168.192

El contenido será algo como esto:

$TTL 1D
@       IN      SOA     dominio.local. root.dominio.local. (
                        1       ; serial
                        604800  ; refresh
                        86400   ; retry
                        2419200 ; expires
                        604800  ; TTL negative cache
)

; Servidores de nombres

        IN      NS      ns.dominio.local.

; Registros PTR

102     IN      PTR     ns.dominio.local.
117     IN      PTR     centos6.dominio.local.
102     IN      PTR     centos7.dominio.local.
113     IN      PTR     centos8.dominio.local.

La estructura es muy similar a la del archivo de zona directa, pero ahora usamos registros PTR y la parte numérica que varía de la dirección IP se relaciona con su nombre de red.

Guardados los cambios conviene pasar las utilidades named-checkconf y named-checkzone:

~$ sudo named-checkzone 0.168.192 /var/named/named.0.168.192
zone 0.168.192/IN: loaded serial 0
OK

Ya podemos recargar el servicio named:

~$ sudo systemctl reload named

Y podremos probar de nuevo el comando nslookup:

~$ nslookup 192.168.0.102
102.0.168.192.in-addr.arpa    name = ns.dominio.local.
102.0.168.192.in-addr.arpa    name = centos7.dominio.local.

Ahora sí que funciona.

Conclusión

Ahora que sabes cómo instalar y configurar el servidor DNS Bind en CentOS 7 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 este sitio!

¿Te ha servido esta pequeña guía de instalación y configuración del servicio DNS Bind en Debian 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 7 y DNS, cualquier mínima contribución es bien recibida. ¡Gracias!

Valora esta entrada

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 5,00 de 5)
Cargando…

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.

ACEPTAR
Aviso de cookies