ルートDNSサーバについて調べたあれこれ

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)

タイトルとURLをコピーしました