Table des matières

, , ,

mDNS

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:

  1. l’hôte A.local recherche l'adresse de Z.local
  2. Tous les hôtes mDNS voient passer la demande
  3. L’hôte Z.local répond avec son adresse IPz
  4. Tous les les hôtes mDNS voient passer la réponse.
  5. Tous les hôtes mDNS mettent leur cache respectif à jour avec la correspondance Z.localIPz

Le TLD .local

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.

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:

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 <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

Références

1)
Top Level Domain