Cómo instalar el servidor DNS Bind en Debian 10 Buster

En este artículo vamos a ver cómo instalar el servidor DNS Bind en Debian 10 Buster paso a paso, de forma que dispondrás de tu propio servicio de resolución de nombres para tu red local, tanto para nombres de Internet como para los nombres y dominios de las máquinas y dispositivos de la red.

Antes de instalar el servicio DNS Bind en Debian 10 Buster

Si quieres seguir los pasos de esta guía de instalación y configuración del servidor DNS Bind en Debian 10 Buster sólo necesitas cumplir los siguientes requerimientos mínimos:

  • Un sistema Debian 10 Buster actualizado.
  • Acceso a línea de comandos con un usuario con permisos de sudo.
  • Conexión a Internet.
  • Opcionalmente otros dispositivos de red con los que probar el servicio Bind.

En este tutorial configuraremos el servicio DNS Bind en una máquina Debian 10 Buster con dirección IP 192.168.0.101 integrada en una red privada 192.168.0.100/24 donde trabajan distintos dispositivos y sistemas interconectados.

Cómo instalar el servidor DNS Bind en Debian 10 Buster

Para instalar el servidor DNS Bind en Debian 10 Buster utilizaremos los repositorios del sistema, así que como primer paso los actualizaremos:

~$ sudo apt update

E instalamos el paquete bind9 con apt:

~$ sudo apt install -y bind9

Una vez descargados e instalados el paquete principal y sus dependencias tenemos un nuevo servicio en Debian 10 Buster llamado bind9.service o simplemente bind9. Este servicio queda iniciado automáticamente y habilitado para volver a iniciar en cada arranque del sistema.

Podemos comprobar el estado del servicio en cualquier momento con el comando systemctl status bind9:

como instalar el servidor dns bind en debian 10 buster

Versión instalada

Si quieres saber qué versión del servicio está corriendo en tu máquina puedes averiguarlo con el parámetro -v del comando named:

~$ sudo named -v
BIND 9.11.5-P4-5.1+deb10u5-Debian (Extended Support Version) <id:998753c>

Configuración del firewall para Bind en Debian 10 Buster

Si tienes activado el firewall UFW en Debian 10 Buster y quieres que el servidor DNS Bind pueda ser utilizado por otras máquinas de la red habrá que añadir la regla correspondiente:

~$ sudo ufw allow bind9

Cómo configurar el servicio DNS Bind en Debian 10 Buster

Vamos a continuación a configurar distintos aspectos del servicio DNS Bind, ya que la configuración por defecto en Debian 10 no sirve de mucho.

Configuración de los clientes de red

Para que los clientes de red (otros sistemas y dispositivos) puedan trabajar con el nuevo servicio DNS deberán estar configurados adecuadamente:

  • En caso de configuración automática, el servicio DHCP del router o servidor de red debe enviar la dirección IP de la máquina Debian 10 como servidor DNS.
  • Algunos dispositivos pueden utilizar configuración automática con servidores DNS personalizados, de forma que podríamos especificar la dirección del servidor Debian 10.
  • En los sistemas configurados manualmente bastará cumplimentar correctamente la información de los servidores DNS.

Resolución de nombres de Internet

Si queremos que el servidor DNS de la máquina Debian 10 pueda resolver nombres de Internet para los clientes de red, editaremos el archivo named.conf.options:

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

En una red local privada no es posible aplicar la capa de seguridad DNSSEC, así que buscamos la directiva dnssec-validation:

...
        dnssec-validation auto;
...

Y cambiamos su valor por «no«:

...
        dnssec-validation no;
...

Con estos cambios ya sería suficiente para poder resolver nombres de Internet utilizando los servidores DNS raíz de Internet. Esto a veces puede originar consultas algo más lentas, e incluso algunas consultas puede que no se resuelvan, así que tenemos la posibilidad de redirigir las consultas a otros servidores caché mediante un bloque forwarders:

Por ejemplo, usando servidores públicos como los de Google:

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

Podríamos usar también los servidores DNS que nos ofrece nuestro proveedor de acceso a Internet o incluso usar otro servidor de nuestra red (por ejemplo, el del router):

...
        forwarders {
                192.168.0.1;
        };
...

Guardamos el archivo y recargamos el servicio:

~$ sudo systemctl reload bind9

Ahora, desde otra máquina configurada correctamente, podemos intentar hacer ping a cualquier servidor de Internet utilizando su nombre DNS:

~$ ping debian.org
PING debian.org (130.89.148.77) 56(84) bytes of data.
64 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=44 time=73.6 ms
64 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=2 ttl=44 time=65.9 ms
64 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=3 ttl=44 time=69.9 ms

Añadir una zona o dominio para la red local

Vamos a configurar el dominio mi.red para la red local del ejemplo, para lo que crearemos un archivo en cuyo nombre incluiremos dicho dominio (para facilitar la configuración si deseamos añadir más zonas en el futuro):

~$ sudo nano /etc/bind/db.mi.red

El contenido inicial será similar al siguiente:

$TTL 1D

@       IN      SOA ns.mi.red. chacho.mail.com. (
        0       ; número de serie
        604800  ; refresco
        86400   ; reintento
        2419200 ; expiración
        604800  ; Caché negativa TTL
);

        IN      NS      ns.mi.red.

ns.mi.red.      IN      A 192.168.0.101

En el registro SOA o «Start of Authority«, indicamos el servidor DNS que gestiona el dominio y la dirección de correo del administrador (cambiando la @ por un punto).

En el registro NS indicamos de nuevo el servidor (o servidores) DNS para este dominio.

A continuación incluimos el registro A que resuelve el propio nombre del servidor de nombres.

Una vez guardado y cerrado este nuevo archivo, comprobamos que es correcto mediante el comando named-checkzone, al que le pasamos como parámetros el dominio y el archivo de configuración del mismo:

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

El resultado debería ser correcto, mostrándose también el número de serie actual.

Es el momento de incluir esta definición de zona en la configuración de Bind, para lo que editamos el archivo named.conf.default-zones:

~$ sudo nano /etc/bind/named.conf.default-zones

Al final de este archivo añadimos un nuevo bloque zone para configurar la zona indicando el dominio y el archivo de registros del paso anterior:

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

Guardamos este archivo y utilizamos el comando named-checkconf para comprobar que la configuración es correcta:

~$ sudo named-checkconf

Y finalmente recargamos el servicio:

~$ sudo systemctl reload bind9

Para probar la zona, desde un cliente de red podemos tratar de resolver el único registro existente en este momento:

~$ ping ns.mi.red
PING ns.mi.red (192.168.0.101) 56(84) bytes of data.
64 bytes from 192.168.0.101 (192.168.0.101): icmp_seq=1 ttl=64 time=0.943 ms
64 bytes from 192.168.0.101 (192.168.0.101): icmp_seq=2 ttl=64 time=0.640 ms
64 bytes from 192.168.0.101 (192.168.0.101): icmp_seq=3 ttl=64 time=0.898 ms

Añadir más registros al archivo de zona

Podemos editar el archivo de zona para añadir o modificar registros:

...
        1       ; número de serie
...
router.mi.red.  IN      A 192.168.0.1
www.mi.red.     IN      A 192.168.0.112
nas.mi.red.     IN      A 192.168.0.102

Observa que además de añadir registros hemos incrementado manualmente el número de serie.

Conviene comprobar la sintaxis del archivo antes de recargar el servicio:

~$ sudo named-checkzone mi.red /etc/bind/db.mi.red
zone mi.red/IN: loaded serial 1
OK

Y si todo es correcto, recargamos la configuración de Bind.

Ahora desde las máquinas clientes podemos intentar resolver los nuevos nombres:

~$ ping www.mi.red
PING www.mi.red (192.168.0.112) 56(84) bytes of data.
64 bytes from 192.168.0.112 (192.168.0.112): icmp_seq=1 ttl=128 time=0.369 ms
64 bytes from 192.168.0.112 (192.168.0.112): icmp_seq=2 ttl=128 time=0.521 ms
64 bytes from 192.168.0.112 (192.168.0.112): icmp_seq=3 ttl=128 time=0.400 ms

Es posible que la máquina que responda a algún nombre no esté operativa, pero observa que el nombre se resuelve correctamente:

~$ ping nas.mi.red
PING nas.mi.red (192.168.0.102) 56(84) bytes of data.
From 192.168.0.116 (192.168.0.116) icmp_seq=1 Destination Host Unreachable
From 192.168.0.116 (192.168.0.116) icmp_seq=2 Destination Host Unreachable
From 192.168.0.116 (192.168.0.116) icmp_seq=3 Destination Host Unreachable

Resolución inversa de nombres de red

Hemos visto cómo resolver nombres de red y obtener sus direcciones IP, ahora vamos a hacer que el servidor DNS Bind de nuestra máquina Debian 10 pueda hacer la resolución inversa, es decir, a partir de una dirección IP obtener el nombre de red del sistema correspondiente.

Crearemos un archivo de zonas que contendrá la dirección de red en su nombre:

~$ sudo nano /etc/bind/db.0.168.192

El contenido es bastante parecido al del archivo de resolución directa que creamos antes:

$TTL 1D

@       IN      SOA     mi.red. 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
101     IN      PTR     ns.mi.red.
1       IN      PTR     router.mi.red.
102     IN      PTR     nas.mi.red.
112     IN      PTR     www.mi.red.

Observa que en el registro SOA indicamos el dominio, y el tipo de registros que usamos para cada nombre es del tipo PTR.

Guardamos este archivo y editamos el archivo de configuración de zonas:

~$ sudo nano /etc/bind/named.conf.default-zones

Al final del mismo añadimos el bloque zone (observa que se añade el sufijo .in-addr.arpa al nombre de la zona):

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

Guardamos el archivo y recargamos la configuración del servicio.

Ahora desde cualquier máquina cliente con alguna herramienta como nslookup podemos realizar consultas de resolución inversa (en Debian 10 este comando pertenece al paquete dnsutils):

~$ nslookup 192.168.0.101
101.0.168.192.in-addr.arpa    name = ns.mi.red.

¡Fácil y sencillo!

Conclusión

Ahora que sabes cómo instalar y configurar el servidor DNS Bind en Debian 10 Buster vas a poder resolver nombres de Internet para los dispositivos de tu red local pero, sobre todo, podrás configurar y utilizar fácilmente dominios y subdominios para tus máquinas de red.

Si tienes alguna duda, pregunta, sugerencia, etc. puedes dejar un comentario. Los comentarios están moderados (para evitar SPAM y ataques maliciosos), pero se revisan prácticamente a diario.

Y si ya funciona tu servidor DNS gracias a esta pequeña guía de instalación y configuración y quieres agradecérnoslo, puedes hacerlo dejando una propina a partir de 1 $ desde PayPal:

O, si te sientes especialmente agradecido, puedes invitarnos a un café:

¡Gracias!

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

ACEPTAR
Aviso de cookies