【入門 DNS プロトコル】 名前解決の確認方法をわかりやすく説明

DNS プロトコルとは

DNS プロトコルとは、ドメイン名から IP アドレスなどを取得するプロトコルです。
※ ドメイン名=google.com、IP アドレス=142.250.207.46 など
DNS
スポンサーリンク

DNSサーバー (ネームサーバー) とは

DNS サーバーとはDNS サーバーとは、DNS 名前解決 (ドメイン名を IP アドレス等に変換) するサーバーです。
※ ドメイン名 (google.com など)、IP アドレス (142.250.207.46 など)
※ 「DNS クライアント」上で「キャッシュ DNS サーバー」を建てることもあります。

DNS 名前解決をする場合、以下の4つの構成要素が存在します。

DNS の構成要素機能説明具体例別名
DNS クライアント名前解決を依頼dig コマンド
・ブラウザ
スタブリゾルバー
DNS プロキシ名前解決を中継・ホームルーターDNSフォワーダー
キャッシュ
DNS サーバー
名前解決を実行・Google Public DNS
bind
・dnsmasq
DNS サーバー
・フルサービスリゾルバー
・参照サーバー
権威 DNS サーバー実データを管理・Amazon Route 53
bind
DNS サーバー
・DNSコンテンツサーバー
・権威ネームサーバー
・ゾーンサーバー

DNS サーバー (ネームサーバー) は、「キャッシュ DNS サーバー」と「権威 DNS サーバー」の両方を指します。

「ネームサーバー」は、文脈により二つの意味で使われます。
一つはNSリソースレコードにより指定されるサーバーで、権威サーバー(権威DNSサーバー)を指します

もう一つはDNSのサービスを提供するサーバーで、権威サーバーに加え、フルサービスリゾルバー(キャッシュDNSサーバー)も含みます

https://jprs.jp/glossary/index.php?ID=0157
スポンサーリンク

ドメイン名前空間とは

ドメイン名前空間とはドメイン名前空間とは、ドメイン名に関する情報を木構造で管理する空間のことです。
ドメイン名とはドメイン名 とは、ネットワークやコンピューターを、インターネット上で一意に特定するための識別子の一つです。
ドメイン名前空間
各ノードの実体は、権威 DNS サーバーです

ドメイン名前空間の葉から根まで辿るとドメイン名となります。

例えば、「葉 (www)」から「根 (.)」まで辿ると、「www.nintendo.co.jp.」となります。

なお、末尾のピリオドを含むかどうかで以下のように名前が変わります。

ドメインの種類

ドメイン名前空間にあるドメインには、以下のような種類があります。

ルートドメインとは

ルートドメインとは、ドメイン名前空間の根「.」にあたるドメインです。
ルートドメインは通常、省略されます。

トップレベルドメイン (TLD) とは

トップレベルドメイン (TLD) とは、根ノードの直下にあるノードのドメインです。

ドメイン名では、一番最後の部分にあたります。(google.co.jp の「.jp」の部分)

トップレベルドメインは次の2種類が存在します。

TDL の種類説明
ccTLD (Country Code TLD)国を表す TDL「.jp」「.us」「.de」「.cn」
gTLD (Generic TLD)国や地域によらないト TDL「.com」「.edu」「.gov」
「.mil」「.net」「.org」「.info」

セカンドレベルドメイン (SLD) とは

セカンドレベルドメイン (SLD) とは、根ノードから2番目のノードのドメインです。

ドメイン名はピリオドで区切られますが、右側から2番目の文字列がSLDです。「jprs.co.jp」の場合、SLDは「co」になります。

https://jprs.jp/glossary/index.php?ID=0055

ゾーンとは

権威 DNS サーバーは、「自分」と「自分の子ノード」の情報を管理します。

この管理する情報の範囲を「ゾーン」と言います。

権威 DNS サーバーのゾーン
スポンサーリンク

リソースレコードとタイプ

リソースレコードリソースレコードとは、ドメイン名に対応する情報 (IP アドレス等) を持つレコードです。
リソースレコードは、ドメイン名前空間の各ノード(権威 DNS サーバー)のデータベースに保存されています。

リソースレコードのタイプには以下の種類が存在します。

コードタイプ説明
1Aドメイン名に対応する IP アドレス
2NSドメイン名に対応する権威 DNS サーバーIP アドレス
5CNAMEドメイン名の別名(エイリアス)
6SOAゾーンの情報
12PTR逆引き DNS (IP アドレス-->ホスト名) 等に使用する
15MXドメイン名に対応するメールサーバの IP アドレス

リソースレコードには「クラス」も指定しますが、通常「IN (the Internet system)」を使います。

Aリソースレコード

Aリソースレコードとは、ドメイン名に対応する IP アドレスを持つレコードです。

ドメインの Aリソースレコードは、以下のコマンドで名前解決可能です。

dig nintendo.co.jp A
;; ANSWER SECTION:
nintendo.co.jp.		300	IN	A	13.248.184.86
nintendo.co.jp.		300	IN	A	76.223.57.182

nintendo.co.jp. は TTL が 300秒で IP アドレスが「13.248.184.86」もしくは「76.223.57.182」であることがわかります。

NSリソースレコード

NSリソースレコードとは、ドメイン名に対応する権威 DNS サーバーを持つレコードです。

ドメインの NSリソースレコードは、以下のコマンドで名前解決可能です。

dig nintendo.co.jp NS
;; ANSWER SECTION:
nintendo.co.jp.		600	IN	NS	ns-742.awsdns-28.net.
nintendo.co.jp.		600	IN	NS	ns-1222.awsdns-24.org.
nintendo.co.jp.		600	IN	NS	ns-19.awsdns-02.com.
nintendo.co.jp.		600	IN	NS	ns-1938.awsdns-50.co.uk.

nintendo.co.jp. ドメインは、4つの権威 DNS サーバーで管理されていることがわかります。

もちろん、権威 DNS サーバー自体の Aリソースレコードもあります。

dig ns-742.awsdns-28.net. +short
205.251.194.230

CNAMEリソースレコード

CNAMEリソースレコードとは、ドメイン名の別名(エイリアス)を持つレコードです。

ドメインの CNAMEリソースレコードは、以下のコマンドで名前解決可能です。

dig www.nintendo.co.jp CNAME
;; ANSWER SECTION:
www.nintendo.co.jp.	201	IN	CNAME	www.nintendo.co.jp.edgekey.net.

何も指定しない場合、Aリソースレコードまで再帰的に解決してくれます。

dig www.nintendo.co.jp
;; ANSWER SECTION:
www.nintendo.co.jp.	300	IN	CNAME	www.nintendo.co.jp.edgekey.net.
www.nintendo.co.jp.edgekey.net.	187 IN	CNAME	e5192.b.akamaiedge.net.
e5192.b.akamaiedge.net.	20	IN	A	184.26.241.185

以下の3つは全て同じという意味です。

  • 「www.nintendo.co.jp.」
  • 「www.nintendo.co.jp.edgekey.net.」
  • 「e5192.b.akamaiedge.net.」

SOAリソースレコード

SOAリソースレコードとは、ゾーンの管理情報を持つレコードです。
SOAリソースレコードは、「プライマリーサーバー」と「セカンダリーサーバー」でゾーン情報を交換するために利用します。

権威 DNS サーバーは、1つのプライマリーサーバーと複数のセカンダリーサーバーから構成されます。

権威 DNS サーバーの種類説明
プライマリーサーバーリソースレコードを更新
セカンダリーサーバープライマリーサーバーのリソースレコードをコピー

ドメインの SOAリソースレコードは、以下のコマンドで名前解決可能です。

dig nintendo.co.jp SOA
;; ANSWER SECTION:
nintendo.co.jp.		900	IN	SOA
ns-19.awsdns-02.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

SOAリソースレコードの意味は以下のとおりです。

項目名説明
MName権威 DNS サーバー
(プライマリーサーバー)
ns-19.awsdns-02.com.
RNameドメインの管理者
(メールアドレス)
awsdns-hostmaster.amazon.com.
(awsdns-hostmaster@amazon.com のこと)
Serialゾーン情報のシリアル番号
(更新のバージョン)
1
Refresh更新までの時間7200
Retry更新の再試行間隔900
Expire更新の終了時間1209600
Minimum TTLリソースレコードの最小TTL86400

PTRリソースレコード (逆引き)

PTRリソースレコードとは、逆引き DNS (IP アドレス-->ホスト名) 等に使用する別のドメイン名前空間を指す値を持つレコードです。
https://jprs.jp/glossary/index.php?ID=0210

ドメインの PTRリソースレコードは、以下のコマンドで名前解決可能です。

dig 49.16.11.202.in-addr.arpa. PTR
;; ANSWER SECTION:
49.16.11.202.in-addr.arpa. 3439	IN	PTR	ns1.jprs.co.jp.

IP アドレス「202.11.16.49」のホスト名が「ns1.jprs.co.jp.」であることがわかります。

IP アドレスを後ろから読むのが混乱する場合は -x オプションを使います。

dig -x 202.11.16.49
dig ns1.jprs.co.jp.
;; ANSWER SECTION:
ns1.jprs.co.jp.		2673	IN	A	202.11.16.49

MXリソースレコード

MXリソースレコードとは、ドメイン名に対応するメールサーバーを持つレコードです。

ドメインの MXリソースレコードは、以下のコマンドで名前解決可能です。

dig nintendo.co.jp MX
;; ANSWER SECTION:
nintendo.co.jp.		300	IN	MX	10 mxb-0039de01.gslb.pphosted.com.
nintendo.co.jp.		300	IN	MX	10 mxa-0039de01.gslb.pphosted.com.

上記は xxx@nintendo.co.jp 宛のメールを、以下のメールサーバーで処理するという意味です。

  • 10 mxa-0039de01.gslb.pphosted.com
  • 10 mxb-0039de01.gslb.pphosted.com

なお、先頭にある数字は優先度です。数字の低い方が名前解決の優先順位が高くなります。
(今回は優先度が同じなので、ラウンドロビン方式で名前解決します。)

DNS クエリ (問い合わせ) の種類

DNS サーバーにリソースレコードを問い合わせ (クエリ) する方法は、以下の2つがあります。

再帰問い合わせ (recursive query) とは

再帰問い合わせ (recursive query) とは、「DNSクライアント」もしくは「DNSプロキシー」が「キャッシュ DNS サーバー」に名前解決を要求することです。
https://www.janog.gr.jp/meeting/janog35/download_file/view/83/175/index.pdf#page=10

dig コマンドによる再帰問い合わせ方法

"@x.x.x.x" でキャッシュ DNS サーバーを指定します。

dig nintendo.co.jp @8.8.8.8
;; ANSWER SECTION:
nintendo.co.jp.		46	IN	A	13.248.184.86
nintendo.co.jp.		46	IN	A	76.223.57.182

@8.8.8.8 は Google Public DNS (キャッシュ DNS サーバー)です。

非再帰問い合わせ (non-recursive query) とは

非再帰問い合わせ (non-recursive query)とは、「キャッシュ DNS サーバー」が「権威 DNS サーバー」に名前解決を行うことです。

「非再帰問い合わせ」は「反復問い合わせ(iterative query)」とも呼ばれます。

https://www.janog.gr.jp/meeting/janog35/download_file/view/83/175/index.pdf#page=11

dig コマンドによる非再帰問い合わせ方法

+norec で非再帰問い合わせを行い、"@x.x.x.x" で権威 DNS サーバーを指定します。

dig google.com +norec @a.root-servers.net.
;; AUTHORITY SECTION:
com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
(中略)
dig google.com +norec @a.gtld-servers.net.
;; AUTHORITY SECTION:
google.com.		172800	IN	NS	ns2.google.com.
google.com.		172800	IN	NS	ns1.google.com.
google.com.		172800	IN	NS	ns3.google.com.
google.com.		172800	IN	NS	ns4.google.com.
dig google.com +norec @ns2.google.com.
;; ANSWER SECTION:
google.com.		300	IN	A	142.250.196.110

3回の非再帰問い合わせで google.com の IP アドレスが 142.250.196.110 とわかりました。

なお、trace オプションを利用すると、一括で非再帰問い合わせを行うことができます。

dig google.com +trace

DNS メッセージ

DNS メッセージとはDNS メッセージとは、ドメイン名からリソースレコードを取得するためのメッセージです。

DNS メッセージは、以下のような DNS クエリ (問い合わせ) で利用します。

DNS メッセージのフォーマット

DNS メッセージのフォーマットは以下のとおりです。

名前説明
識別(ID)識別子
問い合わせと応答で同じ値を利用し、1:1で対応
フラグフラグ (後述) を記載
質問の数(QD Count)QUESTION セクションのリソースレコードの数
回答の数(AN Count)ANSWER セクションのリソースレコードの数
オーソリティの数(NS Count)AUTHORITY セクションのリソースレコードの数
追加情報の数(AR Count)ADDITIONAL セクションのリソースレコードの数
QUESTION セクションDNS クエリ (問い合わせ) の内容
ANSWER セクションDNS クエリ (問い合わせ) に対する回答 (リソースレコード)
AUTHORITY セクション権威 DNS サーバーの情報 (NS レコードなど)
ADDITIONAL セクション追加情報 (権威 DNS サーバー自体の A、AAAA レコードなど)
「識別(ID)」から「追加情報の数(AR Count)」までを DNS ヘッダと言います

フラグ

名前説明
問い合わせ/応答(qr)0…問い合わせ
1…応答
オペレーションコード(opcode)0…問い合わせ
1…逆問い合わせ
2…サーバ状態要求
オーソリティ応答(aa)0…反復の結果の応答
1…そのネームサーバからの応答
切捨て(tc)0…データサイズ512バイト以下
1…512バイト超
再帰要望(rd)0…反復問い合わせ
1…再帰問い合わせをネームサーバに要求
再帰有効(ra)0…再帰不可能
1…再帰可能
予約すべて0
戻りコード(Rcode/status)0…応答成功
3…問い合わせの名前なし

DNS メッセージを確認

dig コマンドを用いて、実際の DNS メッセージを確認します。

dig nintendo.co.jp
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54497
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 9
名前
識別(ID)54497
フラグ問い合わせ/応答(qr):1(応答)
オペレーションコード(opcode):0(QUERY/問い合わせ)
オーソリティ応答(aa):0(反復の結果の応答)
切捨て(tc):0(データサイズ512バイト以下)
再帰要望(rd):1(再帰問い合わせをネームサーバに要求)
再帰有効(ra):1(再帰可能
予約:0
戻りコード(Rcode/status):0(NOERROR/応答成功)
質問の数(QD Count)
回答の数(AN Count)
オーソリティの数(NS Count)
追加情報の数(AR Count)
QUESTION セクション;; QUESTION SECTION:
;nintendo.co.jp. IN A
ANSWER セクション;; ANSWER SECTION:
nintendo.co.jp. 103 IN A 76.223.57.182
nintendo.co.jp. 103 IN A 13.248.184.86
AUTHORITY セクション;; AUTHORITY SECTION:
nintendo.co.jp. 403 IN NS ns-742.awsdns-28.net.
nintendo.co.jp. 403 IN NS ns-1938.awsdns-50.co.uk.
nintendo.co.jp. 403 IN NS ns-1222.awsdns-24.org.
nintendo.co.jp. 403 IN NS ns-19.awsdns-02.com.
ADDITIONAL セクション;; ADDITIONAL SECTION:
ns-1222.awsdns-24.org. 3172 IN A 205.251.196.198
ns-1222.awsdns-24.org. 3172 IN AAAA 2600:9000:5304:c600::1
ns-19.awsdns-02.com. 574 IN A 205.251.192.19
ns-19.awsdns-02.com. 574 IN AAAA 2600:9000:5300:1300::1
ns-1938.awsdns-50.co.uk. 194 IN A 205.251.199.146
ns-1938.awsdns-50.co.uk. 194 IN AAAA 2600:9000:5307:9200::1
ns-742.awsdns-28.net. 1934 IN A 205.251.194.230
ns-742.awsdns-28.net. 1934 IN AAAA 2600:9000:5302:e600::1

最後に

関連記事

DNS

参考資料

https://2014.seccon.jp/dns/dns_basics_in_30minutes.pdf

https://www.janog.gr.jp/meeting/janog35/download_file/view/83/175/index.pdf