Prima di parlare di mDNS, è utile capire cos'è il DNS (Domain Name System). DNS è un protocollo di rete che traduce i nomi di dominio (come www.google.com) in indirizzi IP (come 192.168.1.1) che i computer utilizzano per essere identificati e comunicare tra di loro. In altre parole, il DNS agisce come una "rubrica telefonica" dove noi digitiamo un nome facile da ricordare, e il server DNS ci fornisce l'indirizzo IP corretto che corrisponde a quel nome.
Il tutto avviene in modo completamente trasparente per noi utenti finali. Ogni volta che digitiamo un dominio nel nostro browser, come ad esempio google.com, il nostro router contatta automaticamente un server DNS per nostro conto. Questo server DNS, che possiamo immaginare come una rubrica di tutti i domini, traduce il nome di dominio che abbiamo inserito nel corrispondente indirizzo IP. Solo a quel punto possiamo raggiungere la destinazione finale, ovvero l'host da gestire o consultare. Questo accade perché, come abbiamo detto, i dispositivi comunicano tra loro e sono raggiungibili solo tramite indirizzi IP. Il DNS è stato inventato proprio per semplificarci la vita, mascherando questi complessi indirizzi numerici con nomi più facili da leggere e ricordare, molto più simili al nostro linguaggio.
Proviamo a fare qualche analogia per comprendere meglio il DNS
Prima analogia
Immaginiamo di voler contattare qualcuno che si trova nel suo luogo di lavoro (la rete locale o pubblica), ma invece di ricordarci il numero di telefono del suo ufficio (l'indirizzo IP), ricordiamo solo il suo nome (nome host). Quindi, chiamiamo il centralino o chiediamo ad una persona all'ingresso (il server DNS), dicendo: "Salve, potrebbe collegarmi con Mario Rossi?". Il centralino, che sa esattamente quale sia l'interno (indirizzo IP) di Mario, smisterà la chiamata verso di lui.
Seconda analogia
Immaginiamo di voler chiamare qualcuno, ma invece di ricordarci il suo numero di telefono (l'indirizzo IP), ci ricordiamo solo il suo nome. Quando vogliamo contattarlo, apriamo la nostra "rubrica" (il server DNS) o un elenco telefonico (per chi preferisce un approccio più vintage) per trovare il numero associato a quel nome. Il DNS funziona in modo molto simile: noi utenti ricordiamo il nome del sito web (come google.com), mentre il server DNS (la rubrica) si occupa di tradurre quel nome nel corrispondente indirizzo IP.
Un server DNS è un meccanismo utilizzato su larga scala, come nel caso di Internet, ma nulla ci impedisce di implementarne uno anche per una rete locale, permettendo ai dispositivi di risolversi a vicenda tramite nomi facili da ricordare. In una rete domestica o aziendale, per avere un DNS locale, è necessario configurare un server DNS dedicato, che si occuperà di tradurre i nomi dei dispositivi interni nei rispettivi indirizzi IP. Tuttavia, gestire e mantenere un server DNS locale può essere complicato e richiede risorse e conoscenze tecniche specifiche, rendendolo meno pratico per piccole reti domestiche o uffici.
Che cos'è mDNS?
mDNS (Multicast DNS) è un protocollo destinato alle reti locali che funziona in modo diverso rispetto al DNS tradizionale: non richiede un server centrale per gestire i nomi dei dispositivi. Con mDNS, i dispositivi su una rete locale possono risolversi tra loro tramite nomi più comprensibili (come "raspberrypi.local") senza dover dipendere da un server DNS dedicato.
In pratica, ogni dispositivo diventa autonomo e può "annunciare" il proprio nome host agli altri dispositivi presenti sulla rete che ne hanno fatto richiesta. Pertanto, non avendo un server DNS centrale, quando un dispositivo cerca un altro con un nome specifico, invia un pacchetto multicast a un indirizzo IP riservato (224.0.0.251 per IPv4 o ff02::fb per IPv6) e tutti i dispositivi compatibili con mDNS connessi alla rete, ricevono il pacchetto e, se uno di questi corrisponde al nome cercato, fornisce l'indirizzo IP corrispondente.
Proviamo a fare qualche analogia per comprendere meglio mDNS
Prima analogia Immaginiamo sempre di voler contattare qualcuno che si trova nel suo luogo di lavoro (la rete locale), ma invece di ricordarci il numero di telefono del suo ufficio (l'indirizzo IP), ricordiamo solo il suo nome (nome host). In questo caso, però, non abbiamo un centralino o qualcuno a cui poter chiedere. Pertanto non ci resta che entrare dentro e chiedere direttamente ad alta voce: "Dove si trova Mario?". In questo caso, sarà Mario stesso che, sentendo la nostra richiesta, si alzerà e risponderà: "Sono qui".
Seconda analogia Immaginiamo di essere a una grande festa (la rete locale), piena di persone (i dispositivi). In una situazione normale, se volessimo trovare un amico tra i presenti, dovremmo conoscere il suo nome (nome del dispositivo di destinazione) e chiedere a una figura rilevante della festa, come l'organizzatore o una persona che conosce tutti (il server DNS). Ma cosa succede se alla festa non c'è nessuno che possa darci informazioni? Invece di cercare qualcuno a cui chiedere, potremmo semplicemente gridare il suo nome nella stanza (la rete). Se l'amico cercato fosse lì, risponderebbe: "Ehi, sono qui!".
Quando è utile mDNS?
mDNS è particolarmente utile in contesti domestici o in piccoli uffici, dove non c'è un server DNS interno, ma è comunque necessario accedere ai dispositivi di rete in modo semplice e rapido. Nel mondo della domotica, ad esempio, permette di gestire dispositivi come lampadine smart, assistenti vocali, telecamere o server come Home Assistant senza dover ricordare o cercare una lista di indirizzi IP.
Grazie a mDNS, possiamo accedere ai dispositivi chiamandoli per nome, come "raspberrypi.local", senza preoccuparci degli indirizzi numerici, proprio come chiameremmo una persona per nome a una festa.
In conclusione:
Il DNS standard trasforma i nomi di dominio in indirizzi IP, sia su internet che su reti locali (se è presente un server DNS dedicato). Con mDNS, invece, ogni dispositivo partecipa attivamente alla rete, annunciando il proprio nome e rispondendo alle richieste, senza bisogno di un server centrale.
In breve, grazie a mDNS, puoi comunicare con i dispositivi della tua rete chiamandoli per nome invece che per numero, e non c’è bisogno di configurare un server dedicato per farlo!