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.
Tabla de contenidos
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
:
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!