Source: https://chachocool.com/como-instalar-el-servidor-dns-bind-en-debian-9-stretch/
Timestamp: 2020-07-14 16:11:07+00:00

Document:
▷ Cómo instalar el servidor DNS Bind en Debian 9 Stretch - ✅ [2020]
Cómo instalar el servidor DNS Bind en Debian 9 Stretch
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
Cómo instalar el servidor DNS en Debian 9 Stretch
Configurar el firewall para el servidor DNS en Debian 9
Cómo configurar el servidor DNS Bind en Debian 9
Primer paso: Resolución de nombres de Internet
Configuración del servicio Bind
Segundo paso: Servidor DNS primario
Resolución directa de nombres
Resolución inversa de nombres
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.
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.
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:
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.
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
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:
Cualquier cambio que hagamos en estos y otros archivos de configuración de Bind no se aplicará hasta recargar la configuración del servicio.
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:
Usa el comando ping para intentar resolver el dominio de Internet que prefieras:
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.
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.
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 añadir la directiva recursion, a continuación, por ejemplo, de la directiva directory:
Básicamente esta directiva indica a Bind que si no tiene información propia sobre el nombre que tiene que resolver, pase la consulta a otros servidores.
Esos otros servidores DNS se definen en un bloque anidado llamado forwarders:
Está desactivado, así que lo activaremos e incluiremos los servidores DNS a los que solicitaremos la resolución de nombres:
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 (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
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«:
Insertaremos una zona para la resolución de nombres directa, de nombre a dirección IP:
zone "red.local" {
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:
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
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
@       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
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
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 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.168.192
El contenido es muy similar al del archivo de resolución directa:
@       IN      SOA     red.local.      root.red.local. (
86400   ; reintentar
604800  ; TTL Caché negativa
100.0         IN      PTR     ns.red.local.
100.0         IN      PTR     debian9.red.local.
109.0         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 168.192 /etc/bind/zones/db.168.192
zone 168.192/IN: loaded serial 0
Todo correcto, es el momento de recargar de nuevo la configuración del servicio Bind:
Y ahora podemos volver a utilizar el comando nslookup en cualquier máquina de la red que utilice el servidor DNS:
109.0.168.192.in-addr.arpa    name = debian92.red.local.
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.
Y si ya tienes funcionando el servicio DNS gracias a nuestra guía de instalación de Bind en Debian 9 Buster, ¡siempre que quieras puedes invitarme a un café!
Etiquetas: Debian, Debian 9 Stretch, DNS, Linux, Redes
Pablo 18 Abr 2020 Responder
Hola… Muy buen trabajo. Muy ilustrativo y me sacó varias dudas que tenía. Ahora una consulta: En /etc/resolv.conf va la IP interna del servidor que estamos configurando o la IP externa que corresponde al dominio? Gracias.
Chacho Cool 18 Abr 2020 Responder
¡Hola, Pablo! Si estás configurando máquinas de la red local a la que pertenece el servidor DNS, lo lógico sería usar la IP interna, aunque sin Bind queda a la escucha en todas las interfaces de red de la máquina Debian 9, y la IP pública es alcanzable por los clientes, también valdría la IP pública.
Gracias por responder. Es un servidor de páginas web, sólo eso. No es servidor de mi red ni nada de eso. Es sólo para publicar mis web. Ahí sí corresponde la IP pública?
Es que no acabo de entender el esquema. La idea al configurar un cliente DNS es la visibilidad del servidor DNS, si cliente y servidor están en la misma red se usan direcciones internas, pero si el servidor DNS está en Internet (como los que podemos usar para resolver cualquier nombre de Internet) utilizamos las direcciones públicas. Podría haber un caso en que el servidor DNS resuelva nombres para clientes de Internet y clientes locales, por lo que los clientes externos deben sí o sí usar la dirección pública y los clientes internos pueden usar cualquiera de las dos direcciones.
En el caso de tu servidor web, no adivino cuál es la función del servidor DNS, ya que entiendo que tus páginas web tendrán asignados dominios ya configurados y gestionados desde el servicio de registro de dominios.
juan 14 May 2020 Responder
Gracias, me ayudaste a configurarlo y entender cada paso.
Chacho Cool 14 May 2020 Responder
¡Estupendo, Juan! Me alegra saberlo.
Yusimy 21 May 2020 Responder
Está muy bueno el tutorial me aclaró muchas cosas, ¿ahora podemos con esto incluir las máquinas a este dominio?
Chacho Cool 21 May 2020 Responder
Puedes añadir todos los registros que necesites, empezando por todas las máquinas que necesiten ser accedidas por otras.
Marcos 24 May 2020 Responder
Amigo, ¿cuál sería la opción adicional para montar en ese servidor DNS un filtrado de páginas bloqueadas por el gobierno?
octavio 4 Jun 2020 Responder
Gracias por el tutorial, bastante claro de cómo hacerlo, gracias.

References: resolución 
 Resolución 

Resolución 

Resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución