DNS Çözümleyici

DNS Çözümleyici modülü, DNS müdahalesi ve yapılandırma güncelleme saldırılarına karşı kullanıcı koruması sağlar ve DNS çözümlemeleri için gelişmiş ağ performansı sağlar. Modül, www.google.com gibi adları 2001:db8::1 gibi IP adreslerine çeviren DNS saplama çözümleyicisini uygulayan kodu içerir. DNS saplama çözümleyicisi, InetAddress#getAllByName ve Network#getAllByName gibi Java API öğelerinin yanı sıra yerel ağ işlevlerini de destekler ve DNS sorgularının gönderilmesini ve alınmasını ve sonuçların önbelleğe alınmasını uygular.

Android 10'daki değişiklikler

Android 9 ve daha önceki sürümleri çalıştıran cihazlarda, DNS çözümleyici kodu Bionic ve netd yayılır. DNS aramaları, sistem genelinde önbelleğe alma işlemine izin vermek için netd arka plan programında merkezileştirilirken, uygulamalar Bionic'teki işlevleri ( getaddrinfo gibi) çağırır. Sorgu, bir UNIX soketi üzerinden /dev/socket/dnsproxyd adresine, isteği ayrıştıran ve DNS aramaları yayınlamak için getaddrinfo yeniden çağıran netd arka plan programına gönderilir, ardından diğer uygulamaların bunları kullanabilmesi için sonuçları önbelleğe alır. DNS çözümleyici uygulaması çoğunlukla bionic/libc/dns/ de ve kısmen de system/netd/server/dns bulunuyordu.

Android 10, DNS çözümleyici kodunu system/netd/resolv, C++'a dönüştürür, ardından kodu modernleştirir ve yeniden düzenler. Bionic'teki kod, uygulama uyumluluğu nedeniyle varlığını sürdürüyor ancak artık sistem tarafından çağrılmıyor. Bu kaynak yolları yeniden düzenlemeden etkilenir:

  • bionic/libc/dns
  • system/netd/client
  • system/netd/server/dns
  • system/netd/server/DnsProxyListener
  • system/netd/server/ResolverController
  • system/netd/resolv

Biçim ve bağımlılıklar

DNS Çözümleyici modülü (`com.android.resolv`) bir APEX dosyası olarak sunulur ve netd ile dinamik olarak bağlanır; ancak netd bir bağımlılık değildir , çünkü modül doğrudan /dev/socket/dnsproxyd yerel soketine hizmet eder. Çözümleyici yapılandırması için Binder uç noktası netd çözümleyiciye taşındı; bu, sistem hizmetinin netd üzerinden geçmeden doğrudan çözümleyici modülünü arayabileceği anlamına gelir.

DNS Çözümleyici modülü libc (Bionic) bağlıdır ve bağımlılıklarını statik olarak bağlar; başka kütüphaneye gerek yoktur.

mDNS .yerel çözünürlük

Kasım 2021'den itibaren Android çözümleyici, standart DNS sorgularını 224.0.0.251:5353 veya [FF02::FB]:5353'e körü körüne göndermek için RFC 6762'de "5.1 Tek Çekim çok noktaya yayın DNS Sorguları"nı uygulayan mDNS .local çözümlemesini destekler. mDNS çözünürlüğü, *.local ile biten bir ana bilgisayar adı ile getaddrinfo() çağrılarak şeffaf bir şekilde desteklenir.

mDNS .local çözünürlüğü, adresleri almak için getaddrinfo() işlevinin mevcut işlevselliğini artırır. Bir cihaz mDNS .local çözünürlüğünü destekliyorsa getaddrinfo() API, mDNS sorgularını 224.0.0.251:5353 veya [FF02::FB]:5353'e gönderir ve yerel adresleri döndürür. Bir cihaz mDNS .local çözümlemesini desteklemiyorsa getaddrinfo() API yöntemi, DNS sunucusuna bir DNS sorgusu gönderir.

Kod, packages/modules/DnsResolver konumunda bulunan AOSP'dedir. Kullanıcılar adresleri almak için mevcut mDNS tasarımlarını koruyabilir veya bunun yerine getaddrinfo() işlevini kullanabilir. Bu özelliğin davranışı, mDNS çok noktaya yayın adreslerine gönderilen normal bir DNS sorgusu gibidir. Bu özelliğin sistem sağlığı üzerinde hiçbir etkisi yoktur.

Kullanıcılar adb shell ping6 HOSTNAME .local komutunu kullanabilir; burada HOSTNAME LAN üzerindeki bir hedef aygıtın ana bilgisayar adıdır; örneğin, adb shell ping6 ipad.local .

VPN ve mobil veri bağlantıları .local çözünürlüğünün dışında tutulur.