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.

prepara el sistema

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.

instalar dnsmasq

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.

verificar dnsmasq

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.

dnsmasq config

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

verifica dnsmasq y configúralo

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.

verificar el servicio dnsmasq

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

pruebas con el comando dig

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.

verificar subdominios

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

instalar cortafuegos ufw

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.

configuración activar ufw

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

verificar ufw

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

configurar cliente

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.

verificar dominio desde cliente

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.

verificar subdominios

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.

asegúrate de que dns funciona

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

instalar ldns

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.

verificar caché dns

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.

También te podría gustar...