mDNS'nin açılımı Multicast DNS'dir. Bu yöntem, merkezi bir DNS sunucusuna kayıt eklemeden aynı yerel bağlantıdaki cihaz adlarını DNS mesajlarıyla çözer. Özellikle yazıcı, medya cihazı, bilgisayar veya küçük sunucu gibi yerel cihazlara kolay okunabilen adlarla ulaşmak için kullanılır.

mDNS'nin en belirgin kullanım alanı .local ile biten adlardır. Bir istemci, örneğin yazici.local adını çözmek istediğinde, mDNS'yi destekliyorsa mDNS grubunu dinleyen yerel cihazlara ulaşan bir multicast sorgusu gönderir; bu adı kullanan cihaz da kendi adres kaydıyla yanıt verebilir.

Bu mekanizma yalnız aynı yerel ağ bağlantısında çalışır. Bu yüzden .local adları genel DNS alan adları gibi internet çapında çalışmaz ve ek yapılandırma olmadan farklı ağ bölümlerinde çözülmez.

mDNS ile Klasik DNS Arasındaki Farklar

Klasik DNS'te bir alan adıyla ilgili sorguya hangi yetkili sunucunun yanıt vereceğini hiyerarşik DNS yapısı ve delegasyonlar belirler. mDNS ise aynı DNS mesaj biçiminden yararlansa da yerel bağlantıda merkezi bir yetkili sunucuya ihtiyaç duymadan, birden fazla cihazın birlikte yanıt verebildiği dağıtık bir model kullanır.

.local ad çözümlemesinde klasik bir DNS bölgesindeki gibi yetkili ad sunucusunu belirleyen NS delegasyonu veya bölgenin yetki bilgilerini taşıyan SOA kaydı kullanılmaz. İstemci, sorguyu belirli bir merkezi DNS sunucusuna göndermek yerine mDNS multicast grubuna yöneltir; ilgili kaydı sunan her cihaz yanıt verebilir.

Genel internet için kullanılan DNS sunucusunu değiştirmek, yerel mDNS paketlerinin engellenmesi gibi bir sorunu tek başına çözmez. .local sorgusunun mDNS'ye gönderilip gönderilmemesi işletim sistemi ile uygulamanın ad çözümleme desteğine ve ayarlarına bağlıdır.

.local Adının Yerel Bağlantıda Çözülmesi

İstemci, önbelleğinde kullanılabilir bir kayıt yoksa .local adı için yerel bağlantıya sorgu gönderir. Aldığı yanıtı bağlantı kurarken kullanabilir ve kaydı geçerlilik süresi boyunca önbellekte tutabilir.

Sorgunun Multicast Grubuna Gönderilmesi

mDNS, paketleri bağlantı kurmadan taşıyan UDP protokolünü kullanır; bu hizmet için ayrılmış port 5353'tür. mDNS protokolünü tam olarak uygulayan bir istemci sorgularını bu port üzerinden gönderir ve IPv4 için 224.0.0.251, IPv6 için FF02::FB adresindeki yerel multicast yanıtlarını dinler.

Bilgisayar yazici.local adının IPv4 adresini arıyorsa A kaydını, IPv6 adresini arıyorsa AAAA kaydını sorgular. Sorgunun IPv4 veya IPv6 üzerinden taşınması, hangi kayıt türünün istenebileceğini sınırlamaz.

Yanıtlar çoğunlukla multicast ile iletilir. İstemcinin isteğine ve sorgunun biçimine bağlı olarak yanıt doğrudan istemcinin adresine de gönderilebilir; buna unicast yanıt denir.

Adı Kullanan Cihazın Yanıt Vermesi

Yazıcı yazici.local adını kullanıyor ve bu ad için bir A kaydı yayımlıyorsa sorguya kendi IPv4 adresini içeren yanıt verebilir. Böylece bilgisayar, merkezi DNS'e önceden kayıt eklenmeden de adı bir IP adresiyle eşleştirebilir.

mDNS yanıtlayıcısı, benzersiz olması gereken bir adı kullanmadan önce çakışma olup olmadığını sorgular. Örneğin iki bağımsız yazıcı aynı benzersiz ad için farklı adresler bildiriyorsa çakışma oluşabilir ve yazıcılardan birinin başka bir ad seçmesi gerekebilir. Aynı kaydın aynı içeriğini birden fazla cihazın sunması ise tek başına çakışma değildir.

Yanıtların Önbellekte Tutulması ve Güncellenmesi

mDNS yanıtları, kaynak kayıtlarının önbellekte ne kadar tutulabileceğini belirten TTL değeri taşır; istemciler bu kayıtları süre dolana kadar önbellekte tutabilir. Bir cihazın IP adresi değiştiğinde mDNS yanıtlayıcısının güncel kaydı yeniden duyurması, aynı yerel bağlantıdaki önbelleklerin eski adres yerine yeni bilgiyi kullanmasına yardımcı olur.

Daha önce doğru çalışan bir .local adı kısa bir süre eski IP adresine çözümlenebilir. Buna eski önbellek kaydı, cihazın ağa yeniden bağlanması veya güncel duyurunun henüz alınmaması yol açabilir.

.local Adları Neden Yalnız Aynı Yerel Bağlantıda Çalışır?

RFC 6762, .local ile biten tam adların yalnız kaynaklandıkları yerel bağlantıda anlam taşıdığını belirtir. Bu nedenle yazici.local adı bir ağ bölümünde belirli bir yazıcıyı gösterebilirken başka bir yerel bağlantıda aynı ad farklı bir cihaz için kullanılabilir.

mDNS'deki yerel bağlantı kapsamı, aynı yönlendiricinin arkasındaki ağın tamamını her zaman içermez. Ağ, cihazları ayrı gruplara ayıran VLAN’lara (Virtual Local Area Network) veya yönlendirilmiş bölümlere ayrılmışsa mDNS multicast trafiği diğer bölümlere kendiliğinden ulaşmaz.

Farklı ağ bölümleri arasında keşif gerekiyorsa ağ yöneticisi, seçilen bölümler arasında mDNS bilgilerini aktaran bir ağ geçidi gibi ek bir çözüm kullanabilir. Yalnız gereken cihaz ve hizmetlerin keşfine izin verilmelidir; keşfin çalışması, cihazdaki hizmete bağlantı izni de verildiği anlamına gelmez.

mDNS Ad Çözümleme Sorunu ile IP Bağlantı Sorunu Nasıl Ayırt Edilir?

Önce uygulamanın .local adını hangi IP adresine çözdüğünü, ardından bu adresin hedef cihazdaki güncel adresle eşleşip eşleşmediğini kontrol edin. Ad hiç çözülmüyorsa mDNS desteğini, cihaz adını ve yerel paket iletimini inceleyin; adres doğruysa uygulamanın kullandığı hizmeti ve bağlantı noktasını da kontrol edin.

IP adresiyle erişimin çalışıp adla erişimin başarısız olması tek başına mDNS hatasını kanıtlamaz. Özellikle şifreli web bağlantısı sağlayan HTTPS hizmetlerinde, kullanılan ad sunucu seçimini ve sertifika denetimini etkileyebilir. Sertifika uyarısını yok sayarak bağlantı denemeyin.

  1. Hedef cihazın beklenen .local adını gerçekten kullandığını doğrulayın; ad çakışması yaşandıysa cihaz farklı bir ad seçmiş olabilir.
  2. İstemci ile hedef cihazın aynı yerel bağlantıda olduğunu kontrol edin; aynı Wi-Fi adını görmek yeterli değildir. Misafir ağı veya cihazlar arası iletişimi engelleyen istemci izolasyonu bu iki cihazın mDNS ile haberleşmesini engelleyebilir.
  3. Her iki uçta da mDNS desteğinin etkin ve çalışır durumda olduğunu kontrol edin.
  4. Yerel ağın gerekli mDNS sorgu ve yanıtlarını iki cihaz arasında engellemediğini doğrulayın. Güvenlik duvarını veya izolasyonu bütünüyle kapatmak yerine ağ yöneticisinden gereken bağlantıyı incelemesini isteyin.
  5. IP adresi değişmişse eski mDNS önbelleğinin yenilenmesi için cihazın güncel kaydı duyurup duyurmadığını kontrol edin.

Adları IP adreslerine elle eşleyen hosts dosyası, uygulama bu dosyayı kullanıyorsa bir .local adının mDNS sorgusu yapılmadan çözülmesini sağlayabilir. Ancak bu eşleme ağdaki hizmetleri keşfetmez ve cihazın adresi değiştiğinde kendiliğinden güncellenmez. Normal bir DNS sunucusuna nslookup veya dig ile yapılan sorgu da uygulamanın mDNS davranışını tek başına sınamaz.

mDNS Yanıtlarının Güvenilirliği ve Uygulama Şifrelemesi

mDNS, yerel bağlantıdaki katılımcılar arasında güçlü bir kimlik doğrulama mekanizması kurmaz. Bu nedenle bir .local adının çözülmesi, yanıt veren cihazın kimliğinin doğrulandığı anlamına gelmez; aynı yerel bağlantıdaki güvenilir olmayan bir cihaz yanıltıcı mDNS trafiği üretebilir.

mDNS ayrıca uygulama trafiğini şifrelemez. Yalnız .local adını bir IP adresiyle veya başka DNS kayıtlarıyla ilişkilendirir; web, dosya paylaşımı ya da başka hizmetlerdeki kimlik doğrulama ve şifreleme, ilgili uygulama protokolüne bağlıdır.