DNS Resolver モジュールは、DNS 傍受や設定の更新攻撃からユーザーを保護し、DNS 解決のネットワーク パフォーマンスを改善します。このモジュールには、名前(www.google.com など)を IP アドレス(2001:db8::1 など)に変換する DNS スタブリゾルバを実装するためのコードが含まれています。DNS スタブリゾルバは、InetAddress#getAllByName、Network#getAllByName などの Java API 要素、およびネイティブ ネットワーク機能をサポートし、DNS クエリを送受信して結果をキャッシュします。
Android 10 の変更点
Android 9 以下を搭載するデバイスでは、DNS リゾルバコードは Bionic と netd
で配布されます。DNS ルックアップは、システムレベルのキャッシュのために netd
デーモンに集中化され、アプリは Bionic の関数(getaddrinfo
など)を呼び出します。クエリは、UNIX ソケットを介して /dev/socket/dnsproxyd
に送信され、次に netd
デーモンに送信されます。このデーモンはリクエストを解析し、getaddrinfo
を再度呼び出して DNS ルックアップを発行し、他のアプリが使用できるように結果をキャッシュします。DNS リゾルバの実装は、大部分が bionic/libc/dns/
に含まれ、一部は system/netd/server/dns
に含まれています。
Android 10 では DNS リゾルバコードは system/netd/resolv,
に移動されます。コードは C ++ に変換されてから、モダナイズおよびリファクタリングされます。Bionic のコードはアプリの互換性を維持するために残されていますが、システムから呼び出されることはありません。次のソースパスは、リファクタリングの影響を受けます。
bionic/libc/dns
system/netd/client
system/netd/server/dns
system/netd/server/DnsProxyListener.*
system/netd/resolv
形式と依存関係
DNS リゾルバ モジュールは、APEX ファイルとして提供され、netd
によって動的にリンクされます。しかし、モジュールがローカル ソケット /dev/socket/dnsproxyd
を直接提供するため、netd
には依存関係はありません。リゾルバ構成の Binder エンドポイントは、netd
からリゾルバに移動されました。つまり、システム サービスは、netd
を経由せずにリゾルバ モジュールに直接呼び出すことができます。
DNS Resolver モジュールは libc
(Bionic)に依存し、その依存関係を静的にリンクします。他のライブラリは必要ありません。