Cómo instalar un servidor DNS con BIND en Rocky Linux 9
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é, y 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 diagnosticar y probar el servidor DNS.
Este tutorial te mostrará cómo configurar el servidor DNS con BIND en un servidor Rocky Linux 9. BIND es uno de los programas de servidor DNS más populares, que ofrece varias funciones, como DNS autoritativo, DNS sólo en caché, equilibrio de carga DNS básico, DNS dividido, DNSSEC, IPv6 y muchas más.
Requisitos previos
Con este tutorial, configurarás e implementarás un Servidor DNS BIND con arquitectura Maestro-Esclavo. Para ello, necesitarás dos servidores Linux Rocky. Además, necesitarás privilegios de root/administrador en cada servidor.
Para configurar un servidor DNS público que pueda gestionar tu dominio (Servidor DNS Autoritativo), también deberás tener registrado el nombre de dominio y configurados los «Registros Glue».
Además, en esta guía, supondremos que tienes SELinux ejecutándose con el modo «permisivo».
Preparar el sistema
Para empezar con esta guía, deberás configurar el FQDN (Nombre de Dominio Completamente Cualificado) correcto en cada uno de tus servidores Rocky Linux. Esto puede hacerse mediante la utilidad de comandos«hostnamectl» y el archivo «/etc/hosts«.
A continuación se detallan los servidores que se utilizarán como ejemplo para esta guía:
Hostname IP Address FQDN Used as --------------------------------------------------------------- ns1 192.168.5.100 ns1.hwdomain.io Master ns2 192.168.5.120 ns2.hwdomain.io Slave
En el servidor maestro, ejecuta la siguiente utilidad de comandos hostnamectl para configurar el fqdn a‘ns1.hwdomain.io‘.
sudo hostnamectl set-hostname ns1.hwdomain.io
A continuación, también debes ejecutar el comando hostnamectl en el servidor esclavo para configurar el fqdn a ‘ns2.hwdomain.io’.
sudo hostnamectl set-hostname ns2.hwdomain.io
A continuación, abre el archivo ‘/etc/hosts’ tanto en el servidor Maestro como en el Esclavo utilizando el siguiente comando del editor nano.
sudo nano /etc/hosts
Añade la siguiente línea al archivo.
192.168.5.100 ns1.hwdomain.io ns1 192.168.5.120 ns2.hwdomain.io ns2
Guarda el archivo y sal del editor cuando hayas terminado.
Por último, ejecuta el siguiente comando ‘hostname’ para verificar el fqdn en cada servidor. Deberías ver que el servidor Maestro tiene el fqdn como‘ns1.hwdomain.io‘, y el servidor Esclavo tiene el fqdn‘ns2.hwdomain.io‘.
sudo hostname -f
A continuación se muestra el resultado del servidor maestro.
Y a continuación la salida del servidor Esclavo.
Con el fqdn configurado, ya estás listo para instalar BIND en los servidores Rocky Linux.
Instalar paquetes BIND
Por defecto, el repositorio AppStream de Rocky Linux proporciona la última versión estable del paquete BIND. En el momento de escribir esto, la versión estable actual de BIND es la v9.16.
En este paso, instalarás los paquetes BIND en los servidores Maestro y Esclavo. A continuación, configura BIND para que se ejecute sólo en el IPv4, y configura el firewalld para permitir el puerto DNS.
Ejecuta el siguiente comando dnf para instalar los paquetes BIND en los servidores Maestro y Esclavo. Cuando se te pida confirmación, introduce y para confirmar y pulsa ENTER para continuar.
sudo dnf install bind bind-utils
Una vez instalados los paquetes BIND, abre la configuración‘/etc/sysconfig/named‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/sysconfig/named
Añade la opción por defecto‘OPTIONS=..’ con la siguiente línea. Esta opción de comando para ‘bind’ o ‘named’ ejecutará el BIND sólo en IPv4.
OPTIONS="-4"
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, ejecuta la siguiente utilidad de comandos systemctl para iniciar y habilitar el servicio BIND ‘named‘. El servicio «named» debería estar ahora en ejecución y habilitado, y se iniciará automáticamente al arrancar el sistema.
sudo systemctl start named sudo systemctl enable named
Ahora verifica el servicio ‘named’ para asegurarte de que se está ejecutando y está habilitado mediante el siguiente comando.
sudo systemctl is-enabled named sudo systemctl status named
Recibirás una salida similar a la siguiente: El servicio BIND «named» está activado y se está ejecutando.
Con el servicio BIND ‘named’ en ejecución, tendrás que añadir el puerto DNS al cortafuegos, que está activado y en ejecución por defecto en Rocky Linux.
Ejecuta el siguiente comando firewall-cmd para añadir el servicio DNS al firewalld. A continuación, recarga el firewalld para aplicar los cambios.
sudo firewall-cmd --add-service=dns --permanent sudo firewall-cmd --reload
Si compruebas la lista de servicios habilitados en firewalld, deberías ver que el servicio DNS está habilitado. Ejecuta el siguiente comando firewall-cmd para comprobar la lista de servicios.
sudo firewall-cmd --list-services
Salida:
Llegados a este punto, ya has terminado la configuración de fqdn, has instalado los paquetes BIND y también has configurado el firewalld. Con esto en mente, ya puedes empezar a configurar el BIND Master en el servidor Master.
Configurar el servidor DNS BIND Maestro
En este paso, configurarás el servidor BIND Master utilizando el Linux Rocky‘ns1.hwdomain.io‘ y la dirección IP del servidor es‘192.168.5.100‘. Asegúrate de que ejecutas los siguientes comandos en el servidor Maestro.
Configurarás el servidor BIND Maestro con los siguientes pasos:
- La Configuración Básica incluirá la configuración de las ACL (Listas de Control de Acceso), la configuración de la dirección IP en la que se ejecutará el servicio BIND, la configuración de los reenviadores, y muchas cosas más.
- Configuración de Zonas – Aquí es donde creas configuraciones para tu dominio. Esto incluye la configuración del dominio principal y la configuración del DNS inverso.
Configuración básica
La configuración BIND por defecto en una distribución basada en RHEL está disponible en ‘/etc/named.conf’.
Ahora abre el archivo‘/etc/named.conf’ utilizando el siguiente comando del editor nano.
sudo nano /etc/named.conf
Cambia la configuración por defecto con las siguientes líneas.
acl "trusted" { 192.168.5.100; # ns1 - or you can use localhost for ns1 192.168.5.120; # ns2 192.168.5.0/24; # trusted networks };
options {
listen-on port 53 { 192.168.5.100; };
// listen-on-v6 port 53 { ::1; };
directory «/var/named»;
dump-file «/var/named/data/cache_dump.db»;
statistics-file «/var/named/data/named_stats.txt»;
memstatistics-file «/var/named/data/named_mem_stats.txt»;
secroots-file «/var/named/data/named.secroots»;
recursing-file «/var/named/data/named.recursing»;
allow-query { localhost; trusted; };
recursion yes;
allow-recursion { trusted; };
allow-transfer { localhost; 192.168.5.120; };
forwarders {
8.8.8.8;
1.1.1.1;
};
Guarda el archivo y sal del editor cuando hayas terminado.
Con esta configuración, establecerás BIND con las siguientes configuraciones:
- Configura una ACL‘trusted‘ que permita cualquier consulta desde redes locales.
- Ejecuta el servicio BIND en‘192.168.5.100‘ con el puerto por defecto’53‘.
- Activa la recursividad y permite la recursividad desde las redes de la ACL ‘deconfianza‘.
- Permite la transferencia de zonas al servidor esclavo con la dirección IP«192.168.5.120«.
- Configura los reenviadores con el servidor DNS público 1.1.1.1 de Cloudflare y 8.8.8.8 de Google.
A continuación, ejecuta el siguiente comando para verificar la configuración de BIND‘/etc/named.conf‘.
sudo named-checkconf /etc/named.conf
Por último, ejecuta la siguiente utilidad de comandos systemctl para reiniciar el servicio ‘named’ de BIND y aplicar los cambios.
sudo systemctl restart named
Ya has terminado la configuración básica del servidor DNS BIND.
Configurar zonas
Ahora vas a configurar zonas con el Servidor DNS BIND. Crearás un nuevo Servidor DNS con la dirección ‘ns1.hwdomain.io’ y ‘ns2.hwdomain.io’.
Para empezar, abre la configuración BIND ‘/etc/named.conf‘ mediante el comando del editor nano que aparece a continuación.
sudo nano /etc/named.conf
Añade la siguiente configuración al final de la línea.
include "/etc/named/zones.conf.local";
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, crea una nueva configuración ‘/etc/named/zones.conf.local ‘ utilizando el editor nano que aparece a continuación.
sudo nano /etc/named/zones.conf.local
Añade las siguientes líneas al archivo.
zone "hwdomain.io" { type master; file "db.hwdomain.io"; # zone file path allow-transfer { 192.168.5.120; }; # ns2 IP address - secondary DNS };
zone «5.168.192.in-addr.arpa» {
type master;
file «db.192.168.5»; # subnet 192.168.5.0/24
allow-transfer { 192.168.5.120; }; # ns2 private IP address – secondary DNS
};
Guarda y cierra el archivo cuando hayas terminado.
Con esta configuración, definirás las siguientes configuraciones:
- Crea dos zonas para el dominio‘hwdomain.io‘ y el DNS inverso‘5.168.192.in-addr.arpa‘.
- Ambas zonas de tipo«maestro«.
- Permite la transferencia de zonas al servidor DNS esclavo que se ejecutará en la dirección IP del servidor‘192.168.5.120‘.
A continuación, crea una nueva configuración de zona DNS, ‘/var/named/db.hwdomain.io’, utilizando el siguiente comando del editor nano.
sudo nano /var/named/db.hwdomain.io
Añade las siguientes líneas al archivo.
; ; 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.100
ns2.hwdomain.io. IN A 192.168.5.120
; 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.50
mail.hwdomain.io. IN A 192.168.5.15
Guarda y cierra el archivo cuando hayas terminado.
En este ejemplo, establecerás zonas con las siguientes configuraciones:
- Define los registros del servidor de nombres«ns1.hwdomain.io» con la dirección IP«192.168.5.100» y el«ns2.hwdomain.io» con la dirección IP«192.168.5.120«.
- Define dos dominios adicionales, ‘hwdomain.io’, que se resolverá en la dirección IP del servidor ‘192.168.5.50′ y el dominio‘mail.hwdomain.io’ en la dirección IP‘192.168.5.15′.
- También crearás un registro MX para el dominio ‘hwdomain.io’ que gestionará el servidor de correo ‘ mail.hwdomain.io.
A continuación, empezarás a configurar el DNS inverso para el dominio hwdomain.io.
Crea una nueva configuración DNS inversa ‘/var/named/db.192.168.5‘ utilizando el siguiente comando del editor nano.
sudo nano /var/named/db.192.168.5
Añade las siguientes líneas al archivo.
; ; 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
100 IN PTR ns1.hwdomain.io. ; 192.168.5.100
120 IN PTR ns2.hwdomain.io. ; 192.168.5.120
50 IN PTR hwdomain.io. ; 192.168.5.50
15 IN PTR mail.hwdomain.io. ; 192.168.5.15
Guarda y cierra el archivo cuando hayas terminado.
Con esta configuración, establecerás el DNS inverso o registros PTR como se indica a continuación.
- En la configuración del DNS inverso, también definirás el servidor de nombres ns1.hwdomain. io y ns2.hwdomain.io.
- Cada configuración de DNS inverso utiliza el último número de la dirección IP que se resuelve a cada dominio. En este ejemplo, el servidor de nombres ns1.h wdomain.io con dirección IP «192.168.5.100», y el registro PTR debe ser«100«.
- El resto de los registros PTR son iguales a los descritos anteriormente.
Llegados a este punto, has creado la configuración de dos zonas para el dominio«hwdomain.io» y has creado un servidor de nombres«ns1.hwdomain.io» y«ns2.hwdomain.io«.
Ahora ejecuta el siguiente comando chmod para cambiar la propiedad de ambas configuraciones de zona.
sudo chown -R named: /var/named/{db.hwdomain.io,db.192.168.5}
A continuación, comprueba los archivos de configuración de zona mediante la utilidad de comandos«named-checkconf» que aparece a continuación.
sudo named-checkconf
sudo named-checkzone hwdomain.io /var/named/db.hwdomain.io sudo named-checkzone 5.168.192.in-addr.arpa /var/named/db.192.168.5
Si la configuración de BIND es correcta, obtendrás un resultado como el de la siguiente captura de pantalla.
Por último, ejecuta el siguiente comando systemctl para reiniciar el servicio BIND ‘named’ y aplicar los cambios. A continuación, comprueba el estado del servicio BIND para asegurarte de que se está ejecutando.
sudo systemctl restart named sudo systemctl status named
Recibirás una salida similar a la siguiente: el servicio BIND ‘named‘ se está ejecutando y has finalizado la configuración del BIND Master.
En el siguiente paso, configurarás el servidor BIND Esclavo.
Configurar el servidor DNS BIND Esclavo
Tras configurar el servidor DNS Maestro, empezarás a configurar el servidor BIND Esclavo en el servidor ‘ns2.hwdomain.io’ con la dirección IP ‘192.168.5.120’.
La configuración básica de ‘named.conf’ es similar a la del BIND Maestro, y para los archivos de zona, puedes definir el nombre del archivo sin crear un archivo real en el servidor BIND Esclavo.
Antes de empezar, asegúrate de que ejecutas los siguientes comandos en el servidor BIND Esclavo.
Ahora abre la configuración BIND‘/etc/named.conf‘ en el servidor Esclavo mediante el comando editor nano que aparece a continuación.
sudo nano /etc/named.conf
Cambia la configuración por defecto con las siguientes líneas.
acl "trusted" { 192.168.5.100; # ns1 - or you can use localhost for ns1 192.168.5.120; # ns2 192.168.5.0/24; # trusted networks };
options {
listen-on port 53 { 192.168.5.120; };
//listen-on-v6 port 53 { ::1; };
directory «/var/named»;
dump-file «/var/named/data/cache_dump.db»;
statistics-file «/var/named/data/named_stats.txt»;
memstatistics-file «/var/named/data/named_mem_stats.txt»;
secroots-file «/var/named/data/named.secroots»;
recursing-file «/var/named/data/named.recursing»;
allow-query { any; };
recursion yes;
allow-recursion { trusted; };
allow-transfer { none; };
forwarders {
8.8.8.8;
1.1.1.1;
};
};
La configuración es similar a la del servidor BIND Maestro, y a continuación se indican algunas diferencias en las configuraciones.
- El servicio BIND se ejecutará en la dirección IP«192.168.5.120» del servidor Esclavo.
- La recursividad está activada, pero el «allow-transfer» está configurado a«none«.
Ahora añade la siguiente línea al final del archivo ‘named.conf’ para definir las zonas.
include "/etc/named/zones.conf.local";
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, crea una nueva configuración ‘/etc/named/zones.conf.local ‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/named/zones.conf.local
Añade las siguientes líneas al archivo.
zone "hwdomain.io" { type slave; file "slaves/db.hwdomain.io"; masters { 192.168.5.100; }; # ns1 IP address - master DNS };
zone «5.168.192.in-addr.arpa» {
type slave;
file «slaves/db.192.168.5»;
masters { 192.168.5.100; }; # ns1 IP address – master DNS
};
Guarda y cierra el archivo cuando hayas terminado.
Con esto, definirás algunas configuraciones a continuación en el servidor BIND Esclavo:
- Define dos zonas para el dominio«hwdomain.io» y su DNS inverso.
- El tipo de ambas zonas es«esclavo«.
- El archivo de zona de cada una se tomará del directorio ‘/var/named/slaves‘, que se transfiere desde el servidor BIND Maestro.
A continuación, ejecuta la siguiente utilidad de comandos ‘named-checkconf’ para verificar las configuraciones del BIND. A continuación, reinicia el servicio ‘named’ de BIND en el servidor Esclavo mediante el comando systemctl como se indica a continuación.
sudo named-checkconf sudo systemctl restart named
No tendrás ningún mensaje de error si la configuración de BIND es correcta.
Por último, ejecuta el siguiente comando systemctl para verificar el servicio BIND ‘named‘ en el servidor Esclavo y asegurarte de que el servicio se está ejecutando.
sudo systemctl status named
Ahora recibirás una salida similar a la siguiente: el servicio BIND ‘named’ se está ejecutando en el servidor BIND Esclavo.
Llegados a este punto, habrás finalizado la instalación del DNS BIND con la arquitectura Maestro-Esclavo. Ahora estarás listo para empezar a probar desde la máquina cliente.
Pruebas desde el cliente
Este ejemplo utiliza un sistema Debian como máquina cliente, así que instala algunos paquetes a continuación a través del APT antes de empezar.
sudo apt install dnsutils bind9-utils
Introduce y cuando se te pida confirmación y pulsa ENTER para continuar.
A continuación, 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 Cloudflare. 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.100 nameserver 192.168.5.120 nameserver 1.1.1.1 search hwdomain.io
Guarda y cierra el archivo cuando hayas terminado.
Ahora estás preparado para verificar tu servidor DNS desde la máquina cliente.
Ejecuta el comando dig que aparece a continuación 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.50«, mientras que el subdominio «mail.hwdomain.io» está gestionado por la dirección IP del servidor«192.168.5.15«.
dig hwdomain.io +short dig hwdomain.io
dig mail.hwdomain.io +short dig mail.hwdomain.io
Verificando el nombre de dominio hwdomain.io.
Verificando el subdominio mail.hwdomain.io.
A continuación, ejecuta el siguiente comando dig 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 del dominio principal «hwdomain.io».
dig hwdomain.io MX +short dig hwdomain.io MX
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.100» está revertida al servidor de nombres«ns1.hwdomain.io», la dirección IP«192.168.5.120» está revertida al servidor de nombres«ns2.hwdomain.io«, y la dirección IP «192.168.5.50″ se invierte al nombre de dominio principal «hwdomain.io», y por último la dirección IP«192.168.5.15» se invierte al subdominio«mail.hwdomain.io«.
nslookup 192.168.5.100 nslookup 192.168.5.120 nslookup 192.168.5.50 nslookup 192.168.5.15
Llegados a este punto, has finalizado la instalación del Servidor DNS BIND con arquitectura Maestro-Esclavo en Rocky Linux. También has aprendido a probar el Servidor DNS mediante varias utilidades de comandos como dig y nslookup.
Conclusión
Enhorabuena! a lo largo de este tutorial, has aprendido la instalación y configuración del Servidor DNS BIND en servidores Rocky Linux 9. Has configurado con éxito el Servidor DNS BIND Maestro-Esclavo utilizando dos servidores Rocky Linux diferentes. Además, has aprendido los comandos básicos de Dig y Nslookup para comprobar y verificar los registros DNS y la configuración.