DNSって?
DNS(Domain Name System)は、インターネット上でドメイン名をIPアドレスに変換するシステムです。Webサイトを閲覧するときに、「google.com」のようなドメイン名を入力すると、DNSが対応するIPアドレスを取得してくれます。

負荷分散や障害が発生しても対応できるように、1つのドメインに複数のIPアドレスが紐づいていることがあるよ。
named.caとルートDNSサーバ
DNSの仕組みを知る上で重要なファイルがnamed.ca
です。このファイルには、インターネットのルートDNSサーバの情報が記載されています。
ルートDNSサーバは世界に13個の名前(a.root-servers.net 〜 m.root-servers.net)が存在します。しかし、実際には各ルートサーバは多数の物理サーバで構成されており、Anycast技術を用いて負荷分散されています。
なぜ13個なのかというと、DNSの通信にはUDP(User Datagram Protocol)が使われ、DNSの応答パケットサイズの上限が元々512バイトとされていたためです(現在ではEDNS0により拡張可能)。この制限内でルートサーバのアドレス情報を収めるために、13個のルートサーバが設定されました。

13個のルートサーバそれぞれ分散して運用されているから、実際に稼働しているサーバの台数は550台を超えるとされているよ。
digコマンドでDNS情報を調査
DNSの仕組みを理解するために、dig
コマンドを使用すると、DNSの問い合わせ結果を詳しく見ることができます。 例えば、日本のトップレベルドメイン(TLD).jp
のDNSサーバを調べるには、次のコマンドを実行します。
dig jp. NS
このコマンドを実行すると、.jp
を管理するネームサーバの一覧が表示されます。
resolv.confとデフォルトのDNS設定
サーバ内でdig
を実行すると、次のような結果が得られることがあります。
;; Query time: 1 msec
;; SERVER: 210.150.255.28#53(210.150.255.28)
;; WHEN: Thu Aug 08 10:50:44 JST 2024
;; MSG SIZE rcvd: 487
ここで、SERVER: 210.150.255.28#53
と表示されている部分は、DNSの問い合わせに応答したサーバのIPアドレスを示しています。このサーバは、通常/etc/resolv.conf
ファイルに設定されているDNSサーバです。デフォルトの設定では、ISP(インターネットプロバイダ)や企業のネットワークによって指定されたDNSサーバが使われることが多いです。

ちなみに#53の53は、DNSの問い合わせに使用するポート番号だよ。DNSの通信に使用されるポートは53番だね。
DNS問い合わせを辿る

dig +traceを実行すると、ドメイン解決に至るまでどのDNSサーバを辿ってきたかがわかるよ。
余談ですが、Apple Silicon Macを使用してdig +traceを実行しても反復的に問い合わせてくれませんでした。どうやらdigのバージョンが古いとダメみたいで、
brew install bind
を実行してupdateします。PATHを通していない場合は、以下でインストール後のバージョン確認。
/opt/homebrew/bin/dig -v
DiG 9.20.6
/opt/homebrew/bin/dig +trace otter-dev.com
を実行すると、
<一部抜粋>
; <<>> DiG 9.20.6 <<>> +trace otter-dev.com
;; global options: +cmd
. 49147 IN NS c.root-servers.net.
. 49147 IN NS j.root-servers.net.
. 49147 IN NS b.root-servers.net.
. 49147 IN NS h.root-servers.net.
. 49147 IN NS l.root-servers.net.
. 49147 IN NS i.root-servers.net.
. 49147 IN NS e.root-servers.net.
. 49147 IN NS f.root-servers.net.
. 49147 IN NS g.root-servers.net.
. 49147 IN NS d.root-servers.net.
. 49147 IN NS m.root-servers.net.
. 49147 IN NS k.root-servers.net.
. 49147 IN NS a.root-servers.net.
. 49147 IN RRSIG NS 8 0 518400 20250323050000 20250310040000 26470 . ds2JyZVqqg/7mrmsTx3JKz2yMadKZkIMudYvpBfi8eFpSPYUEitbyHMs Yv6cEP9r58KJr9o9/qPviFaPNgndgDlPHKIdr3oCF9ceEH8fh22iRnMn td6egch6b3csch8Olgyu0D32weSgJAjZGUuqrjefgcCXNztvBsLKHlVa uhXIGRCyCHeSDSIiw/js+MbbYzHgxyWq1rpSQbYL/E5iVor+8OBa809y vjEB51TwM9EaEWg0l5Y3QHOvTA5VzMdtmPCchwaTW7nQPk0SXE9ol9xO oaeTbKvlhzEjT0lTG144BhudZtKzfm7OTbfodJmp5DqAJBNcM6K/rvjA 8F/pPg==
;; Received 525 bytes from 10.108.232.1#53(10.108.232.1) in 12 ms
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 86400 IN DS 19718 13 2 8ACBB0CD28F41250A80A491389424D341522D946B0DA0C0291F2D3D7 71D7805A
com. 86400 IN RRSIG DS 8 1 86400 20250323050000 20250310040000 26470 . OESeiQi0dRa6GzNksuRMWGzvc5mnplOFA4E7LzNP51HFgG/k/XinP7Sp fqmmXvA//pYpGRMo/jC90Uiy4g0TNuSM9CLUb5WG+YTmXCxWRtaMg/RK wiTqMKCBq95FhrZYZODDYiTHDdXWA1/K2bWqv0Y5d62Ty0/yJCvM23n3 X8DrotRoZ2QWbe6AYeIWQfcFO225zc3JJY6ZuMlSp7bcMcsRlx5OoQeK +4ij63wDjspjZdNRHutmSP4Iem/HSEnqe5tTG2sHccDZb7u1i5auIdWn inFw33JRJuR1jL9/S3xC4QZ3YzHBvbWttHxC587/wv30542/Qj+7n0xd hTmswQ==
;; Received 1173 bytes from 202.12.27.33#53(m.root-servers.net) in 7 ms
こんな感じで、comを返してくれるルートDNSサーバもわかります。(上記の場合は、m.root-servers.net)