Multicast DNS (mDNS) – protokół, który pozwala komputerom i urządzeniom w tej samej sieci lokalnej ustalać nawzajem swoje adresy IP oraz odnajdywać udostępniane usługi, bez udziału serwera DNS. Zamiast odpytywać serwer, urządzenie rozgłasza pytanie do wszystkich maszyn w swoim segmencie sieci i czeka na odpowiedź tego urządzenia, którego pytanie dotyczy. Protokół opisuje dokument RFC 6762 z lutego 2013 roku, przygotowany przez Stuarta Cheshire’a i Marca Krochmala z firmy Apple. W odróżnieniu od konkurencyjnego LLMNR został przyjęty jako standard internetowy (Standards Track). Powstał razem z uzupełniającym go mechanizmem wyszukiwania usług DNS-Based Service Discovery (RFC 6763), a oba miały przenieść do sieci IP wygodę konfiguracji, z jakiej znany był AppleTalk.
Nazwy w domenie .local Większość użytkowników domowych nie dysponuje żadnym fragmentem globalnej przestrzeni nazw DNS, w którym mogliby nadawać nazwy własnym urządzeniom. Protokół pozwala każdemu nadać swojemu komputerowi nazwę postaci nazwa.local. bez opłat, bez delegacji i bez konfigurowania serwera.
Domena najwyższego poziomu .local. ma w mDNS znaczenie specjalne. Każda nazwa kończąca się w ten sposób obowiązuje wyłącznie w obrębie łącza, na którym powstała, podobnie jak adresy IPv4 z zakresu 169.254/16 czy adresy IPv6 z prefiksu FE80::/10. Ta sama nazwa zapytana w innej sieci da inną odpowiedź albo żadnej. Strefa mDNS nie ma rekordu SOA ani rekordów NS i nie da się jej przenieść transferem strefy, bo jej „serwerem” jest zbiór współpracujących ze sobą urządzeń, a nie pojedyncza maszyna.
Zasada działania Zapytanie o nazwę kończącą się na .local. musi zostać wysłane multicastem na adres grupowy 224.0.0.251 w sieci IPv4 albo FF02::FB w sieci IPv6, na port 5353 UDP. Wszystkie urządzenia z włączonym mDNS nasłuchują pod tymi adresami, więc pytanie trafia jednocześnie do każdego z nich. Zasięg obu adresów jest ograniczony do łącza, więc router nie przekaże ich dalej.
Odpowiada tylko urządzenie, które jest autorytatywne dla pytanej nazwy. Odpowiedź także jest wysyłana na adres grupowy, dzięki czemu pozostałe maszyny aktualizują swoje pamięci podręczne i widzą ewentualne konflikty nazw. Zanim urządzenie zacznie używać nazwy, która ma być unikatowa, sprawdza w sieci, czy nie jest już zajęta. Jeśli otrzyma odpowiedź, musi wybrać dla siebie inną nazwę i zapamiętać ją na stałe.
Odebrane rekordy przechowuje się w pamięci podręcznej przez 120 sekund, jeżeli dotyczą nazwy hosta, i przez 75 minut w pozostałych przypadkach. Urządzenie zamykane w sposób kontrolowany wysyła pakiet pożegnalny z czasem przechowywania ustawionym na zero, co powoduje natychmiastowe usunięcie jego danych z pamięci podręcznych sąsiadów.
Zastosowania Sam mDNS rozwiązuje wyłącznie nazwy, natomiast wyszukiwaniem usług zajmuje się nadbudowany nad nim DNS-SD. To ta para protokołów stoi za wykrywaniem sprzętu w sieciach domowych i biurowych. Drukarki ogłaszają w ten sposób swoją obecność i obsługiwane protokoły druku, czemu Apple poświęciło osobną specyfikację.
Na DNS-SD opiera się także wykrywanie urządzeń w standardzie Matter, używanym w internecie rzeczy i automatyce domowej. Urządzenie już przyłączone do sieci może zostać odnalezione wyłącznie tą drogą, a nazwy węzłów należą do domeny .local.. Urządzenia pracujące w sieci Thread nie korzystają z DNS-SD bezpośrednio – ruch mDNS prowadzi za nie router brzegowy, żeby nie obciążać ich sieci.
Implementacje Pierwszą i najbardziej znaną implementacją jest Bonjour firmy Apple, zestaw technologii bezkonfiguracyjnych, którego rdzeniem jest usługa mDNSResponder obecna w systemach macOS i iOS oraz dostępna jako oddzielny pakiet dla systemu Windows. W systemach Linux odpowiednikiem jest Avahi, wolna implementacja DNS-SD i mDNS zgodna z Bonjour. Protokół obsługuje też usługa systemd-resolved, gdzie steruje nim opcja MulticastDNS= w pliku resolved.conf. Przyjmuje ona wartość logiczną albo resolve, która włącza samo zadawanie pytań, bez odpowiadania na cudze.
W kwietniu 2022 roku Microsoft ogłosił, że to mDNS ma docelowo pozostać jedynym domyślnie włączonym protokołem multicastowego rozwiązywania nazw w systemie Windows, a starsze rozwiązywanie nazw NetBIOS i LLMNR ma być stopniowo wygaszane.
Bezpieczeństwo Specyfikacja wymaga kontroli pochodzenia pakietów. Odpowiedzi na zapytania wysłane na adres grupowy muszą pochodzić z lokalnego łącza, a pozostałe należy odrzucać. Bez tej kontroli zdalny napastnik mógłby przysłać sfałszowaną odpowiedź, którą urządzenie wzięłoby za pochodzącą z własnej sieci. Osobnym zagrożeniem jest używanie mDNS do rozwiązywania nazw spoza domeny .local. jako mechanizmu awaryjnego, gdy zawiedzie DNS. Autorzy zalecają, by taka możliwość była domyślnie wyłączona, ponieważ pozwala lokalnie podstawić odpowiedź na pytanie o nazwę globalną.
W praktyce mDNS bywa nadużywany tak samo jak pozostałe protokoły rozgłoszeniowego rozwiązywania nazw. MITRE ATT&CK wymienia go obok LLMNR i NBT-NS w podtechnice T1557.001, opisanej dla systemów Windows. Napastnik odpowiada na cudze zapytania kierowane na port 5353, podając się za poszukiwane urządzenie, a jeżeli ofiara sięgała po zasób wymagający uwierzytelnienia, przesyła mu nazwę użytkownika i skrót NTLMv2. Zalecanym przeciwdziałaniem jest wyłączenie protokołu tam, gdzie nie jest potrzebny, oraz blokowanie jego ruchu na stacjach roboczych.
Zobacz też Domain Name System Link-Local Multicast Name Resolution
Przypisy
Linki zewnętrzne RFC 6762 – Multicast DNS
Kategoria:Protokoły sieciowe Kategoria:Bezpieczeństwo komputerowe