Modul DNS Resolver memberikan perlindungan pengguna terhadap serangan pembaruan konfigurasi dan intersepsi DNS serta meningkatkan performa jaringan untuk resolusi DNS. Modul ini berisi kode yang mengimplementasikan resolver stub DNS, yang menerjemahkan nama seperti www.google.com menjadi alamat IP seperti 2001:db8::1. Resolver stub DNS mendukung elemen API Java seperti InetAddress#getAllByName dan Network#getAllByName, serta fungsi jaringan native, dan menerapkan pengiriman dan penerimaan kueri DNS serta meng-cache hasilnya.
Perubahan di Android 10
  Pada perangkat yang menjalankan Android 9 dan yang lebih lama, kode DNS resolver tersebar di
  Bionic dan netd. Penelusuran DNS dipusatkan di
  daemon netd untuk memungkinkan penyimpanan dalam cache di seluruh sistem, sementara aplikasi
  memanggil fungsi (seperti getaddrinfo) di Bionic. Kueri dikirim
  melalui soket UNIX ke /dev/socket/dnsproxyd ke
  daemon netd, yang mengurai permintaan dan memanggil
  getaddrinfo lagi untuk melakukan pencarian DNS, lalu meng-cache hasilnya
  sehingga aplikasi lain dapat menggunakannya. Implementasi DNS resolver sebagian besar
  terdapat dalam bionic/libc/dns/ dan sebagian dalam
  system/netd/server/dns.
  Android 10 memindahkan kode DNS resolver ke
  system/netd/resolv, yang mengonversinya ke C++, lalu memodernisasi dan
  memfaktorkan ulang kode. Kode di Bionic akan terus ada karena alasan
  kompatibilitas aplikasi, tetapi tidak lagi dipanggil oleh sistem. Jalur sumber
  ini terpengaruh oleh pemfaktoran ulang:
- bionic/libc/dns
- system/netd/client
- system/netd/server/dns
- system/netd/server/DnsProxyListener
- system/netd/server/ResolverController
- system/netd/resolv
Format dan dependensi
  Modul DNS Resolver (`com.android.resolv`) dikirim sebagai
  file APEX dan ditautkan secara dinamis oleh
  netd; Namun, netd bukan
  dependensi karena modul menayangkan socket lokal
  /dev/socket/dnsproxyd secara langsung. Endpoint Binder untuk
  konfigurasi resolver dipindahkan dari netd ke resolver,
  yang berarti bahwa layanan sistem dapat memanggil langsung ke modul resolver
  tanpa melalui netd.
  Modul DNS Resolver bergantung pada libc (Bionic) dan
  menautkan dependensinya secara statis; tidak diperlukan library lain.
Resolusi .local mDNS
Mulai November 2021, resolver Android mendukung resolusi .local mDNS, yang mengimplementasikan
"5.1 One-Shot multicast DNS Queries" di RFC 6762 untuk mengirim kueri DNS standar secara membabi buta ke
224.0.0.251:5353 atau [FF02::FB]:5353. Resolusi mDNS didukung secara transparan
dengan memanggil getaddrinfo() dengan nama host yang diakhiri dengan *.local.
Resolusi .local mDNS meningkatkan fungsi getaddrinfo() yang ada
untuk mendapatkan alamat. Jika perangkat mendukung resolusi .local mDNS, getaddrinfo() API akan mengirim kueri mDNS ke 224.0.0.251:5353 atau [FF02::FB]:5353
dan menampilkan alamat lokal. Jika perangkat tidak mendukung resolusi mDNS .local, metode getaddrinfo() API akan mengirim kueri DNS ke server DNS.
Kode ini ada di AOSP, yang terletak di packages/modules/DnsResolver. Pengguna dapat mempertahankan
desain mDNS saat ini untuk mendapatkan alamat, atau menggunakan getaddrinfo(). Perilaku
fitur ini seperti kueri DNS reguler yang dikirim ke alamat multicast mDNS. Fitur ini tidak
berdampak pada kesehatan sistem.
Pengguna dapat menggunakan perintah adb shell ping6 HOSTNAME.local,
dengan HOSTNAME adalah nama host perangkat target di LAN, misalnya,
adb shell ping6 ipad.local.
Koneksi VPN dan data seluler dikecualikan dari resolusi .local.
