Cómo configurar un DNS local con Dnsmasq en Debian 12
Dnsmasq es un servicio de red pequeño y ligero para tu entorno local (LAN). Proporciona servicios de red como DNS, DHCP y TFTP. Dnsmasq puede utilizarse como reenviador DNS, 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 poca memoria, por lo que es adecuado para dispositivos con pocos recursos, como routers y cortafuegos. Dnsmasq puede ejecutarse en Linux, BSD, Android y macOS.
Este tutorial instalará y configurará un servidor DNS local con Dnsmasq en un servidor Debian 12. Configuraremos un Servidor DNS local que pueda utilizarse para tu red local, añadiendo nombres de dominio locales, habilitando la caché DNS y habilitando el Servidor DHCP mediante Dnsmasq. También aprenderás a configurar y añadir una máquina cliente para que utilice el Servidor DNS local. Una vez que hayas completado este tutorial, podrás acceder a todas tus aplicaciones a través del nombre de dominio local, y tus peticiones DNS serán más rápidas porque habrás habilitado el DNS caché.
Prerequistes
Antes de empezar, debes tener los siguientes requisitos para completar este tutorial:
- Un servidor Debian 12 – Este ejemplo utiliza un servidor Debian con el nombre de host ‘dnsmasq-servidory la dirección IP 192.168.5.20.
- Un usuario no root con privilegios de administrador sudo/root.
Para la máquina cliente, puedes utilizar cualquier distribución de Linux porque la configuración DNS es similar para todas las distribuciones.
Preparar el sistema
En este paso, prepararás tu servidor Debian que se utilizará como servidor DNS local. Actualizarás el índice de paquetes, detendrás y desactivarás el servicio«systemd-resolved» y, a continuación, crearás y definirás la configuración estática del resolver DNS mediante el archivo«/etc/resolv.conf«.
En el sistema Debian, el resolver DNS está gestionado por el servicio «systemd-resolved», que proporciona resolución de nombres de red a través de la interfaz D-BUS. Para configurar el software del servidor DNS, como Dnsmasq, debes desactivar el servicio «systemd-resolved«.
Antes de empezar, ejecuta el siguiente comando apt para actualizar y refrescar el índice de paquetes de Debian.
sudo apt update
A continuación, ejecuta el siguiente comando para detener y desactivar el servicio «systemd-resolved«. En el sistema Debian, la configuración DNS está gestionada por el NetworkManager y el servicio systemd-resolved.
sudo systemctl disable --now systemd-resolved sudo systemctl stop systemd-resolved
Elimina el archivo de enlace de la configuración del resolvedor DNS ‘/etc/resolv.conf ‘ mediante el siguiente comando.
sudo unlink /etc/resolv.conf
Después, crea un nuevo 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 archivo. Esto añadirá los DNS públicos de Cloudflare y Google como el resolver para tu servidor Debian.
nameserver 1.1.1.1 nameserver 8.8.8.8
Guarda el archivo y sal del editor cuando hayas terminado. Ahora pasa a los siguientes pasos para la instalación y configuración de Dnsmasq.
Instalación y configuración de Dnsmasq
En este paso, instalarás y configurarás el servidor DNS local utilizando el Dnsmasq. Configurarás el Dnsmasq para que se ejecute en el puerto DNS predeterminado 53 y en la dirección IP interna«192.168.5.20«. También definirás el nombre de dominio para el servicio Dnsmasq, activarás la caché DNS y, por último, activarás el servidor DHCP mediante el Dnsmasq.
El paquete«dnsmasq» por defecto está disponible en el repositorio de Debian. Ejecuta el siguiente comando apt para instalar el paquete Dnsmasq.
sudo apt install dnsmasq
Cuando te lo pida, introduce y para confirmar y pulsa ENTER para continuar.
Una vez instalado Dnsmasq, ejecuta el siguiente comando systemctl para verificar el servicio «dnsmasq» y asegurarte de que está activado y en funcionamiento.
sudo systemctl is-enabled dnsmasq sudo systemctl status dnsmasq
Recibirás un resultado similar a éste: El servicio dnsmasq está activado y se ejecutará automáticamente al arrancar. Y el estado actual del servicio dnsmasq es en ejecución.
Una vez que Dnsmasq se esté ejecutando en tu sistema Debian, deberás iniciar la configuración de Dnsmasq a través del archivo «/etc/dnsmasq.conf«.
Para empezar, ejecuta el siguiente comando para hacer una copia de seguridad del archivo de configuración de Dnsmasq por defecto.
sudo cp /etc/dnsmasq.conf{,.orig}
Ahora abre el archivo de configuración de Dnsmasq‘/etc/dnsmasq.conf‘ utilizando el siguiente comando del editor nano.
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.20 # and network interface eth1 port=53 listen-address=127.0.0.1,192.168.5.20 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 domain names # 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.20 # enable DNS Cache and adjust cache-size cache-size=1000 # enable DHCP via dnsmasq # define lease db file # make the dhcp server as an authoritative dhcp-range=192.168.5.80,192.168.5.150,12h dhcp-leasefile=/var/lib/misc/dnsmasq.leases dhcp-authoritative
Guarda el archivo y cierra el editor cuando hayas terminado.
Detalla las opciones que utilizarás para Dnsmasq:
- port: qué puerto utilizarás para ejecutar el Dnsmasq.
- listen-address: qué dirección IP utilizarás para ejecutar el 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.20.
- 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.
A continuación, abre el archivo de configuración ‘/etc/hosts’ utilizando el siguiente comando del editor nano. Puedes definir el subdominio para tus aplicaciones internas y se configurará automáticamente con el nombre de dominio Dnsmasq‘hwdomain.io‘.
sudo nano /etc/hosts
Añade las siguientes líneas al archivo. En este ejemplo, definirás el subdominio app1, db1 y files. El dominio raíz de estos subdominios es el propio servidor Dnsmasq ‘hwdomain.io’.
Con las siguientes líneas,«app1.hwdomain.io» se resolverá a la dirección IP «192.168.5.10«, el subdominio«db1.hwdomain.io» apuntará a la dirección IP del servidor«192.168.5.25«, y el subdominio «files.hwdomain.io» apuntará a la dirección IP «192.168.5.50«.
192.168.5.10 app1 192.168.5.25 db1 192.168.5.50 files
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, abre el archivo‘/etc/resolv.conf‘ con el siguiente comando del editor nano y añade la dirección IP del servidor Dnsmasq como‘nameserver‘.
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.20
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora ejecuta el comando ‘dnsmasq’ que aparece a continuación para verificar la configuración de Dnsmasq y asegurarte de que tienes el formato de configuración adecuado. Deberías recibir una salida como ‘dnsmasq – syntax check OK‘.
sudo dnsmasq --test
Por último, ejecuta el comando systemctl para reiniciar el servicio«dnsmasq » y aplicar los cambios.
sudo systemctl restart dnsmasq
Llegados a este punto, ya has terminado la configuración del servidor DNS local mediante Dnsmasq en el sistema Debian. También has configurado el nombre de dominio local y los subdominios, has habilitado la caché DNS y has habilitado el servidor DHCP mediante Dnsmasq.
En los pasos siguientes, verificarás la instalación y configuración de tu servidor Dnsmasq.
Verificar la instalación de Dnsmasq
En este paso, verificarás la instalación de Dnsmasq comprobando el servicio Dnsmasq y el puerto LISTEN de tu sistema. A continuación, comprobarás el nombre de dominio local y los subdominios que has configurado mediante el archivo «/etc/hosts «.
Ejecuta el siguiente comando para asegurarte de que el servicio Dnsmasq se está ejecutando en el puerto 53. A continuación, comprueba el estado del servicio Dnsmasq mediante la utilidad de comandos systemctl.
ss -tulpn | grep 53 sudo systemctl status dnsmasq
Recibirás un resultado similar a éste: El servicio Dnsmasq se está ejecutando en el puerto 53 por defecto, está habilitado y se ejecutará automáticamente al arrancar.
A continuación, comprueba el nombre de dominio y los subdominios que has configurado en el Dnsmasq mediante el archivo«/etc/hosts«. Pero antes, ejecuta el siguiente comando apt para instalar el paquete«dnsutils» en tu sistema. El paquete ‘dnsutils’ proporciona herramientas de línea de comandos para probar la configuración del Servidor DNS.
sudo apt install dnsutils
Introduce y cuando se te pida y pulsa ENTER para proceder a la instalación.
Una vez instalado ‘dnsutils‘, ejecuta el siguiente comando dig para verificar el nombre de dominio y los subdominios que has configurado.
Comprueba el dominio principal Dnsmasq‘hwdomain.io‘, que apunta a la dirección IP del servidor Dnsmasq ‘192.168.5.20’.
dig hwdomain.io
Verifica los subdominios que has definido a través del archivo «/etc/hosts » mediante el comando dig que aparece a continuación.
dig app1.hwdomain.io +short dig db1.hwdomain.io +short dig files.hwdomain.io +short
El subdominio «app1. hwdomain.io» apunta a la dirección IP «192.168.5.10″, el subdominio«db1.hwdomain.io» apunta a la dirección IP«192.168.5.25» y, por último,«files.hwdomain.io» apunta a la dirección IP«192.168.5.50«.
A continuación se muestra la salida similar que recibirás.
Ahora ya has configurado y probado la instalación de Dnsmasq como servidor DNS local en un servidor Debian. En los siguientes pasos, configurarás y asegurarás el Dnsmasq utilizando el cortafuegos UFW.
Configurar el cortafuegos UFW
Ahora configurarás el cortafuegos en tu Servidor DNS local. Asegurarás la instalación de Dnsmasq limitando el acceso al Servidor DNS a través del cortafuegos UFW.
Ejecuta el siguiente comando apt para instalar el cortafuegos UFW en tu sistema Debian.
sudo apt install ufw -y
Tras instalar UFW, ejecuta el siguiente comando para añadir el servicio OpenSSH y el puerto DNS 53 al cortafuegos UFW. En este ejemplo, especificarás el origen de la red que tiene permiso para acceder al servidor Dnsmasq, que es la red local con direcciones IP 192.168.5.0/24‘.
Asegúrate de cambiar las direcciones IP de la red local por la subred de tu red interna.
sudo ufw allow OpenSSH sudo ufw allow from 192.168.5.0/24 to any port 53 proto udp
A continuación, ejecuta el siguiente comando para iniciar y habilitar el cortafuegos UFW.
sudo ufw enable
Cuando te pregunte por la configuración, introduce y para confirmar y pulsa ENTER para continuar. Ahora el cortafuegos UFW debería estar funcionando y habilitado y se iniciará automáticamente al arrancar.
Por último, ejecuta el siguiente comando para verificar el estado del cortafuegos UFW. Deberías ver que el cortafuegos UFW está «activo» y que el servicio OpenSSH y el puerto DNS 53 se han añadido al cortafuegos.
sudo ufw status
Con el cortafuegos UFW configurado, ya puedes añadir clientes para que se conecten a tu servidor DNS local.
Configurar el cliente
En este paso, configurarás la máquina cliente con una distribución basada en Debian y el nombre de host«cliente«. Añadirás el Servidor DNS local Dnsmasq a la máquina cliente.
Ejecuta el siguiente comando para eliminar el enlace del archivo de configuración del resolver DNS ‘/etc/resolv.conf’. A continuación, crea una nueva configuración del resolver ‘/etc/resolv.conf’ utilizando el comando del editor nano que aparece a continuación.
sudo unlink /etc/resolv.conf sudo nano /etc/resolv.conf
Introduce la siguiente línea en el archivo. Asegúrate de cambiar la dirección IP por la dirección IP de tu servidor Dnsmasq.
nameserver 192.168.5.20
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, ejecuta el siguiente comando para instalar el paquete «dnsutils» en la máquina cliente.
sudo apt install dnsutils
Ahora ejecuta el siguiente comando dig para verificar el nombre de dominio«hwdomain.io«, que apuntará a la dirección IP del servidor Dnsmasq.
dig hwdomain.io
A continuación se muestra la salida que recibirás.
Para los subdominios, ejecuta el siguiente comando dig. Cada subdominio apuntará a la dirección IP definida en el archivo«/etc/hosts» del servidor Dnsmasq.
dig app1.hwdomain.io +short dig db1.hwdomain.io +short dig files.hwdomain.io +short
A continuación se muestra la salida similar que recibirás en la máquina cliente.
A continuación, también tendrás que asegurarte de que puedes acceder al nombre de dominio público a través del servidor DNS local Dnsmasq. Puedes verificarlo comprobando el nombre de dominio público como, por ejemplo,«github.com«.
dig github.com
Recibirás una salida similar a esta captura de pantalla – En la parte inferior de la salida, deberías ver que tu solicitud es respondida por el Servidor DNS local Dnsmasq que se ejecuta en‘192.168.5.20’ con el puerto por defecto’53‘. Teniendo esto en cuenta, te has conectado con éxito al nombre de dominio público a través del Servidor DNS local Dnsmasq.
Por último, comprobarás la caché DNS mediante los comandos «drill» y «dig». El comando ‘drill‘ forma parte del paquete‘ldnsutils‘, así que ejecuta el siguiente comando apt para instalarlo.
sudo apt install ldnsutils
Tras instalar ldnsutils, ejecuta el siguiente comando drill para verificar la caché DNS que has configurado en el servidor Dnsmasq.
drill duckduckgo.com | grep "Query time" drill duckduckgo.com | grep "Query time"
Recibirás una salida como la de la siguiente captura de pantalla: la primera vez que realizas la solicitud, el«Tiempo de consulta» es de 60 ms. Pero la segunda vez que solicitas el mismo dominio, el tiempo de consulta se reduce a 1 ms, lo que significa que la solicitud DNS se almacena en caché en el servidor DNS local Dnsmasq.
También puedes verificar la caché DNS mediante el comando dig con la opción«+stats«.
dig +noall +stats duckduckgo.com dig +noall +stats duckduckgo.com
Ya has terminado la configuración de la máquina cliente y has comprobado que el Servidor DNS local Dnsmas funciona correctamente, desde el nombre de dominio local y los subdominios que has definido mediante el archivo ‘/etc/hosts’, hasta la caché DNS que has habilitado en Dnsmasq.
Conclusión
En este tutorial, has creado tu propio Servidor DNS local con Dnsmasq. Has configurado tu propio Servidor DNS local para tu entorno local con Dnmasq en un servidor Debian 12. Además, has incluido la configuración de Dnsmasq con nombres de dominio y subdominios locales, has habilitado la caché DNS para obtener respuestas DNS recurrentes más rápidas y has habilitado el Servidor DHCP a través de Dnsmasq.
Por último, también has añadido y configurado la máquina cliente para que utilice el Servidor DNS local que has creado. Dentro de esto, también has aprendido a solucionar problemas del Servidor DNS con el comando dig y a configurar un resolvedor DNS en un sistema Linux.