mDNS casero
Multicast DNS (mDNS) es un protocolo de networking que se diseñó para resolver nombres de host desde direcciones IP dentro de redes pequeñas, sin necesidad de un DNS Server local. No necesita configuración (zero-configuration) y utiliza las mismas interfaces de programación, formatos de paquetes y semántica operativa que el Sistema de Nombres de Dominio (DNS) unicast.
Se diseñó para funcionar como un protocolo independiente o compatible con servidores DNS estándar. mDNS puede funcionar junto con DNS Service Discovery (DNS-SD), una técnica de red complementaria de configuración cero especificada por separado en la RFC 6763.
Introducción
Si no necesita configuración, ¿cuál es el propósito de este apunte?. Explicar qué es, entender cómo funciona y porqué algunos equipos de tu casa “ven” a otros, porqué se descubren, el impacto que tiene en herramientas como Home Assistant y la domótica, y por último, para explicar cómo “ver” nosotros lo que está pasando por nuestra red, ser capaces de monitorizar mDNS.
¿Qué es mDNS? Utiliza paquetes IP multicast User Datagram Protocol (UDP) y está implementado por los paquetes de software Bonjour de Apple y Avahi de código abierto, incluidos en la mayoría de las distribuciones de Linux. Aunque la implementación de Windows 10 se limitaba a descubrir impresoras en red, las versiones posteriores también resolvían nombres de host[2].
Veamos cómo hacer el despliegue y monitorización de mDNS con Home Assistant y Grafana. Ten en cuenta que solo voy a monitorizar una única vlan de mi casa, no necesito más. Si tuvieses que monitorizar mas vlan’s tendrías que configurar un mDNS reflector en tu red. Eso no lo cubro en este apunte. Lo primero que voy a configurar Avahi.
Avahi
Avahi es un servicio de código abierto para Linux que implementa mDNS (Multicast DNS) y DNS-SD (DNS Service Discovery). Es la alternativa en Linux a Bonjour, el protocolo de Apple para descubrimiento de dispositivos. Lo instalo en mi router principal. Actualizo el Sistema Opertivo, aprovecho para rearrancarlo y lo instalo
[root]@cortafuegix:~# apt update && apt upgrade -y && apt full-upgrade -y
[root]@cortafuegix:~# apt autoremove -y --purge
[root]@cortafuegix:~# systemctl reboot -f
:
[root]@cortafuegix:~# apt install avahi-daemon avahi-utils
Configuro Avahi para la vlan 100, edito el archivo de configuración:
[root]@cortafuegix:~# nano /etc/avahi/avahi-daemon.conf
Me aseguro de tener estas líneas
[server]
allow-interfaces=lo,vlan100
[reflector]
enable-reflector=no
Reinicio Avahi para aplicar los cambios:
[root]@cortafuegix:~# systemctl restart avahi-daemon
[root]@cortafuegix:~# systemctl status avahi-daemon
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2025-03-08 09:31:16 CET; 10s ago
TriggeredBy: ● avahi-daemon.socket
Main PID: 3652 (avahi-daemon)
Status: "avahi-daemon 0.8 starting up."
Tasks: 2 (limit: 3430)
Memory: 1004.0K
CPU: 12ms
CGroup: /system.slice/avahi-daemon.service
├─3652 "avahi-daemon: running [cortafuegix.local]"
└─3653 "avahi-daemon: chroot helper"
mar 08 09:31:16 cortafuegix avahi-daemon[3652]: No service file found in /etc/avahi/services.
mar 08 09:31:16 cortafuegix avahi-daemon[3652]: Joining mDNS multicast group on interface vlan100.IPv4 with address 192.168.100.1.
mar 08 09:31:16 cortafuegix systemd[1]: Started Avahi mDNS/DNS-SD Stack.
mar 08 09:31:16 cortafuegix avahi-daemon[3652]: New relevant interface vlan100.IPv4 for mDNS.
mar 08 09:31:16 cortafuegix avahi-daemon[3652]: Joining mDNS multicast group on interface lo.IPv4 with address 127.0.0.1.
mar 08 09:31:16 cortafuegix avahi-daemon[3652]: New relevant interface lo.IPv4 for mDNS.
mar 08 09:31:16 cortafuegix avahi-daemon[3652]: Network interface enumeration completed.
mar 08 09:31:16 cortafuegix avahi-daemon[3652]: Registering new address record for 192.168.100.1 on vlan100.IPv4.
mar 08 09:31:16 cortafuegix avahi-daemon[3652]: Registering new address record for 127.0.0.1 on lo.IPv4.
mar 08 09:31:17 cortafuegix avahi-daemon[3652]: Server startup complete. Host name is cortafuegix.local. Local service cookie is 108695492.
Home Assistant
Home Assistant (HA) es una plataforma de automatización del hogar de código abierto diseñada para centralizar el control de dispositivos inteligentes. Permite integrar una amplia variedad de dispositivos y protocolos (como Zigbee, Z-Wave, MQTT, HomeKit, y más) en una única interfaz, lo que facilita la gestión de luces, sensores, cámaras, termostatos y otros dispositivos IoT. Su arquitectura modular y su compatibilidad con más de 2,000 integraciones lo convierten en una solución flexible tanto para usuarios domésticos como para entusiastas de la automatización. Además, Home Assistant puede ejecutarse en una Raspberry Pi, un servidor Linux, o como una máquina virtual en Proxmox o Docker.
HA trae activado y soporta mDNS/Bonjour de forma nativa, así que lo único que hay que hacer es asegurarse de que le ves a él y que él ve a otros en la red.
- Desde un navegado deberías poder conectarte con http://homeassistant.local:8123/, eso significa que su implementación de mDNS está funcionando.
- Ve a Ajustes → Dispositivos y Servicios. Si descubre algún dispositivo nuevo aparecerá ahi.
Puedes comprobar que se ve desde el Linux, con este comando.
$ avahi-browse -alr
Si tienes un Mac, instálate la App gratuita Discovery - DNS-SD Browser, que para mi es lo mejor que existe. Muestra todos los servicios Bonjour disponibles en la red local. Para ver y depurar desarrollos propios es fantástica. Detecta ordenadores conectados a tu red o simplemente para saber qué servicios están disponibles. Perfecto para administradores de red o desarrolladores.
Monitorizar mDNS con Grafana
Grafana es una plataforma de visualización de datos y monitorización potentísima que permite crear paneles interactivos a partir de diversas fuentes de datos, como Prometheus, InfluxDB, MySQL y más. Es ampliamente utilizado en entornos de observabilidad y análisis de rendimiento, permitiendo representar métricas en gráficos dinámicos y personalizables. Su capacidad para configurar alertas y explorar datos en tiempo real lo hace ideal para monitorear infraestructura de TI, dispositivos IoT y redes. En mi caso, en el contexto de Home Assistant, uso Grafana junto con InfluxDB para visualizar datos históricos de sensores y eventos domésticos.
Para visualizar los dispositivos y servicios mDNS de la red casera lo que voy a hacer es usar la herramienta mdns-scan
en Linux como capturador y le enviaré los datos cada cierto tiempo a InfluxDB.
- Capturo las consultas mDNS con
mdns-scan
(desde el linux donde instalé avahi) - Guardos los datos en un archivo de log.
- Enviao los datos a InfluxDB.
Instalo mdns-scan
con
[root]@cortafuegix:~# apt install mdns-scan
Capturo y almaceno los datos. Primero voy a hacer un escaneo manual, este comando puede tardar en terminar
mdns-scan | tee -a /var/log/mdns.log
Para automatizar el escaneo cada 5 minutos, agrega una tarea en cron:
crontab -e
Añade esta línea:
*/5 * * * * mdns-scan | tee -a /var/log/mdns.log
Enviar datos a Prometheus (si lo usas)
Si utilizas Prometheus, puedes configurar un exportador personalizado para exponer los datos de mDNS vía HTTP y que Prometheus los recopile.
Si usas InfluxDB, los logs pueden enviarse directamente a un bucket de InfluxDB.
Visualizar en Grafana
- Abre Grafana:
http://tu-ip-grafana:3000
. - Agrega Prometheus o InfluxDB como fuente de datos.
- Crea un dashboard con:
- Un panel de tabla para mostrar los servicios mDNS activos.
- Un panel de series temporales para rastrear la disponibilidad de los servicios mDNS en el tiempo.
Para instalarse Golang en linux, mira la última versión en su sitio web, agrega /usr/local/go/bin
el PATH (un ejemplo de mi ~/.zshrc.
# Desde root
wget https://go.dev/dl/go1.24.1.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.24.1.linux-amd64.tar.gz
Descargo el proyecto FOSS go-mdns-scan (Alternativa escrita en Go)
🎯 luis@cortafuegix:~ ❯ git clone https://github.com/brutella/dnssd.git
:
🎯 luis@cortafuegix:~ ❯ cd dnssd
🎯 luis@cortafuegix:dnssd (master) ❯ go build
:
Conclusión
- ✅ Avahi configurado en VLAN100 para manejar mDNS.
- ✅ Home Assistant detectando dispositivos automáticamente.
- ✅ Grafana monitoreando consultas y servicios mDNS.