DNS local · 13 min read · Sep 08, 2025

Cómo configurar 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 se puede utilizar como un reenvío DNS, servidor DNS recursivo y sistema de caché DNS. También carga contenidos DNS desde el archivo /etc/hosts, lo que te permite configurar nombres de dominio para nombres de host locales.

Dnsmasq está diseñado para ser ligero con una pequeña huella de memoria, adecuado para dispositivos de bajos recursos como enrutadores y cortafuegos. Dnsmasq se puede ejecutar 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 se puede utilizar para tu red local, añadiendo nombres de dominio locales, habilitando la caché DNS y habilitando el servidor DHCP a través de Dnsmasq. También aprenderás cómo configurar y añadir una máquina cliente para utilizar 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 solicitudes DNS serán más rápidas porque has habilitado la caché DNS.

Requisitos previos

Antes de comenzar, 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-server ‘ y la dirección IP 192.168.5.20.
  • Un usuario no root con privilegios de administrador sudo/root.

Para la máquina cliente, puedes usar cualquier distribución de Linux porque la configuración DNS es similar para cada distribución.

Preparando el sistema

En este paso, prepararás tu servidor Debian que se utilizará como el servidor DNS local. Actualizarás el índice de paquetes, detendrás y deshabilitarás el servicio ‘ systemd-resolved ‘, luego crearás y definirás la configuración del resolutor DNS estático a través del archivo ‘ /etc/resolv.conf ‘.

En el sistema Debian, el resolutor DNS es 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 deshabilitar el servicio ‘ systemd-resolved ‘.

Antes de comenzar, ejecuta el siguiente comando apt para actualizar y refrescar tu índice de paquetes Debian.

sudo apt update

A continuación, ejecuta el siguiente comando para detener y deshabilitar el servicio ‘ systemd-resolved ‘. En el sistema Debian, la configuración DNS es 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 configuración del resolutor DNS ‘/etc/resolv.conf’ a través del siguiente comando.

sudo unlink /etc/resolv.conf

Después de eso, crea un nuevo archivo de configuración del resolutor DNS ‘ /etc/resolv.conf ‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/resolv.conf

Agrega las siguientes líneas al archivo. Esto añadirá los DNS públicos de Cloudflare y Google como el resolutor 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.

preparar el sistema

Instalando y configurando Dnsmasq

En este paso, instalarás y configurarás el servidor DNS local utilizando Dnsmasq. Configurarás Dnsmasq para que se ejecute en el puerto DNS predeterminado 53 y la dirección IP interna ‘ 192.168.5.20 ‘. También definirás el nombre de dominio para el servicio Dnsmasq, habilitarás la caché DNS y, por último, habilitarás el servidor DHCP a través de Dnsmasq.

El paquete ‘ dnsmasq ‘ predeterminado está disponible en el repositorio de Debian. Ejecuta el siguiente comando apt para instalar el paquete Dnsmasq.

sudo apt install dnsmasq

Cuando se te pida, ingresa y para confirmar y presiona ENTER para continuar.

instalar dnsmasq

Después de que Dnsmasq esté instalado, ejecuta el siguiente comando systemctl para verificar el servicio ‘dnsmasq’ y asegurarte de que el servicio esté habilitado y en ejecución.

sudo systemctl is-enabled dnsmasq  
sudo systemctl status dnsmasq

Recibirás una salida similar a esta - El servicio dnsmasq está habilitado y se ejecutará automáticamente al iniciar. Y el estado actual del servicio dnsmasq está en ejecución.

verificar dnsmasq

Con Dnsmasq ejecutándose en tu sistema Debian, a continuación comenzarás la configuración de Dnsmasq a través del archivo ‘/etc/dnsmasq.conf ‘.

Para comenzar, ejecuta el siguiente comando para hacer una copia de seguridad del archivo de configuración predeterminado de Dnsmasq.

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

Agrega las siguientes líneas al archivo.

# dnsmasq ejecutándose en el puerto UDP 53  
# con dirección IP localhost y 192.168.5.20  
# y la interfaz de red eth1  
port=53  
listen-address=127.0.0.1,192.168.5.20  
interface=eth1  
  
# deshabilitar el reenvío de direcciones no enrutadas  
# deshabilitar el reenvío de nombres sin el dominio principal.com  
# agregar automáticamente la parte del dominio a nombres simples  
# deshabilitar que dnsmasq lea el archivo /etc/resolv.conf  
domain-needed  
bogus-priv  
expand-hosts  
no-resolv  
  
# servidor DNS ascendente para nombres de dominio no locales  
# utilizando DNS público de Cloudflare y Google  
server=1.1.1.1  
server=8.8.8.8  
  
# definir el dominio para dnsmasq  
domain=howtoforge.local  
address=/howtoforge.local/192.168.5.20  
  
# habilitar caché DNS y ajustar tamaño de caché  
cache-size=1000  
  
# habilitar DHCP a través de dnsmasq  
# definir archivo de base de datos de arrendamiento  
# hacer que el servidor DHCP sea autoritativo  
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.

Opciones detalladas que estarás utilizando para Dnsmasq:

  • port: qué puerto utilizarás para ejecutar Dnsmasq.
  • listen-address: qué dirección IP utilizarás para ejecutar Dnsmasq. Puedes usar múltiples direcciones IP.
  • interface: qué interfaz se vinculará y ejecutará Dnsmasq.
  • domain-needed: deshabilitar el reenvío de nombres sin la dirección del dominio principal. Puedes acceder como ‘ mysql1 ‘ host a menos que des una dirección completa con el dominio local como ‘ mysql1.howtoforge.local ‘.
  • bogus-priv: deshabilitar el reenvío para direcciones no enrutadas.
  • expand-hosts: agregar automáticamente la parte del dominio local a nombres simples.
  • no-resolv: ignorar el archivo ‘/etc/resolv.conf’ en el servidor.
  • server: definir el servidor DNS ascendente que utilizarás para direcciones o dominios no locales. Este ejemplo utiliza el servidor DNS público de Cloudflare y Google.
  • domain: definir el nombre de dominio para el servidor Dnsmasq. En este ejemplo, el servidor Dnsmasq obtendrá el dominio local howtoforge.local.
  • address: definir qué dirección IP para el nombre de dominio en Dnsmasq. En este ejemplo, el dominio howtoforge.local se resolverá a la dirección IP 192.168.5.20.
  • cache-size: habilitar caché DNS en Dnsmasq. Asegúrate de ajustar el tamaño, lo que aumenta el rendimiento y la velocidad.
  • dhcp-range: habilitar el servidor DHCP a través de Dnsmasq. Ajusta el rango de direcciones IP para tu red y el tiempo de arrendamiento.
  • dhcp-leasefile: definir el archivo que se utilizará para almacenar el arrendamiento DHCP.
  • dhcp-authoritative: hacer que el servidor DHCP sea autoritativo.

configuración dnsmasq

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 ‘ howtoforge.local ‘.

sudo nano /etc/hosts

Agrega las siguientes líneas al archivo. En este ejemplo, definirás los subdominios app1, db1 y files. El dominio raíz para estos subdominios es el propio servidor Dnsmasq ‘ howtoforge.local ‘.

Con las siguientes líneas, ‘ app1.howtoforge.local ‘ se resolverá a la dirección IP ‘ 192.168.5.10 ‘, el subdominio ‘ db1.howtoforge.local ‘ se apuntará a la dirección IP del servidor ‘ 192.168.5.25 ‘, y el subdominio ‘files.howtoforge.local ‘ se 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 agrega la dirección IP del servidor Dnsmasq como ‘ nameserver ‘.

sudo nano /etc/resolv.conf

Agrega las siguientes líneas en la parte superior del archivo. Asegúrate de cambiar la dirección IP por la dirección IP de tu 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’ a continuación para verificar la configuración de Dnsmasq y asegurarte de que tienes el formato de configuración correcto. Deberías recibir una salida como ‘ dnsmasq - syntax check OK ‘.

sudo dnsmasq --test

Por último, ejecuta el siguiente comando systemctl para reiniciar el servicio ‘ dnsmasq’ y aplicar los cambios.

sudo systemctl restart dnsmasq

verificar dnsmasq y configurarlo

En este punto, has terminado la configuración del servidor DNS local a través de Dnsmasq en el sistema Debian. También has configurado el nombre de dominio local y los subdominios, habilitado la caché DNS y habilitado el servidor DHCP a través de Dnsmasq.

En los siguientes pasos, verificarás la instalación y configuración de tu servidor Dnsmasq.

Verificando la instalación de Dnsmasq

En este paso, verificarás la instalación de Dnsmasq comprobando el servicio Dnsmasq y el puerto LISTEN en tu sistema. Luego, verificarás el nombre de dominio local y los subdominios que has configurado a través del archivo ‘/etc/hosts’.

Ejecuta el siguiente comando para asegurarte de que el servicio Dnsmasq esté ejecutándose en el puerto 53. Luego, verifica el estado del servicio Dnsmasq a través del comando systemctl.

ss -tulpn | grep 53  
sudo systemctl status dnsmasq

Recibirás una salida similar a esta - El servicio Dnsmasq se está ejecutando en el puerto predeterminado 53 y está habilitado y se ejecutará automáticamente al iniciar.

verificar servicio dnsmasq

A continuación, verificarás el nombre de dominio y los subdominios que has configurado en Dnsmasq a través del archivo ‘ /etc/hosts ‘. Pero antes de eso, 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

Ingresa y cuando se te pida y presiona ENTER para proceder con la instalación.

Después de que el ‘ dnsutils ‘ esté instalado, ejecuta el siguiente comando dig para verificar el nombre de dominio y los subdominios que has configurado.

Verifica el dominio principal de Dnsmasq ‘ howtoforge.local ‘, que está apuntado a la dirección IP del servidor Dnsmasq ‘192.168.5.20’.

dig howtoforge.local

prueba con el comando dig

Verifica los subdominios que has definido a través del archivo ‘/etc/hosts’ mediante el siguiente comando dig.

dig app1.howtoforge.local +short  
dig db1.howtoforge.local +short  
dig files.howtoforge.local +short

El subdominio ‘ app1.howtoforge.local ‘ está apuntado a la dirección IP ‘ 192.168.5.10 ‘, el subdominio ‘ db1.howtoforge.local ‘ está apuntado a la dirección IP ‘ 192.168.5.25 ‘, y por último ‘ files.howtoforge.local ‘ está apuntado a la dirección IP ‘ 192.168.5.50 ‘.

A continuación, recibirás una salida similar.

verificar sub dominios

Ahora, has configurado y probado la instalación de Dnsmasq como el servidor DNS local en un servidor Debian. En los siguientes pasos, configurarás y asegurarás Dnsmasq utilizando el cortafuegos UFW.

Configurando 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

Después de instalar UFW, ejecuta el siguiente comando para agregar el servicio OpenSSH y el puerto DNS 53 al cortafuegos UFW. En este ejemplo, especificarás la fuente de la red que está permitida 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 tu subred 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 se te pregunte por la configuración, ingresa y para confirmar y presiona ENTER para proceder. Y el cortafuegos UFW ahora debería estar en funcionamiento y habilitado y se iniciará automáticamente al arrancar.

configurar habilitar ufw

Por último, ejecuta el siguiente comando para verificar el estado del cortafuegos UFW. Deberías ver que el cortafuegos UFW está ‘activo’ y el servicio OpenSSH y el puerto DNS 53 se han añadido al cortafuegos.

sudo ufw status

verificar ufw

Con el cortafuegos UFW configurado, ahora puedes añadir clientes para conectarse a tu servidor DNS local.

Configurando el cliente

En este paso, configurarás la máquina cliente con una distribución basada en Debian y el nombre de host ‘ client ‘. 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 resolutor DNS ‘/etc/resolv.conf’. Luego, crea una nueva configuración de resolutor ‘ /etc/resolv.conf ‘ utilizando el comando del editor nano a continuación.

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

Ingresa 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 comando dig a continuación para verificar el nombre de dominio ‘ howtoforge.local ‘, que estará apuntado a la dirección IP del servidor Dnsmasq.

dig howtoforge.local

A continuación, recibirás la salida.

verificar dominio desde el cliente

Para los subdominios, ejecuta el comando dig a continuación. Cada subdominio estará apuntado a la dirección IP definida en el archivo ‘ /etc/hosts ‘ en el servidor Dnsmasq.

dig app1.howtoforge.local +short  
dig db1.howtoforge.local +short  
dig files.howtoforge.local +short

A continuación, recibirás una salida similar en la máquina cliente.

verificar sub dominios

A continuación, también necesitarás asegurarte de que puedes acceder al nombre de dominio público a través del servidor DNS local Dnsmasq. Puedes verificar esto comprobando el nombre de dominio público como ‘ 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 predeterminado ‘ 53 ‘. Con esto en mente, te has conectado exitosamente al nombre de dominio público a través del servidor DNS local Dnsmasq.

asegurar que dns esté funcionando

Por último, verificarás la caché DNS a través de los comandos ‘drill’ y ‘dig’. El comando ‘ drill ‘ es parte del paquete ‘ ldnsutils ‘, así que ejecuta el siguiente comando apt para instalarlo.

sudo apt install ldnsutils

instalar ldns

Después de 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 siguiente captura de pantalla - en la primera vez que haces la solicitud, el ‘ Query time ‘ es 60ms. 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 está en caché en el servidor DNS local Dnsmasq.

verificar caché dns

También puedes verificar la caché DNS a través del comando dig con la opción ‘ +stats ‘.

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

Ahora has terminado la configuración de la máquina cliente y has verificado que el servidor DNS local Dnsmasq está completamente operativo, desde el nombre de dominio local y los subdominios que has definido a través del 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, esto incluyó la configuración de Dnsmasq con nombres de dominio locales y subdominios, habilitando la caché DNS para obtener respuestas DNS recurrentes más rápidas, y habilitando el servidor DHCP a través de Dnsmasq.

Por último, también has añadido y configurado la máquina cliente para utilizar el servidor DNS local que has creado. Dentro de esto, también has aprendido cómo solucionar problemas del servidor DNS con el comando dig y cómo configurar un resolutor DNS en un sistema Linux.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.