Configura un servidor DNS con Bind9 en tu servidor Linux

Los servidores DNS (Sistema de Nombres de Dominio) nos permiten llegar a una determinada dirección IP a partir de un nombre de dominio, de esta forma, podremos acceder a diferentes webs poniendo su nombre de dominio directamente en la barra de direcciones del navegador web. También tenemos la posibilidad de montar un servidor DNS en la red local doméstica o profesional, para llegar a los diferentes equipos de la red local a través de un nombre de dominio en concreto, sin necesidad de recordar siempre las direcciones IP privadas. Hoy en RedesZone os vamos a enseñar cómo podemos configurar un servidor DNS en un servidor Linux usando Bind9, el servidor DNS más popular y utilizado.

¿Qué es Bind?

Bind, o también conocido como Berkeley Internet Name Domain, es un software que se encarga de realizar la tarea de servidor DNS. Bind es actualmente un estándar, y es utilizado ampliamente en sistemas operativos Linux y también en Unix, por tanto, si tienes un servidor basado en Linux o Unix y necesitas un servidor DNS para gestionar las consultas de la red local, entonces Bind es lo que debes utilizar. La versión actual de Bind es la versión Bind9, y es la que se utiliza habitualmente en todos los servidores, las versiones anteriores se consideran inseguras y «deprecated», por lo que no es recomendable utilizarlas.

Bind no sustituye a servidores DNS como los que podemos usar de Google (8.8.8.8), Cloudflare (1.1.1.1) u otros, sino que se complementa con ellos. Los clientes de la red local tendrán como servidor DNS el servidor Bind que configuremos en un servidor Linux, posteriormente, en este Bind podremos configurar diferentes reglas para llegar a equipos locales a través de sus direcciones IP privadas. Si un cliente de la red local, realiza una petición DNS a una web de Internet, lógicamente el servidor DNS no tendrá en su base de datos todas las direcciones IP de Internet, en este caso, se configuran unos servidores DNS públicos para hacer frente a estas solicitudes, reenviando el servidor con Bind la petición y automáticamente se la devolveremos al cliente que ha realizado la petición.

DNS de Windows

La versión que se utiliza actualmente es Bind 9, fue escrito desde cero para evitar problemas de las versiones anteriores, además, incluye características muy importantes como DNSSEC para proporcionar seguridad a los dominios haciendo uso de criptografía, también incluye mejoras en el procesamiento en paralelo de diferentes consultas DNS, dispone de compatibilidad completa para redes IPv6 y mucho más. Por supuesto, esta última versión de Bind dispone de mejoras en la seguridad muy importantes, de esta forma, estaremos protegidos frente a los posibles ataques que podían ocurrir en las versiones anteriores.

Requisitos previos antes de instalar Bind

Antes de empezar con la configuración del servidor DNS con Bind9 en nuestro sistema operativo, es recomendable poner IP fija en nuestro servidor, de lo contrario, si el servidor DHCP cambia nuestra dirección IP, los clientes de la red local perderán el acceso a nuestro servidor DNS porque no estarán «apuntando» a nuestra dirección IP privada. Para poner IP fija tenemos dos posibilidades:

  • Configurar el Static DHCP en el router/firewall que tengamos, poniendo nuestra dirección MAC de la tarjeta de red y la dirección IP que queramos que obtenga siempre.
  • Configurar de forma estática nuestro servidor Linux, en este caso, el servidor DHCP del router/firewall debería tener un rango de DHCP que esté fuera de nuestra dirección IP privada que pongamos fija.

Para configurar de forma estática una dirección IP en Linux, tenemos que editar el archivo de configuración «/etc/network/interfaces» y poner lo siguiente:

auto lo
iface lo inet loopback

auto ens33
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.2

A continuación, tenemos que reiniciar el servicio para aplicar los cambios correctamente (si hemos cambiado la IP que tenemos actualmente):

sudo service networking restart

Una vez que nuestra dirección IP de la red local sea fija, ya podremos instalar Bind.

Instalación de Bind en Linux y puesta en marcha

Lo primero que tenemos que hacer para configurar un servidor DNS (bind) en Linux es instalarlo desde los repositorios, nosotros vamos a instalar tanto el servidor DNS de Bind9 como también los paquetes sugeridos por el sistema operativo Debian, por tanto, deberemos poner en consola lo siguiente:

sudo apt install bind9 bind9-doc resolvconf python-ply-doc

Una vez que hayamos instalado todos los paquetes anteriores, tenemos que irnos al directorio del programa, que es donde tendremos que empezar a configurar los archivos necesarios:

cd /etc/bind/

Es recomendable acceder a este directorio como root (sudo su) para no tener problemas de permisos denegados cuando copiemos ficheros o modifiquemos los ya existentes, si hacemos un «ls -l» para listar todos los archivos que tenemos aquí, veremos lo siguiente:

Tal y como podéis ver, disponemos de una gran cantidad de archivos de configuración diferentes, cada uno de ellos está orientado específicamente a una tarea, en la documentación oficial de Bind9 podéis encontrar para qué sirve cada uno de ellos. Vamos a suponer a partir de ahora que siempre estás en modo super usuario (root) para editar o copiar los archivos sin restricciones.

Configurar los forwarders de Bind usando servidores DNS públicos

Lo primero que vamos a hacer es configurar unos servidores DNS de forwarding, es decir, los servidores DNS públicos para reenviar las consultas de cara a Internet. El archivo de configuración que se encarga de esta tarea es «named.conf.options», lo primero que hacemos es realizar una copia de seguridad del archivos, por si lo editamos mal y todo deja de funcionar:

cp /etc/bind/named.conf.options /etc/bind/named.conf.options.copia

Ahora editamos el fichero añadiendo los servidores DNS en la sección de forwarders, tal y como podéis ver aquí:

forwarders {
8.8.8.8;
1.1.1.1;
};

Quedaría de la siguiente forma:

Una vez que lo hayamos modificado, reiniciamos el servicio de Bind9 para comprobar que todo funciona correctamente y no devuelve ningún error:

sudo service bind9 restart

Ahora vamos a comprobar si están funcionando correctamente, para ello, ejecutamos un comando nslookup, y deberíamos ver que nuestro servidor DNS ha resuelto un dominio correctamente, en nuestro caso la dirección IP del servidor es la 192.168.231.130:

Una vez que tenemos configurado Bind para reenviar a los DNS públicos las resoluciones de las webs de Internet, vamos a ver cómo configurar para resolver dominios internos.

Configurar Bind para resoluciones locales

El archivo de configuración que debemos configurar ahora es named.conf.local, es recomendable realizar una copia de seguridad por si algo sale mal a la hora de configurarlo, para ello ejecutamos:

cp /etc/bind/named.conf.local /etc/bind/named.conf.local.copia

Una vez que hayamos realizado la copia de seguridad, tendremos que editar el arcihvo de configuración named.conf.local para proceder con la configuración. En este archivo de configuración tendremos que poner la zona a la que hacemos referencia, y también el archivo de configuración de bind que tiene todas las configuraciones, por tanto, podríamos dejarlo así:

zone "redlocal.com" {
type master;
file "/etc/bind/db.redlocal";
};

Es importante que el «file» haga referencia al fichero de configuración que importamos y que vamos a configurar ahora mismo.

Ahora tenemos que copiar la base de datos que tenemos en «db.local» darle el nombre de «db.redlocal» que hemos definido en el fichero anterior.

cp /etc/bind/db.local /etc/bind/db.redlocal

Ahora editamos este fichero de configuración que viene por defecto con mucha información, y lo adaptamos a nuestros intereses.

Lo primero que tenemos que hacer es modificar el SOA que viene en la parte superior por el nombre de dominio que hemos elegido de forma local, en este caso, sería «red.redlocal.com», después editaremos el fichero de configuración general con los dominios y subdominios que nosotros queramos. Nuestro archivo de configuración quedaría de la siguiente forma:

;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.redlocal.com. root.red.redlocal.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;

@ IN NS ns1.redlocal.com.
@ IN A 192.168.231.130
ns1 IN A 192.168.231.130
router IN A 10.11.1.1
pc1 IN A 10.11.1.2

Una vez que hemos guardado el fichero de configuración, comprobamos la sintaxis con el siguiente comando:

named-checkzone redlocal.com /etc/bind/db.redlocal

Ahora reiniciamos el proceso bind con el siguiente comando:

sudo service bind9 restart

Ya tenemos todo listo para empezar la batería de pruebas y comprobar que lo hemos hecho todo bien. Para comprobar que todo funciona bien, deberemos ejecutar los siguientes comandos:

host router.redlocal.com

Nos mostrará lo siguiente, la dirección IP del router:

root@bron-debian:/etc/bind# host router.redlocal.com
router.redlocal.com has address 10.11.1.1

También podremos hacer lo mismo con PC1:

host pc1.redlocal.com

Veremos esto:

root@bron-debian:/etc/bind# host pc1.redlocal.com
pc1.redlocal.com has address 10.11.1.2

Una vez que hemos conseguido resolver los dominios locales correctamente, devolviéndonos la dirección IP correspondiente, podemos hacer un ping sin problemas vía dominio:

root@bron-debian:/etc/bind# ping router.redlocal.com
PING router.redlocal.com (10.11.1.1) 56(84) bytes of data.
64 bytes from 10.11.1.1 (10.11.1.1): icmp_seq=1 ttl=128 time=0.413 ms
64 bytes from 10.11.1.1 (10.11.1.1): icmp_seq=2 ttl=128 time=0.401 ms
^C
--- router.redlocal.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 28ms
rtt min/avg/max/mdev = 0.401/0.407/0.413/0.006 ms

Ahora vamos a configurar la resolución inversa de dominios.

Resolución inversa de dominios

Ahora vamos a configurar el servidor DNS para que resuelva dominios a la inversa, poniendo la dirección IP y que nos diga a qué dominio pertenece dicha dirección IP. Para conseguir nuestro objetivo, deberemos añadir al fichero /etc/bind/named.conf.local que utilizamos anteriormente las líneas siguientes:

zone "192.in-addr.arpa" {
type master;
file "/etc/bind/db.192";
};

También deberemos copiar el archivo de configuración por defecto para editarlo. A partir del archivo db.127 creamos el db.192:

cp /etc/bind/db.127 /etc/bind/db.192

Una vez que lo hemos creado, basta con editarlo con la siguiente información:

;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.redlocal.com. root.red.redlocal.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.redlocal.com.
ns1 IN A 192.168.231.130
130.231.168 IN PTR redlocal.com

Una vez que hemos guardado el fichero de configuración, comprobamos la sintaxis con el siguiente comando:

named-checkzone 192.168.231.130 /etc/bind/db.192

Nos debería salir algo como esto:

named-checkzone 168.192.in-addr.arpa db.192
zone 168.192.in-addr.arpa/IN: loaded serial 1
OK

Ahora reiniciamos el proceso bind con el siguiente comando:

sudo service bind9 restart

Y comprobamos que ha funcionado correctamente:

host 192.168.231.130

Esperamos que os haya servido de ayuda este completo tutorial de Bind para montar vuestro propio servidor DNS localmente.

1 Comentario