Cómo instalar el servidor DNS Bind en Debian 9 Stretch

Cómo instalar el servidor DNS Bind en Debian 9 Stretch

En esta entrada veremos cómo instalar el servidor DNS Bind en Debian 9 Stretch paso a paso, de modo que proporcione resolución de nombres a tu red local o incluso aloje y resuelva los nombres de las máquinas de tu red.

Antes de instalar el servidor DNS en Debian 9 Stretch

Para seguir esta guía de instalación y configuración del servicio DNS Bind en Debian 9 debes satisfacer algunos requisitos básicos:

  • Una máquina Debian 9 actualizada.
  • Un usuario con privilegios de sudo o el mismo root.
  • Conexión a Internet.
  • Otras máquinas en la red local para probar el servicio.

Un servidor DNS según su configuración puede tener varios modos de funcionamiento. En este tutorial haremos que nuestra máquina Debian 9 resuelva nombres de Internet para sí misma y el resto de máquinas de la red local, pero también se comporte como servidor DNS primario del dominio de nuestra propia red local.

En este ejemplo configuraremos una red local con direcciones IP 192.168.0.0/255, con el dominio red.local y el servidor DNS será la máquina 192.168.0.100 con Debian 9.

Cómo instalar el servidor DNS en Debian 9 Stretch

Vamos a instalar el servidor DNS Bind en Debian 9 Stretch usando los paquetes presentes en la propia distribución, por lo que actualizaremos la información de los repositorios:

~$ sudo apt update

El paquete que necesitamos es bind9 así que lo descargaremos con apt, junto con el paquete dnsutils para tener la herramienta nslookup:

~$ sudo apt install -y bind9 dnsutils

Cuando terminen de descargar e instalarse los paquetes y sus dependencias tendremos un nuevo servicio disponible en nuestro sistema Debian 9, el servicio bind9.service o bind9 si prefieres el nombre corto.

El servicio bind9 queda habilitado para iniciar automáticamente junto a Debian 9, pero no arranca tras la instalación, ya que es necesario configurarlo previamente.

Configurar el firewall para el servidor DNS en Debian 9

Si tienes activado el firewall UFW en el servidor Debian 9 en el que estás instalando el servicio DNS, debes añadir una regla que permita la conexión de las máquinas cliente. Es tan sencillo como lanzar este comando:

~$ sudo ufw allow dns

Cómo configurar el servidor DNS Bind en Debian 9

Para configurar el servicio DNS Bind en Debian 9 debemos trabajar sobre los archivos del directorio /etc/bind/. El archivo principal named.conf sólo carga la configuración de otros archivos de configuración adicionales, que son:

  • named.conf.options
  • named.conf.local
  • named.conf.default-zones

Cualquier cambio que hagamos en estos y otros archivos de configuración de Bind no se aplicará hasta recargar la configuración del servicio.

Configuración en los clientes

Entre los clientes también incluimos a la máquina Debian 9 que hará de servidor DNS, ya que además de ofrecer el servicio debe poder utilizarlo.

Para configurar las máquinas de tu red que usen Debian 9 u otros sistemas Linux, edita sus archivos resolv.conf:

~$ sudo nano /etc/resolv.conf

Asegúrate de desactivar cualquier directiva nameserver presente, insertando un carácter # a principio de línea, y añade otra directiva nameserver con la dirección IP del servidor Debian 9 en el que has instalado Bind:

...
#nameserver 192.168.0.1
nameserver 192.168.0.100

Usa el comando ping para intentar resolver el dominio de Internet que prefieras:

~$ ping google.com
ping: google.com: Fallo temporal en la resolución del nombre

No funciona, esto es buena señal porque el sistema intenta resolver nombres usando el servidor Debian 9 que aún no está listo.

Primer paso: Resolución de nombres de Internet

En un primer paso el servidor DNS resolverá nombres de Internet para sí mismo y para el resto de máquinas de la red local, así que tendremos que configurar este modo de funcionamiento.

Configuración del servicio Bind

Editaremos el archivo named.conf.options:

~$ sudo nano /etc/bind/named.conf.options

El contenido de este archivo es un bloque options dentro del cual debemos añadir la directiva recursion, a continuación, por ejemplo, de la directiva directory:

options {
        directory "/var/cache/bind";
        recursion yes;
...

Básicamente esta directiva indica a Bind que si no tiene información propia sobre el nombre que tiene que resolver, pase la consulta a otros servidores.

Esos otros servidores DNS se definen en un bloque anidado llamado forwarders:

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

Está desactivado, así que lo activaremos e incluiremos los servidores DNS a los que solicitaremos la resolución de nombres:

...
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
...

En este caso hemos incluido los servidores DNS de Google, pero podrías incluir los servidores públicos que creas oportuno, incluyendo los de tu proveedor de servicios de Internet.

Una vez guardados los cambios podemos verificar que la configuración es correcta con el comando named-checkconf:

~$ sudo named-checkconf

Si no produce ningún tipo de salida es que todo está correcto.

Con una configuración sin errores, podemos iniciar por primera vez el servicio bind9:

~$ sudo systemctl start bind9

Ya podemos resolver nombres tanto en el servidor Debian 9 como desde cualquier máquina que lo use como servidor DNS. Prueba a resolver nombres tanto desde el servidor como desde el cliente:

~$ ping google.com
PING google.com (172.217.16.238) 56(84) bytes of data.
64 bytes from mad08s04-in-f14.1e100.net (172.217.16.238): icmp_seq=1 ttl=52 time=14.4 ms
64 bytes from mad08s04-in-f14.1e100.net (172.217.16.238): icmp_seq=2 ttl=52 time=13.8 ms
64 bytes from mad08s04-in-f14.1e100.net (172.217.16.238): icmp_seq=3 ttl=52 time=29.8 ms
...

Segundo paso: Servidor DNS primario

Llega el momento de aprovechar el servidor DNS que ya tenemos funcionando para que resuelva los nombres de nuestra propia red local, que en este ejemplo tiene el dominio red.local.

Editamos el archivo named.conf.local para añadir al final dos zonas más:

~$ sudo nano /etc/bind/named.conf.local

Insertaremos la información de las zonas donde nos indican los comentarios, tras el bloque de comentarios «Do any local configuration here«:

//
// Do any local configuration here
//
...

Insertaremos una zona para la resolución de nombres directa, de nombre a dirección IP:

...
zone "red.local" {
        type master;
        file "/etc/bind/zones/db.red.local";
};
...

En file hemos indicado el archivo que contendrá los registros de la base de datos de nombres DNS para nuestro dominio, red.local.

Ahora, opcionalmente, insertaremos una zona para resolución inversa, de direcciones IP a nombres:

...
zone "168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/zones/db.168.192";
};
...

Guardamos los cambios y cerramos el archivo named.conf.local.

Ahora tenemos que crear los archivos de zona que acabamos de indicar en la configuración. El directorio que hemos indicado para guardar los distitntos archivos de zona en este ejemplo no existe, así que lo crearemos:

~$ sudo mkdir /etc/bind/zones

Resolución directa de nombres

Vamos a crear el archivo para la resolución directa de nombres, con el nombre que indicamos en named.conf.local:

~$ sudo nano /etc/bind/zones/db.red.local

Con un contenido similar a este:

$TTL    1D
@       IN      SOA     ns.red.local.   root.red.local. (
                        0       ; número de serie
                        604800  ; refresco
                        86400   ; reintento
                        2419200 ; expiración
                        604800  ; Caché negativa TTL
);

                        IN      NS      ns.red.local.
ns.red.local.           IN      A       192.168.0.100
debian9.red.local.      IN      A       192.168.0.100
debian92.red.local.     IN      A       192.168.0.109

En el encabezado del registro SOA (Start Of Authority) indicamos el servidor DNS que se encarga de mantener estos registros, que es el mismo que estamos configurando (ns.red.local.) y la cuenta de correo electrónico del administrador (root.red.local.) sin la característica @. Observa que todos los nombres de dominio finalizan con un punto.

Otro campo importante del registro SOA es el que hemos identificado con el comantario «número de serie», que es un contador que debemos incrementar manualmente cada vez que hagamos modificaciones en los registros.

Tras el bloque sólo queda ir añadiendo los registros. El primero es un registro tipo NS para identificar el nombre del servidor DNS.

A continuación se añaden todos los demás registros que necesites, en este ejemplo son del tipo A que identifican máquinas de la red.

Guarda los cambios y comprueba que está todo correcto con el comando named-checkzone, que usa como parámetros un dominio y el archivo de zona que lo gestiona:

~$ sudo named-checkzone red.local /etc/bind/zones/db.red.local
zone red.local/IN: loaded serial 0
OK

Debe informar del valor del número de serie (contador) actual y que no hay errores (OK).

Es el momento de recargar la configuración del servicio bind9:

~$ sudo systemctl reload bind9

Ahora, tanto en el servidor como en cualquier cliente puedes intentar resolver nombres que hayas dado de alta en el archivo de zona y deberías obtener respuesta:

~$ ping debian92.red.local
PING debian92.red.local (192.168.0.109) 56(84) bytes of data.
64 bytes from 192.168.0.109: icmp_seq=1 ttl=64 time=0.475 ms
64 bytes from 192.168.0.109: icmp_seq=2 ttl=64 time=0.614 ms
64 bytes from 192.168.0.109: icmp_seq=3 ttl=64 time=0.492 ms
...

Resolución inversa de nombres

Si has decidido incorporar también la resolución inversa, que no es necesaria para el funcionamiento habitual de tu red, es el momento de configurarla.

La resolución inversa funciona solicitando al servidor DNS cuál es el nombre de red de una máquina a partir de una dirección IP. En el ejemplo anterior hicimos ping a una de las máquinas de la red por su nombre y, gracias al servidor DNS, se obtuvo su dirección IP.

Podríamos intentar lo contrario con la herramienta nslookup y la dirección IP obtenida:

~$ nslookup 192.168.0.109
Server:         192.168.0.100
Address:        192.168.0.100#53

** server can't find 109.0.168.192.in-addr.arpa: SERVFAIL

La herramienta contacta con el servidor DNS en el puerto estándar, pero no consigue la resolución. En unos instantes esto cambiará.

En nuestro servidor DNS Debian 9 crearemos el archivo de zona que hayas especificado en named.conf.local:

~$ sudo nano /etc/bind/zones/db.168.192

El contenido es muy similar al del archivo de resolución directa:

$TTL 1D
@       IN      SOA     red.local.      root.red.local. (
                        0       ; número de serie
                        604800  ; refresco
                        86400   ; reintentar
                        2419200 ; expiración
                        604800  ; TTL Caché negativa
                        )
; Servidores de nombres
                IN      NS      ns.red.local.

; Registros PTR
100.0         IN      PTR     ns.red.local.
100.0         IN      PTR     debian9.red.local.
109.0         IN      PTR     debian92.red.local.

Guardados los cambios, comprueba que no haya errores con el comando named-checkzone (que también sirve para los archivos de resolución inversa):

~$ sudo named-checkzone 168.192 /etc/bind/zones/db.168.192
zone 168.192/IN: loaded serial 0
OK

Todo correcto, es el momento de recargar de nuevo la configuración del servicio Bind:

~$ sudo systemctl reload bind9

Y ahora podemos volver a utilizar el comando nslookup en cualquier máquina de la red que utilice el servidor DNS:

~$ nslookup 192.168.0.109
Server:         192.168.0.100
Address:        192.168.0.100#53

109.0.168.192.in-addr.arpa    name = debian92.red.local.

¡Justo lo que queríamos!

Conclusión

Ahora ya sabes cómo instalar y configurar un servidor DNS Bind en Debian 9 Stretch, con lo que además de resolver nombres de Internet usando los servidores DNS que quieras (ya que a veces los de los provedores de Internet pueden caer), podrás usar dominios y subdominios en las máquinas de tu red y resolverlos fácilmente.

En caso de dudas, preguntas, sugerencias, etc. puedes dejar un comentario.

Y si te ha resultado de utilidad nuestra guía de instalación de Debian 10, ¡siempre que quieras puedes invitarme a un café!

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

Deja un comentario

Cerrar menú

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, pinche el enlace para mayor información

ACEPTAR
Aviso de cookies