Cómo configurar un servidor DNS con BIND en Ubuntu 22.04
BIND o Berkeley Internet Name Domain es un software de servidor DNS gratuito y de código abierto. Es uno de los programas de servidor DNS más populares, utilizado por más del 70% de los DNS de Internet. BIND existe desde los años 80 y es conocido por su flexibilidad, rendimiento y funciones. BIND puede utilizarse tanto como DNS autoritativo como DNS de caché, admite equilibrio de carga, actualización dinámica, DNS dividido, DNSSEC, IPv6 y muchas más.
El software DNS BIND es uno de los servidores DNS más fiables para sistemas operativos tipo Unix. Está disponible en la mayoría de las distribuciones de Linux y proporciona herramientas adicionales para el diagnóstico y la comprobación del servidor DNS.
Esta guía te enseñará a instalar el servidor DNS con BIND en el servidor Ubuntu 22.04. Este tutorial te mostrará cómo configurar la instalación del servidor DNS BIND Maestro-Esclavo utilizando dos servidores Ubuntu.
Requisitos previos
Antes de empezar con esta guía, debes tener los siguientes requisitos:
- Dos servidores Ubuntu 22.04.
- Un usuario no root con privilegios de root/administrador.
Configuración del FQDN (Nombre de Dominio Completamente Cualificado)
Antes de empezar a instalar los paquetes BIND, debes asegurarte de que el nombre de host y el FQDN de tus servidores son correctos. En esta demostración, utilizaremos dos servidores Ubuntu con los siguientes datos:
Hostname IP Address FQDN Used As --------------------------------------------------------- ns1 192.168.5.21 ns1.hwdomain.io BIND Master ns2 192.168.5.22 ns2.hwdomain.io BIND Slave
Ahora inicia sesión en cada servidor y ejecuta el siguiente comando para configurar el FQDN (Nombre de Dominio Completamente Cualificado).
Configura el FQDN en el servidor«ns1«.
sudo hostnamectl set-hostname ns1.hwdomain.io
Configura el FQDN en el servidor «ns2«.
sudo hostnamectl set-hostname ns2.hwdomain.io
A continuación, edita el archivo«/etc/hosts» utilizando el siguiente comando.
sudo nano /etc/hosts
Añade la siguiente configuración a cada servidor.
192.168.5.21 ns1.hwdomain.io ns1 192.168.5.22 ns2.hwdomain.io ns2
Guarda y cierra el archivo cuando hayas terminado.
Por último, comprueba y verifica el FQDN en cada servidor utilizando el siguiente comando. En el servidor«ns1» obtendrás el FQDN como«ns1.hwdomain.io«, y en el servidor«ns2» obtendrás la salida«ns2.hwdomain.io«.
sudo hostname -f
Instalar paquetes BIND
Los paquetes Bind están disponibles por defecto en el repositorio de servidores de Ubuntu. Ahora puedes instalar fácilmente Bind utilizando el comando apt tanto en el servidor «ns1» como en el «ns2».
Ejecuta el siguiente comando apt para actualizar y refrescar los repositorios de Ubuntu.
sudo apt update
Después, instala los paquetes Bind utilizando el siguiente comando. introduce Y para confirmar la instalación y pulsa ENTER para continuar. Y comenzará la instalación.
sudo apt install bind9 bind9utils bind9-doc dnsutils
Una vez finalizada la instalación de Bind, edita la configuración«/etc/default/named» utilizando el siguiente comando.
sudo nano /etc/default/named
La línea«OPTIONS=» te permite configurar opciones específicas cuando se ejecuta el servicio BIND. En esta demostración, ejecutarás Bind sólo con IPv4, por lo que tendrás que hacer la línea «OPTIONS» como se indica a continuación.
OPTIONS="-u bind -4"
Guarda y cierra el archivo cuando hayas terminado.
Ahora ejecuta el siguiente comando para reiniciar el servicio Bind«named«. A continuación, comprueba y verifica el estado del servicio BIND. Deberías ver que el servicio Bind «named» se está ejecutando en ambos servidores.
sudo systemctl restart named sudo systemctl status named
Configurar el BIND Master
Tras instalar los paquetes BIND en los servidores «ns1» y «ns2», vas a configurar el servidor DNS BIND. vas a configurar el servidor «ns1» como Maestro del servidor DNS BIND. Puedes ejecutar BIND en un único servidor, pero se recomienda utilizar varios servidores para configurar el Servidor DNS de Alta Disponibilidad.
Vuelve a la sesión de terminal del servidor«ns1«.
Ejecuta el siguiente comando para editar el archivo de configuración«/etc/bind/named.conf.options«.
sudo nano /etc/bind/named.conf.options
Añade la siguiente configuración al archivo en la parte superior de la línea, antes de la línea«options {….};«.
Con esta configuración, estarás creando una ACL (Lista de Control de Acceso) con el nombre«trusted«, que incluye todas las direcciones IP y redes de confianza de tu entorno. Asegúrate también de añadir la dirección IP del servidor local«ns1» y la dirección IP del servidor DNS secundario«ns2«.
acl "trusted" { 192.168.5.21; # ns1 - or you can use localhost for ns1 192.168.5.22; # ns2 192.168.5.0/24; # trusted networks };
Ahora haz cambios en la sección«opciones {..};» como se indica a continuación.
En el siguiente ejemplo, estamos deshabilitando el soporte para IPv6 comentando la opción«listen-on-v6«, habilitando y permitiendo la recursión desde la ACL«trusted«, y ejecutando el servicio BIND en la dirección IP específica «ns1««192.168.5.21«. Además, estamos desactivando la transferencia de zona por defecto y definiendo los reenviadores específicos para el servidor DNS BIND a Google Public DNS«8.8.8.8» y«8.8.4.4«.
options { directory "/var/cache/bind"; //listen-on-v6 { any; }; # disable bind on IPv6 recursion yes; # enables resursive queries allow-recursion { trusted; }; # allows recursive queries from "trusted" - referred to ACL listen-on { 192.168.5.21; }; # ns1 IP address allow-transfer { none; }; # disable zone transfers by default forwarders { 8.8.8.8; 1.1.1.1; }; };
Guarda y cierra el archivo cuando hayas terminado.
Por último, ejecuta el siguiente comando para comprobar y verificar el archivo de configuración«/etc/bind/named.conf.options«. Si no aparece ningún mensaje de salida, entonces tu configuración es correcta.
sudo named-checkconf /etc/bind/named.conf.options
Configurar zonas
Después de establecer la configuración básica del maestro BIND, ahora vas a configurar las zonas para tu nombre de dominio. En el siguiente ejemplo, utilizaremos el nombre de dominio«hwdomain.io» con el servidor de nombres«ns1.hwdomain.io» y«ns2.hwdomain.io«.
Edita el archivo de configuración«/etc/bind/named.local» utilizando el siguiente comando.
sudo nano /etc/bind/named.conf.local
En esta configuración, definirás dos archivos de zona, la zona directa y la zona inversa para tu nombre de dominio. La zona directa contendrá la configuración de dónde se resolverán tus nombres de dominio a la dirección IP, mientras que la zona inversa traducirá la dirección IP a qué nombre de dominio.
En el siguiente ejemplo, definiremos la zona directa« /etc/bind/zones/db.hwdomain.io» para el dominio«hwdomain.io» y la zona inversa «/etc/bind/zones/db.192.168.5».
zone "hwdomain.io" { type master; file "/etc/bind/zones/db.hwdomain.io"; # zone file path allow-transfer { 192.168.5.22; }; # ns2 IP address - secondary DNS };
zone «5.168.192.in-addr.arpa» {
type master;
file «/etc/bind/zones/db.192.168.5»; # subnet 192.168.5.0/24
allow-transfer { 192.168.5.22; }; # ns2 private IP address – secondary DNS
};
Guarda y cierra el archivo cuando hayas terminado.
A continuación, ejecuta el siguiente comando para crear un nuevo directorio«/etc/bind/zones» que se utilizará para almacenar los archivos de configuración de zona.
sudo mkdir -p /etc/bind/zones/
Después, copia la configuración de zona de reenvío por defecto «/etc/bind/zones/db.hwdomain.io» y edita el archivo utilizando el siguiente comando.
sudo cp /etc/bind/db.local /etc/bind/zones/db.hwdomain.io sudo nano /etc/bind/zones/db.hwdomain.io
Cambia el registro SOA por defecto por tu nombre de dominio. Además, tendrás que cambiar el número de «Serie« dentro de los registros SOA cada vez que realices cambios en el archivo, y éste debe ser el mismo número de «Serie» con el servidor DNS secundario/esclavo.
A continuación, puedes definir registros NS y registros A para tu servidor DNS. En este ejemplo, el servidor de nombres será«ns1.hwdomain.io» con el registro A de la dirección IP «192.168.5.21» y«ns2.hwdomain.io» con el registro A del servidor DNS secundario de la dirección IP«192.168.5.22«.
Por último, puedes definir otros nombres de dominio. En este ejemplo, definiremos un registro MX (gestor de correo) para el dominio«hwdomain.io» que será gestionado por el servidor de correo«mail.hwdomain.io«. Además, definiremos el nombre de dominio «hwdomain.io» que se resolverá en el servidor con dirección IP «192.168.5.100» y el subdominio para el servidor de correo «mail. hwdomain.io» en la dirección IP del servidor«192.168.5.120«.
; ; BIND data file for the local loopback interface ; $TTL 604800 @ IN SOA ns1.hwdomain.io. admin.hwdomain.io. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; ; NS records for name servers IN NS ns1.hwdomain.io. IN NS ns2.hwdomain.io. ; A records for name servers ns1.hwdomain.io. IN A 192.168.5.21 ns2.hwdomain.io. IN A 192.168.5.22 ; Mail handler or MX record for the domain hwdomain.io hwdomain.io. IN MX 10 mail.hwdomain.io. ; A records for domain names hwdomain.io. IN A 192.168.5.100 mail.hwdomain.io. IN A 192.168.5.120
Guarda y cierra el archivo cuando hayas terminado.
A continuación, copia el archivo de configuración de la zona inversa por defecto en«/etc/bind/zones/db.192.168.5» y edita el nuevo archivo utilizando el siguiente comando.
sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.5 sudo nano /etc/bind/zones/db.192.168.5
Cambia el registro SOA por defecto utilizando tu nombre de dominio. Además, no olvides cambiar el número de«Serie» dentro del registro SOA.
Define registros NS para tus servidores DNS. Son los mismos servidores de nombres que utilizaste en la zona de reenvío.
Por último, define los registros PTR para tus nombres de dominio. El número de los registros PTR es el último número de la dirección IP. En este ejemplo, el servidor de nombres«ns1.hwdomain.io» se resuelve en la dirección IP«192.168.5.21«, por lo que ahora el registro PTR será«21» y así sucesivamente para otros nombres de dominio.
; ; BIND reverse data file for the local loopback interface ; $TTL 604800 @ IN SOA ns1.hwdomain.io. admin.hwdomain.io. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ;
; name servers – NS records
IN NS ns1.hwdomain.io.
IN NS ns2.hwdomain.io.
; PTR Records
21 IN PTR ns1.hwdomain.io. ; 192.168.5.21
22 IN PTR ns2.hwdomain.io. ; 192.168.5.22
100 IN PTR hwdomain.io. ; 192.168.5.100
120 IN PTR mail.hwdomain.io. ; 192.168.5.120
Guarda y cierra el archivo cuando hayas terminado.
Ahora ejecuta el siguiente comando para comprobar las configuraciones de BIND y asegúrate de que no aparece ningún mensaje de error.
sudo named-checkconf
A continuación, ejecuta el siguiente comando para comprobar y verificar cada uno de los archivos de zona que acabas de crear, el archivo de configuración de la zona directa y el de la zona inversa. Si tus archivos de zona no tienen ningún error, deberías ver un mensaje de salida como«OK«. Si no hay ningún error, el comando te mostrará qué línea del archivo causó un error.
sudo named-checkzone hwdomain.io /etc/bind/zones/db.hwdomain.io sudo named-checkzone 5.168.192.in-addr.arpa /etc/bind/zones/db.192.168.5
Para finalizar la configuración del BIND Master, ejecuta el siguiente comando para reiniciar el servicio BIND y aplicar los nuevos cambios a las configuraciones que hayas realizado.
sudo systemctl restart named
Configuración del BIND Esclavo
Ahora ya has terminado la configuración del servidor DNS BIND Maestro. Es hora de configurar el servidor «ns2» como secundario o salve del servidor DNS BIND.
El servidor maestro almacena los archivos de zona que contienen la configuración DNS de tu dominio y gestiona las consultas recursivas o iterativas. El servidor DNS secundario/esclavo almacena los registros DNS durante un periodo de tiempo temporal, y estos registros DNS se transfieren automáticamente desde el servidor BIND Maestro.
Ahora pasa a la sesión de terminal«ns2» y empieza a configurar el servidor«ns2» como Secundario/Esclavo del servidor DNS BIND.
Ejecuta el siguiente comando para editar el archivo de configuración«/etc/bind/named.conf.options»
sudo nano /etc/bind/named.conf.options
Encima de la línea, añade la siguiente configuración. Esto creará la misma ACL (Lista de Control de Acceso) que en el servidor Maestro.
acl "trusted" { 192.168.5.21; # ns1 192.168.5.22; # ns2 - or you can use localhost for ns2 192.168.5.0/24; # trusted networks }; Dentro de la línea"options {...};", puedes cambiar la configuración como se indica a continuación. Esta configuración sigue siendo la misma que en el servidor DNS BIND Maestro, y la única diferencia aquí es la opción " listen-on" que se especifica a la dirección IP del servidor"ns2".
options {
directory «/var/cache/bind»;
//listen-on-v6 { any; }; # disable bind on IPv6
recursion yes; # enables resursive queries
allow-recursion { trusted; }; # allows recursive queries from «trusted» – referred to ACL
listen-on { 192.168.5.22; }; # ns2 IP address
allow-transfer { none; }; # disable zone transfers by default
forwarders {
8.8.8.8;
1.1.1.1;
};
};
Guarda y cierra el archivo cuando hayas terminado.
A continuación, edita el archivo de configuración«/etc/bind/named.conf.local» utilizando el siguiente comando para configurar el servidor«ns2″ como servidor DNS secundario/esclavo.
sudo nano /etc/bind/named.conf.local
Añade la siguiente configuración al archivo. Como puedes ver, estamos definiendo las zonas directa e inversa, pero con el«tipo esclavo» y definiendo el servidor DNS Maestro«192.168.5.21«. No necesitas crear el archivo de zona porque los registros y datos DNS se transferirán automáticamente desde el servidor DNS Maestro y se almacenarán temporalmente durante un periodo de tiempo en el servidor DNS secundario/esclavo.
zone "hwdomain.io" { type slave; file "/etc/bind/zones/db.hwdomain.io"; masters { 192.168.5.21; }; # ns1 IP address - master DNS }; zone "5.168.192.in-addr.arpa" { type slave; file "/etc/bind/zones/db.192.168.5"; masters { 192.168.5.21; }; # ns1 IP address - master DNS };
Guarda y cierra el archivo cuando hayas terminado.
Ahora ejecuta el siguiente comando para comprobar y verificar la configuración del BIND y asegurarte de que todas las configuraciones son correctas. A continuación, puedes reiniciar el servicio BIND «named» en el servidor«ns2» para aplicar los nuevos cambios. Y ya has terminado la configuración en el servidor «ns2» como secundario/esclavo del servidor DNS BIND.
sudo named-checkconf sudo systemctl restart named
Por último, ejecuta el siguiente comando para comprobar y verificar el servicio BIND «named» en el servidor«ns2″. Y asegúrate de que el servicio «named» se está ejecutando.
sudo systemctl status named
Verificación del servidor DNS desde la máquina cliente
En la máquina cliente, hay varias formas de configurar el resolver DNS. Puedes configurar el resolver DNS desde el NetworkManager o desde la configuración del netplan. Pero la forma más sencilla es configurar el resolver DNS manualmente a través del archivo «/etc/resolv.conf». Esto te permite configurar un resolver DNS estático para las máquinas cliente.
Ejecuta el siguiente comando para eliminar el archivo de enlace predeterminado«/etc/resolv.conf» y crea un nuevo archivo utilizando el editor nano.
sudo unlink /etc/resolv.conf sudo nano /etc/resolv.conf
Añade la siguiente configuración al archivo. En la siguiente configuración estamos definiendo tres resolvedores diferentes, el BIND DNS Master, el servidor BIND DNS Secundario y el resolvedor DNS público de Google. Cuando la máquina cliente solicite información sobre el nombre de dominio, la información se tomará del resolvedor DNS, de arriba a abajo.
nameserver 192.168.5.21 nameserver 192.168.5.22 nameserver 8.8.8.8 search hwdomain.io
Guarda y cierra el archivo cuando hayas terminado.
A continuación, ejecuta el siguiente comando para instalar alguna utilidad DNS en tu máquina cliente. En este ejemplo, la máquina cliente es un sistema Ubuntu, por lo que vamos a instalar la utilidad DNS utilizando el comando apt como se indica a continuación.
sudo apt install dnsutils bind9-utils
Una vez instalada la utilidad DNS en tu sistema, puedes empezar a comprobar todos los registros DNS de la máquina cliente.
Ejecuta el siguiente comando dig para comprobar el nombre de dominio«hwdomain.io» y«mail.hwdomain.io«. Y deberías ver que«hwdomain.io» está resuelto en la dirección IP del servidor «192.168.5.100«, mientras que el subdominio«mail.hwdomain.io» está gestionado por la dirección IP del servidor«192.168.5.120«.
dig hwdomain.io +short dig hwdomain.io
dig mail.hwdomain.io +short dig mail.hwdomain.io
A continuación, ejecuta el comando dig como se indica a continuación para comprobar el gestor de correo del nombre de dominio «hwdomain.io». Y deberías obtener la salida de que el«mail.hwdomain.io» gestiona el correo para el dominio principal «hwdomain.io».
dig hwdomain.io MX +short dig hwdomain.io MX
Ahora también puedes verificar la configuración de la zona inversa para tu nombre de dominio utilizando el comando nslookup.
Ejecuta el siguiente comando nslookup para comprobar y verificar el DNS inverso de algunas direcciones IP.
Ahora deberías ver que la dirección IP«192.168.5.21» está revertida al servidor de nombres«ns1.hwdomain.io», la dirección IP«192.168.5.22» está revertida al servidor de nombres«ns2.hwdomain.io«, y la dirección IP «192.168.5.100″ se invierte al nombre de dominio principal «hwdomain.io», y por último la dirección IP«192.168.5.120» se invierte al subdominio«mail.hwdomain.io«.
nslookup 192.168.5.21 nslookup 192.168.5.22 nslookup 192.168.5.100 nslookup 192.168.5.120
Conclusión
Enhorabuena! a lo largo de este tutorial has aprendido la instalación y configuración del Servidor DNS BIND en servidores Ubuntu 22.04. Has configurado con éxito el Servidor DNS BIND Maestro-Esclavo utilizando dos servidores Ubuntu diferentes. Además, has aprendido los comandos básicos de Dig y Nslookup para comprobar y verificar los registros DNS y la configuración.