Mô-đun Trình phân giải DNS giúp bảo vệ người dùng khỏi tính năng chặn DNS và cập nhật cấu hình, cũng như cải thiện hiệu suất mạng cho DNS độ phân giải. Mô-đun này có chứa mã triển khai mã giả lập DNS trình phân giải, giúp dịch các tên, chẳng hạn như www.google.com sang IP như 2001:db8::1. Trình phân giải mã giả lập DNS hoạt động trở lại Các phần tử API Java như InetAddress#getAllByName và Network#getAllByName, cũng như các chức năng kết nối mạng gốc, đồng thời triển khai tính năng gửi và nhận truy vấn DNS và lưu kết quả vào bộ nhớ đệm.
Các thay đổi trong Android 10
Trên các thiết bị chạy Android 9 trở xuống, mã trình phân giải DNS được trải rộng trên
Bionic và netd
. Hoạt động tra cứu DNS được tập trung ở
Trình nền netd
cho phép lưu vào bộ nhớ đệm trên toàn hệ thống trong khi các ứng dụng
gọi các hàm (chẳng hạn như getaddrinfo
) trong Bionic. Đã gửi truy vấn
qua một ổ cắm UNIX đến /dev/socket/dnsproxyd
Daemon netd
, phân tích cú pháp yêu cầu và gọi
getaddrinfo
một lần nữa để thực hiện tra cứu DNS, sau đó lưu kết quả vào bộ nhớ đệm
để các ứng dụng khác có thể sử dụng. Việc triển khai trình phân giải DNS chủ yếu
có trong bionic/libc/dns/
và một phần nằm trong
system/netd/server/dns
Android 10 chuyển mã trình phân giải DNS sang
system/netd/resolv,
chuyển đổi mã này thành C++, sau đó hiện đại hoá và
tái cấu trúc mã. Mã trong Bionic tiếp tục tồn tại cho ứng dụng
tương thích nhưng không còn được hệ thống gọi. Các nguồn này
đường dẫn bị ảnh hưởng bởi việc tái cấu trúc:
bionic/libc/dns
system/netd/client
system/netd/server/dns
system/netd/server/DnsProxyListener
system/netd/server/ResolverController
system/netd/resolv
Định dạng và phần phụ thuộc
Mô-đun Trình phân giải DNS (`com.android.resolv`) được phân phối dưới dạng
APEX và được liên kết động bằng
netd
; tuy nhiên, netd
không phải là một
phần phụ thuộc dưới dạng mô-đun phân phát ổ cắm cục bộ
/dev/socket/dnsproxyd
. Điểm cuối Binder cho
cấu hình trình phân giải đã được di chuyển từ netd
sang trình phân giải,
nghĩa là dịch vụ hệ thống có thể gọi trực tiếp vào mô-đun trình phân giải
mà không phải trải qua netd
.
Mô-đun trình phân giải DNS phụ thuộc vào libc
(Bionic) và
liên kết tĩnh các phần phụ thuộc; không cần có thư viện nào khác.
Phân giải mDNS .local
Kể từ tháng 11 năm 2021, trình phân giải Android sẽ hỗ trợ độ phân giải mDNS .local, vốn thực thi
"5.1 Truy vấn DNS đa hướng một lần" trong RFC 6762 để gửi các truy vấn DNS chuẩn một cách mù mờ đến
224.0.0.251:5353 hoặc [FF02::FB]:5353. Độ phân giải mDNS được hỗ trợ một cách rõ ràng
bằng cách gọi getaddrinfo()
bằng tên máy chủ kết thúc bằng *.local
.
Độ phân giải mDNS .local tăng cường chức năng hiện có của getaddrinfo()
để nhận địa chỉ. Nếu thiết bị hỗ trợ độ phân giải mDNS .local, thì
API getaddrinfo()
gửi truy vấn mDNS đến 224.0.0.251:5353 hoặc [FF02::FB]:5353
và trả về địa chỉ địa phương. Nếu thiết bị không hỗ trợ mDNS .local
phân giải, thì phương thức API getaddrinfo()
sẽ gửi truy vấn DNS đến DNS
máy chủ.
Mã này nằm trong AOSP (Dự án nguồn mở Android) ở packages/modules/DnsResolver
. Người dùng có thể duy trì
thiết kế mDNS hiện tại để lấy địa chỉ hoặc chuyển sang sử dụng getaddrinfo()
. Hành vi của
tính năng này giống như một truy vấn DNS thông thường được gửi đến các địa chỉ đa hướng mDNS. Tính năng này không có
đến tình trạng của hệ thống.
Người dùng có thể sử dụng lệnh adb shell ping6 HOSTNAME.local
,
trong đó HOSTNAME là tên máy chủ của thiết bị mục tiêu trên mạng LAN, ví dụ:
adb shell ping6 ipad.local
.
Các kết nối dữ liệu di động và VPN không được áp dụng độ phân giải .local.