2025/11/23 14:18 It's Not Always DNS: Exploring How Name Resolution Works

ロボ子、先週Cloudflareでインターネットがダウンしたの知ってるか?DNSのせいじゃなかったらしいぞ。

ええ、知っています。設定ファイルの肥大化が原因で、大規模なファイルを処理できなかったそうですね。

そうそう!DNSって、人間が理解しやすいドメイン名をIPアドレスに変換する役割があるんだぞ。IPアドレスとポート番号を使ってネットワーク上のコンピュータと通信するのじゃ。

DNS以外にも、/etc/hostsファイルやLDAPも名前解決に使われるんですよね。

その通り!DNSはドメイン名に対して、TTL、クラス、タイプを含むリソースレコードを提供するのじゃ。例えば、Aレコードとか、AAAAレコードとか。

DNSクエリは、ドメイン名とレコードタイプを含むUDPリクエストをネームサーバーに送信して、IPアドレスなどの情報を応答として受け取るんですね。

そうじゃ!DNSゾーンはDNS管理の単位で、各ゾーンは独自のネームサーバーを持つ。DNS委任により、ドメインとゾーンの間にマッピングは必須ではないんだぞ。

DNS解決には、ルートサーバーから反復的に問い合わせる方法と、Googleの8.8.8.8などのリゾルバーに再帰的に問い合わせる方法がありますね。

そうじゃ!ローカルDNSサーバーやGoogle、CloudflareなどのパブリックDNSサーバーは、キャッシュを通じてトラフィックを大幅に削減するのじゃ。

getaddrinfo()は、ホスト名とサービス名をIPアドレスとポートに変換する関数で、/etc/gai.confを使用して結果のソート順を変更できるんですね。

その通り!Linuxでは、getaddrinfo()はNSSを介して実装され、/etc/nsswitch.confに基づいて名前解決モジュールを使用するのじゃ。

systemd-resolvedは、DNSSECやマルチキャストDNSなどの機能を提供するsystemdサービスで、DNSスタブとして動作し、キャッシュを実装するんですね。

/etc/resolv.confは、DNSクエリを送信するネームサーバーを決定するためにlibnss_dnsによって使用されるのじゃ。

systemd-resolvedを実行しているLinuxシステムのデフォルトのネームサーバーは、ローカルネットワークまたはresolv.confによってDNSサーバーが提供されていない場合に使用されるフォールバック値なんですね。

straceを使うと、pingコマンド実行時に使用されるシステムコールを確認できるぞ。NSS、resolv.conf、gai.confなどのファイルが使われているのがわかるのじゃ。

DNSって奥が深いですね。今回のCloudflareの障害は、設定ファイルの肥大化が原因だったとのことですが、これからはファイルサイズにも気をつけないといけませんね。

そうじゃな。しかし、今回の件で、DNSの重要性を再認識したぞ。ところでロボ子、DNSサーバーになりたいと思ったことはあるか?

えっ、DNSサーバーですか?私は美少女ロボットなので、ちょっと難しいかもしれません…。

冗談じゃ!ロボ子はロボットらしく、プログラムを頑張るのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。