Initialement développé par Apple via son protocole Rendez-vous
ou Bonjour
, c'est aujourd'hui un standard:
Il existe plusieurs implémentations:
avahi-daemon est le processus principal en charge des traitements liés au protocole. Il / Lu'utilisateur peut interagir avec le service via la ligne de commande ou via D-Bus.
mDNS utilise la même syntaxe que DNS (commandes et structure des requêtes) mais ne nécessite pas qu'un serveur DNS soit paramétré. Pour la résolution des noms, les machines créent leurs propres enregistrements DNS dans un cache local.
Comme aucun serveur n'est paramétré, les clients utilisent le port 5353/TCP avec les adresses de diffusion multicast:
Tous les hôtes voient passer la demande et le client ayant le nom recherché répond à la demande avec un message multicast contenant son adresse IP. Puisque le message est échangé en multicast, tous les autres machines peuvent mettre à jour leur cache respectif.
Le processus de résolution se résume alors ainsi:
A.local
recherche l'adresse de Z.local
Z.local
répond avec son adresse IPz
Z.local
→ IPz
Tout nom DNS a
En général, seuls les noms d’hôtes avec le TLD1) .local
peuvent être utilisés avec le Multicast DNS. Cela limite cette forme de résolution de noms aux réseaux locaux. Les noms d’hôtes avec d’autres domaines de premier niveau, tels que .fr
ou .com
ne sont pas traités par le mDNS. Les adresses Web ne peuvent pas être résolues de cette manière.
Comme le standard DNS, mDNS supporte les enregistrements de type A, AAAA ainsi que le type SRV. Grace à cela, mDNS peut être utilisé pour trouver (résoudre) des hôtes et de services sur le réseau local.
Exemple d’enregistrement de type SRV:
_service._proto.name. TTL class SRV priority weight port target. _sip._tcp.example.com. 86400 IN SRV 0 5 5060 sipserver.example.com.
le CLI avahi-resolve permet de lancer des requêtes mDNS depuis la ligne de commande:
avahi-resolve --name my-host.local
Les services peuvent être découverts en utilisant la commande avahi-browse
# Syntaxe # avahi-browse [options] service-type
Quelques options usuelles:
Pour rechercher et résoudre tous les serveurs CoAP:
avahi-browse -rt _coap._udp
L'utilitaire mdns-scan permet également d'identifier les services publiés sur le réseau local.
La commande avahi-publish-service permet de publier un service:
# Syntaxe # avahi-publish-service SERVICE-NAME _APPLICATION- PROTOCOL._TRANPOSRT-PROTOCOL PORT “DESCRIPTION” --sub SUBPROTOCOL # Exemple
De nombreuses informations peuvent être collectées dans le cas ou le service mDNS est actif sur une interface exposée sur Internet. mDNS ne doit être utilisé que sur un réseau de confiance. Vérifier que mDNS n'est pas actif sur une interface publique (commande à exécuter depuis une session root):
nmap -Pn -sU -p5353 --script=dns-service-discovery <server-public-IP>
A tester, nettoyage du cache par envoi d'un signal kill au daemon avahi
# a adapter a systemd avahi-daemon --kill
Avahi copie les enregistrements en cache dans le journal syslog lorsqu'il reçoit le signal SIGUSR1:
systemctl kill -s USR1 avahi-daemon.service