Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org
Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.
Si se requiere un servidor de DNS fácil de administrar, ligero y rápido, la mejor alternativa a BIND es DNSMasq. Es la herramienta ideal para proporcionar resolución de nombres en redes locales y entornos de pruebas, como los que se utilizan en cursos prácticos de otros servicios, por ejemplo, para configurar nombres de servidores virtuales al practicar con Nginx.
DNSMasq es un servidor DNS ligero y fácil de configurar. Está diseñado para proporcionar servicio de DNS y ―opcionalmente― servidor DHCP a una red de área local. Puede proporcionar los nombres de máquinas locales que están ausentes en el servidor DNS global. El servidor DHCP se integra con el servidor DNS y permite que las máquinas con direcciones asignadas por DHCP aparezcan en el DNS con nombres configurados en cada anfitrión o en un archivo de configuración central. DNSMasq admite concesiones de DHCP estáticas y dinámicas y BOOTP para el arranque en red de máquinas sin disco.
Puede instalar y configurar DNSMasq en sólo unos minutos. Sin modificar archivo alguno podrá disponer de un servidor DNS completamente funcional para el anfitrión local. Nota: Los mandatos en las siguientes secciones asumen que está trabajando como el usuario root. Si utiliza un usuario con privilegios en el grupo wheel, anteponga sudo a cada mandato o cambie a root con su -l antes de comenzar.
El siguiente procedimiento es válido para distribuciones modernas como AlmaLinux, Rocky Linux y ALDOS, distinguiéndose únicamente en los mandatos para gestionar el servicio y el cortafuegos.
Ejecute lo siguiente para instalar DNSMasq junto con el conjunto de herramientas estándar para hacer validaciones. En ALDOS, el gestor de paquetes predeterminado es yum.
dnf -y install dnsmasq bind-utils
En distribuciones con systemd (AlmaLinux, Rocky Linux): Ejecute lo siguiente para habilitar e iniciar el servicio:
systemctl enable --now dnsmasq
En ALDOS (con SysVinit): El servicio se gestiona con el guion tradicional. Para habilitarlo en los niveles de ejecución predeterminados e iniciarlo:
/sbin/chkconfig dnsmasq on
/sbin/service dnsmasq start
Ejecute lo siguiente para validar el funcionamiento básico:
host www.google.com 127.0.0.1
La salida debe ser similar a la siguiente:
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
www.google.com has address 192.178.52.196
www.google.com has IPv6 address 2607:f8b0:4012:81f::2004
El archivo de configuración principal de DNSMasq es /etc/dnsmasq.conf. Se recomienda evitar modificarlo directamente para facilitar las actualizaciones. En su lugar, cree archivos con cualquier nombre y extensión *.conf dentro del directorio /etc/dnsmasq.d/.
Defina qué interfaz de red y dirección IP utilizará para el funcionamiento de DNSMasq. Adapte el nombre de la interfaz (eth0, enp0s3) según el esquema de nomenclatura de su sistema.
ip addr list
Genere un nuevo archivo de configuración, por ejemplo /etc/dnsmasq.d/misopciones.conf:
vim /etc/dnsmasq.d/misopciones.conf
Considerando que en el siguiente ejemplo se utilizarán la interfaz de red con el nombre enp0s3 (o eth0 en ALDOS) y la dirección IP 192.168.100.121, añada el siguiente contenido:
interface=lo,enp0s3
listen-address=127.0.0.1,192.168.100.121,::1
port=53
resolv-file=/etc/resolv.dnsmasq.conf
Guarde los cambios y salga del editor de texto.
DNSMasq puede hacer uso automáticamente de los servidores DNS listados en /etc/resolv.conf para reenviar consultas. Sin embargo, este archivo suele ser gestionado por NetworkManager y tiene una capacidad limitada. Es preferible generar un archivo dedicado, como /etc/resolv.dnsmasq.conf, donde podrá añadir un número ilimitado de servidores DNS externos:
vim /etc/resolv.dnsmasq.conf
Añada el siguiente contenido, asumiendo que 192.168.100.1 es la dirección del enrutador local y añadiendo los servidores DNS externos que prefiera:
nameserver 192.168.100.1
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1
Guarde los cambios y salga del editor de texto.
Reinicie el servicio para aplicar los cambios:
Con systemd:
systemctl restart dnsmasq
Con SysVinit (ALDOS):
/sbin/service dnsmasq restart
Todos los servicios de DNS utilizan los puertos 53/TCP y 53/UDP. Configure el muro cortafuegos para permitir el tráfico utilizando firewall-cmd, la herramienta moderna y predeterminada[citation:1][citation:8].
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
Ejecute nuevamente la validación para confirmar el funcionamiento:
host www.google.com 127.0.0.1
Para que el sistema utilice a DNSMasq como su servidor DNS principal, configure la interfaz de red. El método más limpio y persistente es a través de NetworkManager.
Asumiendo que el nombre de la conexión de NetworkManager para su interfaz principal es enp0s3 (o eth0), puede editarla con nmcli:
nmcli connection modify "enp0s3" ipv4.dns "127.0.0.1"
nmcli connection up "enp0s3"
Como método alternativo y temporal, puede editar directamente el archivo /etc/resolv.conf:
vim /etc/resolv.conf
Defina 127.0.0.1 como único servidor DNS:
# Generated by NetworkManager
search alcancelibre.org
nameserver 127.0.0.1
Advertencia: Este cambio en /etc/resolv.conf puede ser sobrescrito por NetworkManager tras un reinicio o cambio de conexión.
Valide que el sistema ahora resuelve los nombres a través de DNSMasq:
host www.google.com
Una de las funciones principales de DNSMasq es resolver nombres locales. Para ello, simplemente añádalos al archivo /etc/hosts.
vim /etc/hosts
Añada uno o más anfitriones con las direcciones IP que necesite. Ejemplos:
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.100.6 blog.midominio.net
192.168.100.6 prueba1.midominio.net
192.168.100.6 dev1.midominio.net
Guarde los cambios, reinicie el servicio dnsmasq y valide la resolución:
systemctl restart dnsmasq # o /sbin/service dnsmasq restart en ALDOS
host blog.midominio.net
La salida debe confirmar la dirección IP:
blog.midominio.net has address 192.168.100.6
DNSMasq es capaz de servir una zona DNS local completa con registros avanzados (A, MX, TXT, SRV, etc.), lo que es ideal para entornos de desarrollo y pruebas, como los utilizados en cursos de Nginx. Su simplicidad radica en que la mayoría de la configuración reside en archivos de texto plano.
Para mantener coherencia en los ejemplos, utilizaremos el dominio ejemplo.lan. Cree un nuevo archivo de configuración, por ejemplo /etc/dnsmasq.d/avanzado.conf.
vim /etc/dnsmasq.d/avanzado.conf
Añada la siguiente configuración base, que incluye directivas de seguridad y eficiencia muy útiles:
# Opciones de comportamiento y seguridad
domain-needed # No reenvía peticiones para nombres sin punto.
bogus-priv # No reenvía peticiones inversas para direcciones privadas.
strict-order # Usa los servidores DNS en el orden listado en 'resolv-file'.
# Configuración básica de red
port=53
resolv-file=/etc/resolv.dnsmasq.conf
# Definición de la zona local
local=/ejemplo.lan/
domain=ejemplo.lan
expand-hosts # Añade automáticamente el dominio a los nombres en /etc/hosts.
1. Registros A y CNAME (direcciones y alias):
La forma más sencilla es mediante el archivo /etc/hosts. DNSMasq leerá automáticamente este archivo si tiene la opción expand-hosts.
vim /etc/hosts
Añada líneas para los servidores de su zona ejemplo.lan:
192.168.100.10 servidor1.ejemplo.lan
192.168.100.20 www.ejemplo.lan
192.168.100.20 nginx.ejemplo.lan # Alias (CNAME funcional)
192.168.100.30 correo.ejemplo.lan
2. Registros MX (intercambio de correo): Defina el servidor de correo para el dominio directamente en el archivo de configuración de DNSMasq.
vim /etc/dnsmasq.d/avanzado.conf
Añada la línea (el número 5 es la prioridad, menor es más preferente):
mx-host=ejemplo.lan,correo.ejemplo.lan,5
3. Registros TXT (texto, usado por SPF, DKIM, etc.): Puede definir registros TXT para políticas de correo u otra información.
txt-record=ejemplo.lan,"v=spf1 a mx ~all"
txt-record=correo.ejemplo.lan,"v=spf1 a ~all"
4. Registros SRV (servicios, para LDAP, SIP, etc.):
Útiles para indicar qué servidor ofrece un servicio específico. Ejemplo para un servidor web (_http._tcp):
srv-host=_http._tcp.ejemplo.lan,www.ejemplo.lan,80
srv-host=_https._tcp.ejemplo.lan,www.ejemplo.lan,443
5. Registros SOA y NS (autoridad de zona):
DNSMasq genera automáticamente respuestas SOA y NS creíbles para las zonas configuradas con local=/. No es necesario definirlos manualmente para su funcionamiento básico. Para mayor control en una configuración de autoridad avanzada, puede usar las directivas auth-zone, auth-soa y auth-server.
Después de añadir toda la configuración, reinicie el servicio y pruebe los diferentes registros:
systemctl restart dnsmasq # o /sbin/service dnsmasq restart
# Probar registro A
host servidor1.ejemplo.lan
# Probar resolución MX
host -t mx ejemplo.lan
# Probar registro TXT
host -t txt ejemplo.lan
# Probar registro SRV (puede requerir herramientas como 'dig')
dig SRV _http._tcp.ejemplo.lan
Para que DNSMasq se reinicie automáticamente cada vez que una interfaz de red se active (útil en portátiles o tras suspender el sistema), puede utilizar los scripts dispatcher de NetworkManager[citation:4][citation:7].
Cree o edite el archivo /usr/lib/NetworkManager/dispatcher.d/10-dns-masq.
vim /usr/lib/NetworkManager/dispatcher.d/10-dns-masq
Añada el siguiente contenido. El script reinicia DNSMasq sólo cuando una interfaz sube (up).
#!/bin/sh
INTERFACE="${1}"
ACTION="${2}"
if [ "${ACTION}" = "up" ]; then
systemctl try-restart dnsmasq
fi
Establezca los permisos de ejecución:
chmod +x /usr/lib/NetworkManager/dispatcher.d/10-dns-masq
Cree o edite el archivo /etc/NetworkManager/dispatcher.d/10-dnsmasq.
vim /etc/NetworkManager/dispatcher.d/10-dnsmasq
Añada el siguiente contenido:
#!/bin/sh
INTERFACE="${1}"
ACTION="${2}"
if [ "${ACTION}" = "up" ]; then
/sbin/service dnsmasq restart || :
fi
Establezca los permisos de ejecución:
chmod +x /etc/NetworkManager/dispatcher.d/10-dnsmasq
DNSMasq es una herramienta excelente por su simplicidad y velocidad, pero es crucial comprender su alcance para emplearlo en el contexto correcto.
/etc/dnsmasq.d/, /etc/hosts) al segundo servidor y mantenerlos sincronizados, ya que DNSMasq carece de mecanismos de replicación automática integrados.Estas características lo convierten en la opción ideal para impartir conceptos de DNS en un curso práctico, permitiendo enfocarse en la funcionalidad sin la sobrecarga administrativa de soluciones más complejas.