Cómo instalar el servidor DNS Bind en Debian 12 Bookworm

En esta ocasión vamos a explicar cómo instalar el servidor DNS Bind en Debian 12 Bookworm 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 12 Bookworm

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

  • Una máquina Debian 12 Bookworm actualizada (configurada con una dirección IP fija de tu 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 12 con dirección IP fija 192.168.1.202 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 12 Bookworm

Vamos a instalar el servidor DNS Bind 9 en Debian 12 Bookworm 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 12, 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 12 bookworm

Configurar el firewall de Debian 12 para el servicio DNS Bind

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

~$ sudo ufw allow bind9

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.18.24-1-Debian (Extended Support Version) <id:>

Cómo probar el servidor DNS

El servidor DNS Bind ya está funcionando en Debian 12, pero aún no es usado automáticamente ni por la máquina donde está instalado ni por el resto de máquinas de la red. Pero podemos probarlo con las herramientas nslookup y dig, que pertenecen al paquete bind-utils que, a su vez, es dependencia del paquete bind9 con el que se instala Bind. Obviamente, en las máquinas de la red habrá que instalar el paquete bind-utils (si están basadas en Debian), o el que corresponda. Las máquinas Windows suelen incluir el comando nslookup en la consola de línea de comandos.

En el caso de nslookup pasamos como parámetros el dominio que queremos resolver y la dirección del servidor DNS que queremos emplear para dicha resolución (en este caso, nuestro servidor DNS local recién instalado):

~$ nslookup debian.org localhost
Server:         localhost
Address:        ::1#53

Non-authoritative answer:
Name:   debian.org
Address: 151.101.66.132
Name:   debian.org
Address: 151.101.2.132
Name:   debian.org
Address: 151.101.194.132
Name:   debian.org
Address: 151.101.130.132
Name:   debian.org
Address: 2a04:4e42:200::644
Name:   debian.org
Address: 2a04:4e42:600::644
Name:   debian.org
Address: 2a04:4e42::644
Name:   debian.org
Address: 2a04:4e42:400::644

Desde otra máquina de la red que pueda conectar al servidor DNS en el segundo parámetro indicaríamos la IP de la máquina Debian 12 que corre el servidor DNS Bind:

~$ nslookup debian.org 192.168.1.202
Server:         192.168.1.202
Address:        192.168.1.202#53

Non-authoritative answer:
Name:   debian.org
Address: 151.101.130.132
...

Como podemos ver, automáticamente Bind nos permite resolver nombres de Internet con su configuración por defecto.

En el caso de la herramienta dig, probamos a resolver el mismo nombre de Internet desde el propio servidor Debian 12. Para este comando da igual el orden de los parámetros porque el servidor DNS debe estar precedido de una @:

~$ dig @localhost debian.org

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

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

;; ANSWER SECTION:
debian.org.             34      IN      A       151.101.2.132
debian.org.             34      IN      A       151.101.194.132
debian.org.             34      IN      A       151.101.130.132
debian.org.             34      IN      A       151.101.66.132

;; Query time: 0 msec
;; SERVER: ::1#53(localhost) (UDP)
;; WHEN: Tue Apr 16 01:12:25 CEST 2024
;; MSG SIZE  rcvd: 131

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

~$ dig @192.168.1.202 debian.org

; <<>> DiG 9.18.18-0ubuntu0.22.04.2-Ubuntu <<>> @192.168.1.202 debian.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20697
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
debian.org.             300     IN      A       151.101.130.132
...

Cómo configurar el servidor DNS Bind en Debian 12 Bookworm

Para configurar el servicio DNS Bind en Debian 12 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, a partir de una plantilla que incluye la configuración de Bind:

~$ sudo cp /etc/bind/db.empty /etc/bind/db.red.local.zone

Editamos el nuevo archivo de zona:

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

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

; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL    86400
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      localhost.

Y haremos algunos cambios:

$TTL    86400
@       IN      SOA     ns.red.local. chacho.red.local. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      ns.red.local.

En este tipo de archivos el carácter «;» indica que lo que viene a continaución son comentarios, así que eliminamos las primeras líneas.

En el registro SOA o «Start of authority» definimos el nombre del servidor DNS para nuestro dominio (ns.red.local. 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 Serial debe ser incrementado manualmente cada vez que hagamos algún cambio en este archivo.

En el registro NS indicamos el nombre DNS para nuestro nuevo servidor de nombres (el servidor DNS también tiene su propio nombre DNS).

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

Ahora iremos añadiendo los distintos registros A para los nombres de máquina y sus direcciones IP, empezando por el servidor DNS:

$TTL    86400
@       IN      SOA     ns.red.local. chacho.red.local. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      ns.red.local.

; Registros A

ns.red.local.           IN      A       192.168.1.202
router.red.local.       IN      A       192.168.1.1
nas.red.local.          IN      A       192.168.1.2

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
zone red.local/IN: loaded serial 1
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:

...
                              2         ; Serial
...
plex.red.local.         IN      A       192.168.1.5

Guardamos el archivo y lo validamos de nuevo:

~$ sudo named-checkzone red.local /etc/bind/db.red.local.zone
zone red.local/IN: loaded serial 2
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.zone";
};

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 los comandos dig o nslookup para resolver cualquiera de los nombres que hayamos incluido en el archivo de zona; por ejemplo, haciendo la consulta desde el servidor:

~$ dig @localhost nas.red.local
...
;; ANSWER SECTION:
nas.red.local.          86400   IN      A       192.168.1.2
..

O:

~$ nslookup nas.red.local localhost
Server:         localhost
Address:        ::1#53

Name:   nas.red.local
Address: 192.168.1.2

Y desde otra máquina de la red:

~$ nslookup nas.red.local 192.168.1.202
Server:         192.168.1.202
Address:        192.168.1.202#53

Name:   nas.red.local
Address: 192.168.1.2

¡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.1.0/24, por lo que usaremos 192.168.1, pero a la inversa:

~$ sudo cp /etc/bind/db.empty /etc/bind/db.1.168.192.zone

Editamos el archivo de zona:

~$ sudo nano /etc/bind/db.1.168.192.zone

Y hacemos los mismos cambios iniciales que en el archivo de zona anterior, con la salvedad de que ahora en el registro SOA en vez del nombre del servidor DNS (ns.red.local.) indicaremos el dominio (red.local.):

$TTL    86400
@       IN      SOA     red.local. chacho.red.local. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      ns.red.local.

Y añadimos los registros que en lugar de ser tipo A serán PTR, identificando la parte de máquina de cada dirección IP con el nombre de la máquina relacionada:

$TTL    86400
@       IN      SOA     red.local. chacho.red.local. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      ns.red.local.

; Registros PTR

202     IN      PTR     ns.red.local.
1       IN      PTR     router.red.local.
2       IN      PTR     nas.red.local.
5       IN      PTR     plex.red.local.

Guardamos el archivo y lo verificamos con named-checkzone, pero en lugar del dominio indicamos la parte de red de las direcciones IP, al revés de como las usamos normalmente:

~$ sudo named-checkzone 1.168.192 /etc/bind/db.1.168.192.zone
zone 1.168.192/IN: loaded serial 1
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 "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.1.168.192.zone";
};

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 usamos el comando nslookup, por ejemplo, desde el servidor Debian 12 Bookworm:

~$ nslookup 192.168.1.5 localhost
5.1.168.192.in-addr.arpa      name = plex.red.local.

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

~$ nslookup 192.168.1.5 192.168.1.202
5.1.168.192.in-addr.arpa      name = plex.red.local.

¡Perfecto!

Ahora quedaría por un lado, configurar el servidor Debian 12 para que use su propio servidor DNS para poder resolver los nombres de la red local, y por otro lado configurar el resto de máquinas de la red. Dependiendo de cómo esté configurada la red en cada máquina, esto se hará de forma manual (en la sección de servidores DNS de cada configuración de red) o configurando el servidor DHCP de la red (o del router) para que entregue la dirección del servidor Debian 12 Bookworm como servidor DNS a cada máquina que se configure automáticamente.

Conclusión

Ahora que sabes cómo instalar y configurar el servidor DNS Bind 9 en Debian 12 Bookworm 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!

5/5 - (2 votos)

Deja un comentario

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.