Cómo instalar un resolvedor DNS local con Dnsmasq en Rocky Linux

Dnsmasq es un servidor DNS pequeño y ligero para tu entorno local. Puede utilizarse para proporcionar un Servidor DNS, un Servidor DHCP y un Servidor TFTP. En cuanto al Servidor DNS, el Dnsmasq puede utilizarse como reenviador, Servidor DNS recursivo y sistema de caché DNS. También carga contenidos DNS del archivo /etc/hosts, lo que te permite configurar nombres de dominio para nombres de host locales.

Dnsmasq está diseñado para ser ligero y ocupar poco espacio, adecuado para dispositivos con pocos recursos, como routers y cortafuegos. Dnsmasq tiene pocos requisitos de sistema y consume pocos recursos. Se puede ejecutar en Linux, BSD, Android y macOS.

Este tutorial cubrirá la instalación y configuración de un Servidor DNS local con Dnsmasq en un servidor Rocky Linux 9. Instalarás Dnsmasq y configurarás el Servidor DNS local con algunas funciones adicionales, como habilitar nombres de dominio locales, configurar subdominios mediante el archivo /etc/hosts y habilitar la caché DNS para un acceso más rápido. Por último, habilitarás el servidor DHCP mediante Dnsmasq.

También aprenderás a configurar las máquinas cliente para que utilicen el Servidor DNS local como resolvedor DNS primario.

Requisitos previos

Hay varios requisitos previos que debes tener antes de empezar. A continuación se enumeran los requisitos previos:

  • Un servidor Rocky Linux 9 – Este ejemplo utiliza el Rocky Linux con el nombre de host ‘dnsmasq-rockyy la dirección IP192.168.5.50‘.
  • Un usuario no root con privilegios de administrador sudo/root.
  • SELinux se ejecuta con ‘permisivopermisivo’.

Para las máquinas cliente, puedes utilizar cualquier distribución de Linux. Puedes utilizar distribuciones basadas en Debian o en RHEL como para las máquinas cliente.

Preparar el sistema

En los sistemas operativos basados en RHEL, el resolver DNS por defecto ‘/etc/resolv.conf ‘ es generado por el servicio NetworkManager. Antes de instalar Dnsmasq, deberás configurar un resolver DNS estático mediante el archivo /etc/resolv. conf y desactivar el resolver DNS del servicio NetworkManager.

Para empezar, abre el archivo de configuración del Gestor de Red /etc/NetworkManager/NetworkManager.conf utilizando el siguiente comando del editor nano.

sudo nano /etc/NetworkManager/NetworkManager.conf

Añade la línea‘dns=none‘ dentro de la sección ‘[section]‘.

[main]
dns=none

Guarda el archivo y sal del editor cuando hayas terminado.

A continuación, abre el archivo de configuración del resolver DNS ‘/etc/resolv.conf ‘ utilizando el comando nano editor que aparece a continuación.

sudo nano /etc/resolv.conf

Elimina todas las líneas disponibles y sustitúyelas por las siguientes. Con esto, utilizarás los DNS públicos de Cloudflare y Google como servidor DNS principal.

nameserver 1.1.1.1
nameserver 8.8.8.8

Guarda el archivo y sal cuando hayas terminado.

Por último, ejecuta el siguiente comando systemctl para reiniciar el NetworkManager y aplicar los cambios.

sudo systemctl restart NetworkManager

prepara el sistema

Una vez finalizados estos ajustes, el servicio NetworkManager no cambiará tu DNS resolver y podrás añadir o cambiar el DNS resolver en cualquier momento.

En los siguientes pasos, iniciarás la instalación y configuración de Dnsmasq en Rocky Linux.

Instalación de Dnsmasq en Rocky Linux

En este paso, instalarás el paquete Dnsmasq en un servidor Rocky Linux. A continuación, iniciarás y habilitarás el servicio Dnsmasq para que se ejecute al arrancar el sistema.

Por defecto, el paquete«dnsmasq» está disponible en el repositorio AppStream de Rocky Linux. Ejecuta el siguiente comando dnf para obtener información sobre el paquete «dnsmasq«.

sudo dnf info dnsmasq

Dnsmasq v2.85 está disponible en Rocky Linux 9 en el momento de escribir esto.

dnsmasq info

Ahora ejecuta el siguiente comando para instalar Dnsmasq. Introduce y cuando se te pida confirmación, y pulsa ENTER para continuar.

sudo dnf install dnsmasq dnsmasq-utils

Ahora debería iniciarse la instalación de Dnsmasq.

Tras instalar Dnsmasq, ejecuta el siguiente comando systemctl para iniciar y activar el servicio«dnsmasq«. Una vez ejecutado el siguiente comando, el servicio «dnsmasq» debería estar ejecutándose y habilitado, y se iniciará automáticamente al arrancar el sistema.

sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq

Verifica el servicio «dnsmasq» mediante la utilidad de comandos systemctl que se indica a continuación.

sudo systemctl status dnsmasq

Recibirás una salida como ésta – El servicio «dnsmasq» se está ejecutando actualmente, está habilitado y se iniciará automáticamente al arrancar.

verificar dnsmasq

Con Dnsmasq instalado y en funcionamiento, a continuación iniciarás la configuración de Dnsmasq para que se ejecute como servidor DNS local.

Configurar Dnsmasq

En este paso, configurarás el Dnsmasq como Servidor DNS local con algunas funciones activadas, como DNS caché y servidor DHCP, y configurarás el nombre de dominio y los subdominios para las aplicaciones locales. Esto permite que tu aplicación sea accesible a través de los nombres de dominio/subdominios locales como ‘db1.hwdominio.io‘, ‘app.hwdomain.ioy muchos más.

Para empezar, ejecuta el siguiente comando para copiar el archivo de configuración por defecto de Dnsmasq en ‘/etc/dnsmasq.conf.orig’, y luego abre el archivo de configuración original de Dnsmasq ‘/etc/dnsmasq.conf’ utilizando el siguiente comando del editor nano.

sudo cp /etc/dnsmasq.conf{,.orig}
sudo nano /etc/dnsmasq.conf

Añade las siguientes líneas al archivo.

# dnsmasq run on UDP port 53
# with IP address localhost and 192.168.5.50
# and network interface eth1
port=53
listen-address=127.0.0.1,192.168.5.50
interface=eth1
# disable forwarding of non-routed address
# disable forwarding names without the main domain.com
# automatically append the domain part to simple names
# disable dnsmasq to read /etc/resolv.conf file
domain-needed
bogus-priv
expand-hosts
no-resolv

# upstream DNS server for non-local domains
# using Cloudflare and google public DNS
server=1.1.1.1
server=8.8.8.8

# define the domain for dnsmasq
domain=hwdomain.io
address=/hwdomain.io/192.168.5.50

# enable DNS Cache and adjust cache-size
cache-size=10000

# enable dhcp via dnsmasq
# define lease db file
# make the dhcp server as an authoritative
dhcp-range=192.168.5.100,192.168.5.150,12h
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
dhcp-authoritative

Guarda el archivo y sal del editor cuando hayas terminado.

A continuación se detallan las opciones que utilizarás para tu instalación de Dnsmasq:

  • port: qué puerto utilizarás para ejecutar el Dnsmasq.
  • listen-address: la dirección IP que utilizarás para ejecutar Dnsmasq. Puedes utilizar varias direcciones IP.
  • interfaz: qué interfaz enlazará y ejecutará el Dnsmasq.
  • domain-needed: desactiva el reenvío de nombres sin la dirección de dominio principal. Puedes acceder como host ‘mysql1’ a menos que des el completo con dominio local como ‘mysql1.hwdomain.io’.
  • bogus-priv: desactiva el reenvío para direcciones no enrutadas.
  • expand-hosts: añade automáticamente la parte del dominio local a los nombres simples.
  • no-resolv: ignora el archivo ‘/etc/resolv.conf’ del servidor.
  • servidor: define el Servidor DNS ascendente que utilizarás para las direcciones o dominios no locales. Este ejemplo utiliza el Servidor DNS Público de Cloudflare y Google.
  • dominio: define el nombre de dominio para el servidor Dnsmasq. En este ejemplo, el servidor Dnsmasq obtendrá el dominio local hwdomain.io.
  • dirección: define qué dirección IP para el nombre de dominio en Dnsmasq. En este ejemplo, el dominio hwdomain.io se resolverá en la dirección IP 192.168.5.50.
  • cache-size: activa la caché DNS en Dnsmasq. Asegúrate de ajustar el tamaño, ya que aumenta el rendimiento y la velocidad.
  • dhcp-range: habilita el servidor DHCP a través del Dnsmasq. Ajusta el conjunto de direcciones IP para tu red y el tiempo de arrendamiento.
  • dhcp-leasefile: define el archivo que se demandará para almacenar el arrendamiento DHCP.
  • dhcp-authoritative: haz que el servidor DHCP sea autoritativo.

dnsmasq config

A continuación, abre el archivo‘/etc/hosts‘ utilizando el siguiente comando del editor nano. Ahora definirás algunos subdominios para las aplicaciones de tu entorno local.

sudo nano /etc/hosts

Añade las siguientes líneas al archivo. En este ejemplo, crearás tres subdominios wiki, mysqly archivos. Cada subdominio seguirá al dominio principal del servidor Dnsmasq ‘hwdomain.io’ y apuntará a una dirección IP concreta.

El subdominio wiki.hwdomain.io apuntará a la dirección IP ‘192.168.5.10el subdominio ‘mysql.hwdomain.ioapuntará a la dirección IP ‘192.168.5.25y el subdominioarchivos.hwdomain.ioapuntará a la dirección IP192.168.5.30‘.

192.168.5.10 wiki
192.168.5.25 mysql
192.168.5.30 files

Guarda el archivo y sal del editor cuando hayas terminado.

Ahora abre el archivo de configuración del resolver DNS‘/etc/resolv.conf‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/resolv.conf

Añade las siguientes líneas al principio del archivo. Asegúrate de cambiar la dirección IP por la dirección IP del servidor Dnsmasq.

nameserver 127.0.0.1
nameserver 192.168.5.50

Guarda el archivo y sal del editor cuando hayas terminado.

Ahora ejecuta el siguiente comando para verificar la configuración de Dnsmasq y asegurarte de que tienes la configuración adecuada. Recibirás una salida como‘dnsmasq: comprobación de sintaxis OK‘.

sudo dnsmasq --test

Por último, ejecuta el comando systemctl para reiniciar el servicio «dnsmasq» y aplicar los cambios.

sudo systemctl restart dnsmasq

configurar dnsmasq

Llegados a este punto, habrás finalizado la configuración de Dnsmasq como servidor DNS local en el sistema Rocky Linux. También has configurado el nombre de dominio para el servidor Dnsmasq y algunos subdominios mediante el archivo ‘/etc/hosts’. Por último, has habilitado el DNS caché y el servidor DHCP mediante el Dnsmasq.

En los siguientes pasos, verificarás la instalación y configuración del servidor Dnsmsq.

Verificar la instalación de Dnsmasq

Una vez finalizada la configuración de Dnsmasq, ahora verificarás el propio servicio Dnsmasq. Verificarás el Dnsmasq para asegurarte de que se ejecuta en el puerto predeterminado 50 y de que el servicio está en marcha. A continuación, verificarás el nombre de dominio local y los subdominios que creaste mediante el paquete«dns-utils«.

Ejecuta el siguiente comando para verificar el puerto abierto en tu sistema. A continuación, verifica el servicio«dnsmasq» mediante la utilidad de comandos systemctl.

ss -tulpn | grep 53
sudo systemctl status dnsmasq

Recibirás un resultado como éste: «Dnsmasq se está ejecutando en el puerto predeterminado 53 y el estado del servicio es actualmente en ejecución. Además, está activado, por lo que se iniciará automáticamente al arrancar.

verificar dnsmasq

A continuación, ejecuta el siguiente comando dnf para instalar el paquete «bind-utils» en tu servidor Rocky Linux. Este paquete proporciona múltiples herramientas de línea de comandos para probar y solucionar problemas del servidor DNS.

sudo dnf install bind-utils

Introduce y cuando se te solicite y pulsa INTRO para continuar.

instala bind-utils

Ahora ejecuta el siguiente comando dig para verificar el nombre de dominio del servidor Dnsmasq ‘hwdominio.io‘. Deberías ver que el nombre de dominio ‘dominiohw.ioapunta a la dirección IP del servidor ‘192.168.5.50‘.

dig hwdomain.io

verificar nombre de dominio

Por último, ejecuta el siguiente comando para verificar los subdominios que has definido mediante el archivo‘/etc/hosts‘.

dig wiki.hwdomain.io +short
dig mysql.hwdomain.io +short
dig files.hwdomain.io +short

Recibirás un resultado similar a este – El subdominio wiki.hwdominio.io apunta a la dirección IP 192.168.5.10el subdominio mysql.hwdomain.io apunta a la dirección IP 192.168.5.25, y por último el subdominio archivos.hwdomain.io apunta a la dirección IP del servidor 192.168.5.30.

verificar subdominio

Con estos resultados, has terminado la configuración de Dnsmasq como servidor DNS local. En los siguientes pasos, asegurarás el puerto DNS a través del Firewalld.

Configurar Firewalld

En este paso, configurarás el firewalld para abrir el puerto del servicio DNS y añadirás las direcciones IP de las redes internas al firewalld como la fuente principal que puede acceder al puerto del servicio DNS.

Ejecuta el siguiente comando firewall-cmd para añadir el servicio DNS al firewalld. A continuación, añade las direcciones IP de la red interna como fuente.

sudo firewall-cmd --add-service=dns
sudo firewall-cmd --add-source=192.168.5.0/24

A continuación, ejecuta el siguiente comando para guardar las reglas temporales que has creado y recarga el firewalld para aplicar los cambios.

sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload

setuo firewalld

Verifica el firewalld mediante el siguiente comando. Deberías ver que el servicio DNS se ha añadido al firewalld y que la dirección IP de origen de la red también se ha añadido al firewalld.

sudo firewall-cmd --list-all

Salida:

verificar firewalld

Configuración del cliente (basado en Debian o en RHEL)

En este paso, aprenderás a configurar tanto las distribuciones basadas en Debian como las basadas en RHEL para que utilicen el servidor DNS local que has creado mediante Dnsmasq.

Para las distribuciones basadas en RHEL

Añade un nuevo archivo de configuración para NetworkManager‘/etc/NetworkManager/conf.d/dns-servers.conf‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/NetworkManager/conf.d/dns-servers.conf

Añade las siguientes líneas al archivo, y asegúrate de cambiar la dirección IP por la dirección IP del servicio Dnsmasq. Con esta configuración, establecerás el resolver DNS por defecto para el cliente utilizando la dirección IP del servidor Dnsmasq. Esto escribirá automáticamente la configuración del resolver DNS‘/etc/resolv.conf‘.

[global-dns-domain-*]
servers=192.168.5.50

Guarda el archivo y sal del editor cuando hayas terminado.

A continuación, ejecuta el siguiente comando systemctl para reiniciar el servicio NetworkManager y aplicar los cambios.

sudo systemctl restart NetworkManager

Puedes mostrar el archivo ‘/etc/resolv.conf’ para verificar la configuración. Deberías ver que el servidor de nombres por defecto es el servidor local Dnsmasq con dirección IP 192.168.5.50.

cat /etc/resolv.conf

configurar máquina cliente

A continuación, ejecuta el siguiente comando dnf para instalar el programa bind-utils en tu sistema.

sudo dnf install bind-utils

instalar utilidades bind

Para distribuciones basadas en Debian

Si utilizas el sistema operativo basado en Debian, puedes configurar el resolver DNS manualmente y desactivar el servicio ‘systemd-resolved’ en tu sistema, especialmente para el sistema Ubuntu.

Ejecuta el siguiente comando para detener y desactivar el servicio systemd-resolved.

sudo systemctl disable --now systemd-resolved

Ahora ejecuta el siguiente comando para eliminar el archivo de enlace simbólico de la configuración del resolver DNS ‘/etc/resolv.conf’. A continuación, crea un nuevo archivo de configuración del resolver ‘/etc/resolv.conf’ mediante el siguiente comando del editor nano.

unlink /etc/resolv.conf
sudo nano /etc/resolv.conf

Añade la siguiente línea al archivo y cambia la dirección IP por la dirección IP de tu servidor Dnsmasq.

nameserver 192.168.5.50

Guarda el archivo y sal del editor cuando hayas terminado.

A continuación, ejecuta el siguiente comando apt para instalar el paquete ‘dnsutils‘ en tu sistema.

sudo apt install dnsutils

Una vez instalado ‘ bind-utils’ o ‘dns-utils’, puedes verificar la configuración de tu Dnsmasq mediante el comando dig.

Comprueba el nombre de dominio del servidor Dnsmasq ‘hwdominio.iomediante el siguiente comando dig. Deberías ver que el dominio ‘hwdominio.ioapunta a la dirección IP del servidor Dnsmasq 192.168.5.50.

dig hwdomain.io

verificar desde cliente

A continuación, comprueba los subdominios que has configurado mediante el archivo ‘/etc/hosts ‘ utilizando el siguiente comando. Deberías ver que cada subdominio apunta a la dirección IP específica que has configurado en el archivo « /etc/hosts «.

dig wiki.hwdomain.io +short
dig mysql.hwdomain.io +short
dig files.hwdomain.io +short

Recibirás un resultado como el siguiente – El subdominio wiki.hwdomain.io apunta a la dirección IP 192.168.5.10el subdominio mysql.hwdomain.io apunta a la dirección IP 192.168.5.25y, por último, el subdominio archivos.hwdomain.io apunta a la dirección IP del servidor 192.168.5.30.

verificar subdominios

Con esto, el nombre de dominio local y los subdominios se han configurado correctamente. Ahora, ¿qué pasa con los nombres de dominio públicos como Github.com, etc?

Ejecuta el siguiente comando para verificar los nombres de dominio de Internet desde tu máquina cliente. Esto garantizará que puedas conectarte a Internet, incluso con el DNS local resuelto en el servidor Dnsmasq.

dig github.com

Recibirás una salida similar a ésta: La consulta dig a github.com se conecta a través del servidor DNS local que se ejecuta en la dirección IP 192.168.5.50 con el puerto predeterminado 53.

verificar dns internet

Por último, comprueba la configuración de la caché DNS mediante el siguiente comando dig. Esto te mostrará las estadísticas de la consulta ejecutada, incluido el«Tiempo de consulta» al nombre de dominio de destino.

dig +noall +stats duckduckgo.com
dig +noall +stats duckduckgo.com

Recibirás una salida similar a ésta: La primera consulta que obtienes es el ‘Tiempo de consultaen 63 ms. Pero para la segunda y tercera consultas, el Tiempo de Consulta es de 2ms, lo que significa que tus consultas al mismo nombre de dominio se almacenan en caché a través del Servidor DNS local Dnsmasq.

verificar dnscache

Conclusión

En este tutorial, has creado tu propio Servidor DNS local con Dnsmasq. Has configurado tu propio Servidor DNS para tu entorno local con Dnmasq en un servidor Rocky Linux 9. Además, has incluido la configuración de Dnsmasq con nombres de dominio y subdominios locales, has habilitado la caché DNS para que sea más rápida, y también has habilitado el Servidor DHCP a través de Dnsmasq.

Por último, también has añadido y configurado máquinas cliente (distribuciones basadas en Debian y RHEL) para que utilicen el Servidor DNS local que has creado. Además, has aprendido a solucionar problemas del Servidor DNS con el comando dig y a configurar un resolver DNS en un sistema Linux.

También te podría gustar...