Cómo instalar el servidor DNS Bind en Debian 11 Bullseye

En esta ocasión vamos a explicar cómo instalar el servidor DNS Bind en Debian 11 Bullseye paso a paso, de tal manera que puedas ofrecer el servicio de resolución de nombres a los dispositivos de tu red, ya sea nombres de Internet o nombres DNS propios de las máquinas que componen la red local.

Antes de instalar el servidor DNS Bind en Debian 11 Bullseye

Para poder seguir esta guía de instalación del servicio DNS Bind en Debian 11 Bullseye es necesario partir del siguiente escenario:

  • Una máquina Debian 11 Bullseye actualizada (configurada con dirección IP estática si va a dar servicio a una red local).
  • Un usuario con privilegios de sudo.
  • Acceso a Internet.
  • Opcionalmente, otros dispositivos en red para probar el servicio DNS.

En este tutorial trabajamos sobre una máquina Debian 11 con dirección IP estática 192.168.0.120 sobre la que instalaremos y configuraremos el servidor DNS Bind 9.

En caso de que ya tengas preparado todo el entorno necesario es hora de regular la altura más cómoda en tu mesa, abrir una terminal de comandos y comenzar a trabajar.

Cómo instalar el servicio DNS Bind en Debian 11 Bullseye

Vamos a instalar el servidor DNS Bind 9 en Debian 11 Bullseye usando los paquetes disponibles en los repositorios del sistema, por lo que el primer paso es actualizar la información de los mismos:

~$ sudo apt update

El paquete que necesitamos es bind9, que instalamos con el comando apt:

~$ sudo apt install -y bind9

Tras la descarga e instalación de Bind y sus dependencias, dispondremos de un nuevo servicio en Debian 11, el servicio DNS cuyo nombre es bind9 o bind9.service, que queda corriendo en segundo plano y habilitado para su inicio automático con el sistema.

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

como instalar el servidor dns bind en debian 11 bullseye

Versión de Bind

Si quieres saber con qué versión exacta del servicio DNS Bind 9 estás trabajando, puedes hacerlo con el comando sudo named -v:

~$ sudo named -v
BIND 9.16.22-Debian (Extended Support Version) <id:59bfaba>

Configurar el firewall de Debian 11 para el servicio DNS Bind

En caso de tener activado el firewall UFW en Debian 11 es necesario añadir una regla que permita aceptar consultas desde el resto de sistemas de la red local:

~$ sudo ufw allow bind9

Cómo probar el servidor DNS

Para probar el nuevo servidor DNS Bind podemos usar la herramienta dig que viene incluida en el paquete bind9-utils. Este paquete es una dependencia de Bind, por lo que ya está instalado en el servidor Debian 11, pero en otras máquinas Debian 11 de la red habría que instalarlo.

Probamos a resolver un nombre de Internet desde el propio servidor Debian 11:

~$ dig @localhost kernel.org

; <<>> DiG 9.16.22-Debian <<>> @localhost kernel.org
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10202
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 4d2642df75fd3c8401000000617d1ecabf89c89a1e802f16 (good)
;; QUESTION SECTION:
;kernel.org.                    IN      A

;; ANSWER SECTION:
kernel.org.             348     IN      A       198.145.29.83

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sat Oct 30 12:30:34 CEST 2021
;; MSG SIZE  rcvd: 83

Desde una máquina en red especificaríamos la dirección IP del servidor Debian 11 en el parámetro que empieza por @:

~$ dig @192.168.0.120 kernel.org
...
;; ANSWER SECTION:
kernel.org.             260     IN      A       198.145.29.83
...

Podemos comprobar que el servicio DNS Bind por defecto puede resolver nombres de Internet.

Cómo configurar el servidor DNS Bind en Debian 11 Bullseye

Para configurar el servicio DNS Bind en Debian 11 hay que trabajar sobre sus archivos de configuración organizados en la ruta /etc/bind/.

Cualquier cambio que realicemos en estos archivos puede ser validado con el comando named-checkconf:

~$ sudo named-checkconf

Y si todo está bien, recargaremos la configuración del servicio para aplicar dicho cambio:

~$ sudo systemctl reload bind9

Cómo configurar una zona para un dominio local

En la red local que hemos usado para realizar este tutorial queremos trabajar con el nombre de red o dominio red.local (un nombre muy pensado…). Para ello empezaremos creando un archivo de zona, en el que usaremos el propio nombre de dominio:

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

Inicialmente este archivo tendrá una estructura similar a la siguiente:

$TTL 1D

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

; Registros NS

        IN      NS      ns.red.local.

; Regitros A

ns.red.local.   IN      A       192.168.0.120

En el registro SOA o «Start of authority» definimos el nombre del servidor DNS (ns en este caso), la dirección de correo-e del administrador (sustituyendo la @ por un punto) y un conjunto de valores numéricos donde el número de serie debe ser incrementado manualmente cada vez que hagamos algún cambio en este archivo.

En el registro NS indicamos de nuevo el nombre DNS del servidor de nombres.

Y en los registros A añadimos nombres de máquina y sus direcciones IP, incialmente sólo el propio servidor de nombres en este caso.

Observa que todos los nombres de red terminan con un punto, es muy importante que sea así.

Guardamos los cambios y validamos este nuevo archivo con el comando named-checkzone, pasando como parámetros el dominio para el que hemos configurado la zona y su archivo de configuración:

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

Además de indicar que la sintaxis es correcta, muestra el número de serie actual.

Podemos editar de nuevo el archivo y añadir al final del mismo algunos nombres más de nuestra red, sin olvidar incrementar el número de serie:

...
        1       ; número de serie
...
router.red.local.       IN      A       192.168.0.1
nas.red.local.          IN      A       192.168.0.2
ftp.red.local.          IN      A       192.168.0.3
www.red.local.          IN      A       192.168.0.112

Guardamos el archivo y lo validamos de nuevo:

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

Podemos observar que se muestra el nuevo número de serie.

Para que este archivo sea tenido en cuenta por la configuración de Bind, hay que incluirlo en la configuración principal. Editamos el archivo named.conf.default-zones:

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

Al final del archivo incluimos un bloque zone como el siguiente:

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

Guardamos los cambios y validamos la configuración general:

~$ sudo named-checkconf

Y recargamos la configuración del servicio:

~$ sudo systemctl reload bind9

Podemos usar el comando dig para resolver cualquiera de los nombres que hayamos incluido en el archivo de zona, por ejemplo, desde el servidor:

~$ dig @localhost ftp.red.local
...
;; ANSWER SECTION:
ftp.red.local.          86400   IN      A       192.168.0.3
...

O desde otra máquina en red:

~$ dig @192.168.0.120 ftp.red.local
...
;; ANSWER SECTION:
ftp.red.local.          86400   IN      A       192.168.0.3
...

¡Funciona!

Cómo configurar la resolución inversa

En algunos escenarios es interesante que el servidor DNS Bind pueda realizar resolución inversa, que consiste en obtener el nombre de máquina a partir de su dirección IP.

Para ello crearemos un archivo de zona en cuyo nombre utilizaremos la parte de red de las direcciones IP de nuestra red local. En este tutorial utilizamos direcciones de red clase C, concretamente la red 192.168.0.0/24, por lo que usaremos 192.168.0, pero a la inversa:

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

La estructura sería la siguiente:

$TTL 1D

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

; Registros NS
        IN      NS      ns.red.local.

; Registros PTR
120     IN      PTR     ns.red.local.
1       IN      PTR     router.red.local.
2       IN      PTR     nas.red.local.
3       IN      PTR     ftp.red.local.
112     IN      PTR     www.red.local.

Ahora en el registro SOA en lugar de indicar el nombre del servidor DNS pondremos el dominio o nombre de red que estamos configurando. Y en lugar de registros A usaremos registros PTR identificando la parte de máquina de cada dirección IP con el nombre de la máquina relacionada.

Guardamos el archivo y lo verificamos:

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

Para incluir esta configuración, editamos de nuevo named.conf.defalut-zones:

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

Y añadimos un bloque zone como este:

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

Guardamos el archivo y verificamos la configuración:

~$ sudo named-checkconf

Y, obviamente, recargamos la configuración del servidor DNS:

~$ sudo systemctl reload bind9

Para probar la resolución inversa disponemos del comando nslookup (también incluido en el paquete bind9-utils) que podemos usar, por ejemplo, desde el servidor Debian 11:

~$ nslookup 192.168.0.3 localhost
3.0.168.192.in-addr.arpa      name = ftp.red.local.

O desde cualquier máquina en red que cuente con este comando:

~$ nslookup 192.168.0.3 192.168.0.120
3.0.168.192.in-addr.arpa      name = ftp.red.local.

¡Perfecto!

Conclusión

Ahora que sabes cómo instalar y configurar el servidor DNS Bind 9 en Debian 11 Bullseye ya puedes configurar nombres de red en tu red local o resolver nombres de Internet, de forma sencilla y rápida.

Si te ha surgido alguna duda o pregunta, tienes alguna sugerencia o corrección, etc. puedes dejar un comentario (están moderados, para evitar el SPAM, pero se revisan a diario).

Y si ya puedes resolver los nombres de las máquinas de tu red gracias a esta guía y quieres agradecérnoslo, siempre es bien recibida cualquier pequeña contribución para el mantenimiento de este sitio y la creación de más artículos y tutoriales.

Puedes ayudarnos dejando una propina a partir de 1 $ desde PayPal:

O, si te sientes especialmente generoso, 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