Está en la página 1de 11

Cómo instalar el servidor DNS

Bind en Debian 9 Stretch


20 octubre, 2020 por Chacho Cool
En esta entrada veremos cómo instalar el servidor DNS Bind en Debian 9
Stretch paso a paso, de modo que proporcione resolución de nombres a tu
red local o incluso aloje y resuelva los nombres de las máquinas de tu red.

Antes de instalar el servidor DNS en


Debian 9 Stretch
Para seguir esta guía de instalación y configuración del servicio DNS
Bind en Debian 9 debes satisfacer algunos requisitos básicos:

 Una máquina Debian 9 actualizada.


 Un usuario con privilegios de sudo o el mismo root.
 Conexión a Internet.
 Otras máquinas en la red local para probar el servicio.
Un servidor DNS según su configuración puede tener varios modos de
funcionamiento. En este tutorial haremos que nuestra máquina Debian 9
resuelva nombres de Internet para sí misma y el resto de máquinas de la red
local, pero también se comporte como servidor DNS primario del dominio
de nuestra propia red local.

En este ejemplo configuraremos una red local con direcciones IP


192.168.0.0/255, con el dominio red.local y el servidor DNS será la máquina
192.168.0.100 con Debian 9.

Cómo instalar el servidor DNS en


Debian 9 Stretch
Vamos a instalar el servidor DNS Bind en Debian 9 Stretch usando los
paquetes presentes en la propia distribución, por lo que actualizaremos la
información de los repositorios:

~$ sudo apt update


El paquete que necesitamos es bind9 así que lo descargaremos con apt,
junto con el paquete dnsutils para tener la herramienta nslookup:

~$ sudo apt install -y bind9 dnsutils


Cuando terminen de descargar e instalarse los paquetes y sus dependencias
tendremos un nuevo servicio disponible en nuestro sistema Debian 9, el
servicio bind9.service o bind9 si prefieres el nombre corto.

El servicio bind9 queda habilitado para iniciar automáticamente junto a


Debian 9, pero no arranca tras la instalación, ya que es necesario
configurarlo previamente.

Configurar el firewall para el servidor DNS en


Debian 9
Si tienes activado el firewall UFW en el servidor Debian 9 en el que estás
instalando el servicio DNS, debes añadir una regla que permita la conexión
de las máquinas cliente. Es tan sencillo como lanzar este comando:

~$ sudo ufw allow dns

Cómo configurar el servidor DNS Bind


en Debian 9
Para configurar el servicio DNS Bind en Debian 9 debemos trabajar sobre
los archivos del directorio /etc/bind/. El archivo principal named.conf sólo
carga la configuración de otros archivos de configuración adicionales, que
son:
 named.conf.options
 named.conf.local
 named.conf.default-zones
Cualquier cambio que hagamos en estos y otros archivos de configuración
de Bind no se aplicará hasta recargar la configuración del servicio.

Configuración en los clientes


Entre los clientes también incluimos a la máquina Debian 9 que hará de
servidor DNS, ya que además de ofrecer el servicio debe poder utilizarlo.

Para configurar las máquinas de tu red que usen Debian 9 u otros sistemas
Linux, edita sus archivos resolv.conf:

~$ sudo nano /etc/resolv.conf


Asegúrate de desactivar cualquier directiva nameserver presente, insertando
un carácter # a principio de línea, y añade otra directiva nameserver con la
dirección IP del servidor Debian 9 en el que has instalado Bind:

...
#nameserver 192.168.0.1
nameserver 192.168.0.100
Usa el comando ping para intentar resolver el dominio de Internet que
prefieras:

~$ ping google.com
ping: google.com: Fallo temporal en la resolución del nombre
No funciona, esto es buena señal porque el sistema intenta resolver nombres
usando el servidor Debian 9 que aún no está listo.

Primer paso: Resolución de nombres de


Internet
En un primer paso el servidor DNS resolverá nombres de Internet para sí
mismo y para el resto de máquinas de la red local, así que tendremos que
configurar este modo de funcionamiento.

Configuración del servicio Bind


Editaremos el archivo named.conf.options:

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


El contenido de este archivo es un bloque options dentro del cual debemos
buscar la directiva dnssec-validation:

...
dnssec-validation auto;
...
En una red local privada no es posible aplicar esta capa de seguridad para el
servicio DNS, así que habrá que cambiar el valor a «no«:

...
dnssec-validation no;
...
De esta forma Bind utilizará los servidores DNS raíz de Internet para las
consultas para las que no tiene información propia. Es posible que algunas
consultas puedan tardar más tiempo del habitual, incluso algunas no se
resolverán sin configuraciones adicionales, así que es recomendable añadir
un bloque forwarders en el que indicar servidores DNS caché públicos
alternativos.

Localizamos el bloque forwarders:

...
// forwarders {
// 0.0.0.0;
// };
...
Está desactivado, así que lo activaremos e incluiremos los servidores DNS a
los que solicitaremos la resolución de nombres:

...
forwarders {
8.8.8.8;
8.8.4.4;
};
...
En este caso hemos incluido los servidores DNS de Google, pero podrías
incluir los servidores públicos que creas oportuno, incluyendo los de tu
proveedor de servicios de Internet.

Una vez guardados los cambios podemos verificar que la configuración es


correcta con el comando named-checkconf:

~$ sudo named-checkconf
Si no produce ningún tipo de salida es que todo está correcto.

Con una configuración sin errores, podemos iniciar por primera vez el
servicio bind9:

~$ sudo systemctl start bind9


Ya podemos resolver nombres tanto en el servidor Debian 9 como desde
cualquier máquina que lo use como servidor DNS. Prueba a resolver
nombres tanto desde el servidor como desde el cliente:

~$ ping google.com
PING google.com (172.217.16.238) 56(84) bytes of data.
64 bytes from mad08s04-in-f14.1e100.net (172.217.16.238): icmp_seq=1 ttl=52
time=14.4 ms
64 bytes from mad08s04-in-f14.1e100.net (172.217.16.238): icmp_seq=2 ttl=52
time=13.8 ms
64 bytes from mad08s04-in-f14.1e100.net (172.217.16.238): icmp_seq=3 ttl=52
time=29.8 ms
...

Segundo paso: Servidor DNS primario


Llega el momento de aprovechar el servidor DNS que ya tenemos
funcionando para que resuelva los nombres de nuestra propia red local, que
en este ejemplo tiene el dominio red.local.

Editamos el archivo named.conf.local para añadir al final dos zonas más:

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


Insertaremos la información de las zonas donde nos indican los comentarios,
tras el bloque de comentarios «Do any local configuration here«:

//
// Do any local configuration here
//
...
Insertaremos una zona para la resolución de nombres directa, de nombre a
dirección IP:

...
zone "red.local" {
type master;
file "/etc/bind/zones/db.red.local";
};
...
En file hemos indicado el archivo que contendrá los registros de la base de
datos de nombres DNS para nuestro dominio, red.local.
Ahora, opcionalmente, insertaremos una zona para resolución inversa, de
direcciones IP a nombres:

...
zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.0.168.192";
};
...
Guardamos los cambios y cerramos el archivo named.conf.local.

Ahora tenemos que crear los archivos de zona que acabamos de indicar en
la configuración. El directorio que hemos indicado para guardar los distitntos
archivos de zona en este ejemplo no existe, así que lo crearemos:

~$ sudo mkdir /etc/bind/zones

Resolución directa de nombres


Vamos a crear el archivo para la resolución directa de nombres, con el
nombre que indicamos en named.conf.local:

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


Con un contenido similar a este:

$TTL 1D
@ IN SOA ns.red.local. root.red.local. (
0 ; número de serie
604800 ; refresco
86400 ; reintento
2419200 ; expiración
604800 ; Caché negativa TTL
)
@ IN NS ns.red.local.
ns.red.local. IN A 192.168.0.100
debian9.red.local. IN A 192.168.0.100
debian92.red.local. IN A 192.168.0.109
En el encabezado del registro SOA (Start Of Authority) indicamos el servidor
DNS que se encarga de mantener estos registros, que es el mismo que
estamos configurando (ns.red.local.) y la cuenta de correo electrónico del
administrador (root.red.local.) sin la característica @. Observa que todos los
nombres de dominio finalizan con un punto.

Otro campo importante del registro SOA es el que hemos identificado con el
comantario «número de serie», que es un contador que debemos
incrementar manualmente cada vez que hagamos modificaciones en los
registros.

Tras el bloque sólo queda ir añadiendo los registros. El primero es un


registro tipo NS para identificar el nombre del servidor DNS.

A continuación se añaden todos los demás registros que necesites, en este


ejemplo son del tipo A que identifican máquinas de la red.

Guarda los cambios y comprueba que está todo correcto con el


comando named-checkzone, que usa como parámetros un dominio y el
archivo de zona que lo gestiona:

~$ sudo named-checkzone red.local /etc/bind/zones/db.red.local


zone red.local/IN: loaded serial 0
OK
Debe informar del valor del número de serie (contador) actual y que no hay
errores (OK).

Es el momento de recargar la configuración del servicio bind9:

~$ sudo systemctl reload bind9


Ahora, tanto en el servidor como en cualquier cliente puedes intentar
resolver nombres que hayas dado de alta en el archivo de zona y deberías
obtener respuesta:

~$ ping debian92.red.local
PING debian92.red.local (192.168.0.109) 56(84) bytes of data.
64 bytes from 192.168.0.109: icmp_seq=1 ttl=64 time=0.475 ms
64 bytes from 192.168.0.109: icmp_seq=2 ttl=64 time=0.614 ms
64 bytes from 192.168.0.109: icmp_seq=3 ttl=64 time=0.492 ms
...

Resolución inversa de nombres


Si has decidido incorporar también la resolución inversa, que no es necesaria
para el funcionamiento habitual de tu red, es el momento de configurarla.

La resolución inversa funciona solicitando al servidor DNS cuál es el nombre


de red de una máquina a partir de una dirección IP. En el ejemplo anterior
hicimos ping a una de las máquinas de la red por su nombre y, gracias al
servidor DNS, se obtuvo su dirección IP.

Podríamos intentar lo contrario con la herramienta nslookup y la dirección IP


obtenida:

~$ nslookup 192.168.0.109
Server: 192.168.0.100
Address: 192.168.0.100#53
** server can't find 109.0.168.192.in-addr.arpa: SERVFAIL
La herramienta contacta con el servidor DNS en el puerto estándar, pero no
consigue la resolución. En unos instantes esto cambiará.

En nuestro servidor DNS Debian 9 crearemos el archivo de zona que hayas


especificado en named.conf.local:

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


El contenido es muy similar al del archivo de resolución directa:

$TTL 1D
@ IN SOA red.local. 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
100 IN PTR ns.red.local.
100 IN PTR debian9.red.local.
109 IN PTR debian92.red.local.
Guardados los cambios, comprueba que no haya errores con el
comando named-checkzone (que también sirve para los archivos de
resolución inversa):

~$ sudo named-checkzone 0.168.192 /etc/bind/zones/db.0.168.192


zone 168.192/IN: loaded serial 0
OK
Todo correcto, es el momento de recargar de nuevo la configuración del
servicio Bind:

~$ sudo systemctl reload bind9


Y ahora podemos volver a utilizar el comando nslookup en cualquier
máquina de la red que utilice el servidor DNS:

~$ nslookup 192.168.0.109
Server: 192.168.0.100
Address: 192.168.0.100#53
109.0.168.192.in-addr.arpa name = debian92.red.local.
¡Justo lo que queríamos!

Conclusión
Ahora ya sabes cómo instalar y configurar un servidor DNS Bind en Debian 9
Stretch, con lo que además de resolver nombres de Internet usando los
servidores DNS que quieras (ya que a veces los de los provedores de Internet
pueden caer), podrás usar dominios y subdominios en las máquinas de tu
red y resolverlos fácilmente.

También podría gustarte