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.

¡Ahorra 20,00 EUR!Superventas nº 2 TRIUMPHKEY 120x60cm Escritorio de pie Ajustable en Altura con estantes para Monitor Escritorio de pie eléctrico Ajustable en Altura Estante de Almacenamiento Home Office Tablero de Empalme Blanco
¡Ahorra 44,00 EUR!Superventas nº 3 SANODESK QS1 110 x 60 cm Escritorio Elevable Eléctrico con Tablero Escritorio Regulable en Altura Eléctrico Telescópico Bidireccional con Control de Memoria y Tecnología Anticolisión (Blanco)

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!

4.7/5 - (3 votos)

4 comentarios en «Cómo instalar el servidor DNS Bind en Debian 11 Bullseye»

  1. Estimado Chacho.

    Antes que nada excelente tutorial, muy útil.

    Sin embargo, tengo una consulta, cómo puedo hacer que mi máquina resuelva el nombre ya declarado en Bind (mi servidor DNS) de un web server que tengo acá localmente, la IP de mi servidor local es 192.168.1.98, este a ya está incluido en Bind, así:

    ; BIND data file for local loopback interface
    ;
    $TTL 604800
    @ IN SOA ns.iot.dragonfly. e.carrillo.iotautomation.com.au. (
    3 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL
    ;NS Reisters
    @ IN NS ns.iot.dragonfly.

    ;A Registers
    ns.iot.dragonfly. IN A 192.168.1.95
    dragonflytest45.com.iot.dragonfly IN A 192.168.1.98

    También agregué la IP de mi servidor DNS a mi conexión de red de internet para que no sea necesario agregar el nombre del web server y la IP en el archivo hosts de Windows.
    ¿Cóomo hago para que mi servidor DNS sea consultado por los equipos de casa para que consigan al web server con el nombre en lugar de la IP?

    Gracias.

    Responder
    • Hola, Edgar. Observo esto en la configuración:

      dragonflytest45.com.iot.dragonfly IN A 192.168.1.98

      Cuando lo que deberías tener es esto:

      dragonflytest45.com.iot.dragonfly. IN A 192.168.1.98

      La diferencia es que te faltó un punto tras el nombre del servidor web (dragonflytest45). Sin embargo, al indicar el nombre del servidor DNS (ns) sí pusiste el punto final.

      Por lo demás, para que las máquinas de tu red usen el nuevo servidor DNS Bind puedes configurar tu servidor DHCP para que les entregue dicho servidor DNS, y también puedes confgurarlo estáticamente en la conexión de red de cada máquina.

      Responder
  2. Voy a ser muy sincero y también coloquial (como habla en común en mi país), yo vivía haciendo tutoriales, con la idea de montarlos en blog algún día para compartirlos con mis estudiantes o cualquier vaina así. Pero desde que apareció el más arrecho de todos en Internet haciendo tutoriales, me olvidé de eso y sólo les mando el link https://chachocool.com/

    El que no monta el servicio mirando un tutorial de chachocool, simplemente es bruto.

    PD: Sí, ya sé, muchos pensarán «que jala bolas», bueno sí a la gente inteligente y dispuesta a compartir su inteligencia yo le jalo bolas.

    Responder

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.