{{tag>netadmin mdns zeroconf avahi}} ====== mDNS ====== Initialement développé par Apple via son protocole ''Rendez-vous'' ou ''Bonjour'', c'est aujourd'hui un standard: * [[ https://tools.ietf.org/html/rfc6762 | RFC6762 ]] * [[ https://tools.ietf.org/html/rfc6763 | RFC6763 ]] Il existe plusieurs implémentations: * avahi pour les systèmes GNU/Linux * jmDNS implémentation du protocole en Java * Bonjour pour MACOS et Windows 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: * IPv4: 224.0.0.251 * IPv6: ff02::fb 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: - l’hôte ''A.local'' recherche l'adresse de ''Z.local'' - Tous les hôtes mDNS voient passer la demande - L’hôte ''Z.local'' répond avec son adresse ''IPz'' - Tous les les hôtes mDNS voient passer la réponse. - Tous les hôtes mDNS mettent leur cache respectif à jour avec la correspondance ''Z.local'' -> ''IPz'' ===== Le TLD .local ===== Tout nom DNS a En général, seuls les noms d’hôtes avec le TLD((Top Level Domain)) **''.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. ===== Les enregistrements mDNS ===== 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. ==== Découverte d’hôtes via mDNS ==== le CLI **avahi-resolve** permet de lancer des requêtes mDNS depuis la ligne de commande: avahi-resolve --name my-host.local ==== Découverte de services via mDNS ==== Les services peuvent être découverts en utilisant la commande avahi-browse # Syntaxe # avahi-browse [options] service-type Quelques options usuelles: * **-a** tous types de services * **-r** résoudre automatiquement les services * **-p** affiche la sortie * **-t** se termine après une passe de découverte. Par défaut la commande reste en écoute et en recherche active du service. 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. ===== Publier un service ===== 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 ===== Sécurité ===== 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 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 ===== Références ===== * https://stevessmarthomeguide.com/multicast-dns/ * https://www.ionos.fr/digitalguide/serveur/know-how/multicast-dns/ * https://askubuntu.com/questions/972630/what-is-mdns-is-it-possible-to-make-mdns-query-without-mdns-service-running