【入門 DNS プロトコル】 リソースレコードと名前解決とは

スポンサーリンク

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

DNS サーバーとは、ドメイン名 (example.com) を IP アドレス (192.0.2.1) に変換するサーバーです。

なお、ドメイン名と IP アドレスの変換のことを (DNS) 名前解決と言います。

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

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

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

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

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

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

DNS サーバーを構築する場合は以下の記事をご覧ください。

スポンサーリンク

DNS 問い合わせの種類

DNS メッセージを利用して DNS サーバーに問い合わせるには、以下の2つの方法があります。

  • 再起問い合わせ (recursive query)
  • 非再起問い合わせ (non-recursive query)

再起問い合わせ (recursive query)

再起問い合わせとは、「DNSクライアント」もしくは「DNSプロキシー」がキャッシュ DNS サーバーに名前解決を要求することです。

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)

キャッシュ DNS サーバーが権威 DNS サーバーに対して名前解決を反復的に行うことです。

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

「キャッシュ DNS サーバー」は以下の2つの役割を持ちます。

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 サーバーです。

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

例えば、葉(www)から根(.)までをたどると、「www.nintendo.co.jp.」となります。(最後の根ノード "." は省略可能です)

ゾーンとは

権威 DNS サーバーは以下の図のように、「自分」と「自分の子ノード」の情報を管理します。この管理する情報の範囲を「ゾーン」と言います。

権威 DNS サーバーのゾーン

ドメイン名の種類

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

ルートドメインとは

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

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

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

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

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

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

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

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

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

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

完全修飾ドメイン (FQDN) とは

完全修飾ドメイン(FQDN)とは、葉から根までを辿ったドメイン名のことです。

上図では、「www.nintendo.co.jp.」が FQDN です。(根ノード "." は省略可)

ドメイン名とは

ドメイン名とは、「ネットワーク」や「ホスト」を特定するための文字列です。

ドメイン名(Domain Name)
ネットワークやコンピューターを、インターネット上で一意に特定するための識別子の一つです。

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

上記で言うと、ドメイン名は「example.com」・「www.example.com」・「api.example.com」です。

なお、DNS サーバー側からすると、先頭の「www」・「api」がホスト名かどうかはどうでもいいです。

DNSは尋ねられたものがホスト名であろうとドメイン名であろうと対応するIPアドレスを返すだけです。

つまり、先頭がホスト名なのかどうかには関心はないということなのです。

https://seiai.ed.jp/sys/text/csd/cf19/c19b080.html

一般的に「ドメイン名」と呼ばれる部分は「www.i-3-i.info」の部分です。

https://wa3.i-3-i.info/diff635web.html

厳密にはこの www がホスト名なのかサブドメイン名なのかは、DNSでAレコードとして設定されているかサブドメインが切られているかで意味が異なります。

さらに最近はドメイン名自体をホスト名かのように扱うことが増えてきた、という経緯があります。

https://teratail.com/questions/72175

ドメイン名と FQDN の違い

ドメイン名を省略せずに記載したものが FQDN です。

例えば、「nic.ad.jp.」と「www.nic.ad.jp.」は名前解決をすると同じ IP アドレスとなります。

dig nic.ad.jp. +short
192.41.192.145
dig www.nic.ad.jp. +short
192.41.192.145

そのため、「www.nic.ad.jp.」はホスト名「www.」を省略可能ですが、省略せずにドメイン名を記載する表記を FQDN と言います。

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

リソースレコードとは、ドメイン名と IP アドレスの対応を記録したレコードです。

リソースレコードは、ドメイン名前空間の各ノード(権威 DNS サーバー)のデータベースに保存しており、名前解決の際に利用します。

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

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

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

Aリソースレコード

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

Aリソースレコードの例は以下のとおりです。

所有者(Owner)クラスタイプRDATA
nintendo.co.jpINA13.248.184.86
76.223.57.182
ドメイン名「nintendo.co.jp」の IP アドレス は「13.248.184.86」、「76.223.57.182」という意味

ドメインの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 サーバーの IP アドレスを記録したレコードです。

NSリソースレコードの例は以下のとおりです。

所有者(Owner)クラスタイプRDATA
nintendo.co.jpINNSns-742.awsdns-28.net.
ns-1222.awsdns-24.org.
ns-19.awsdns-02.com.
ns-1938.awsdns-50.co.uk.
ドメイン名「nintendo.co.jp」は上記4つの権威 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 サーバーで管理されていることがわかります。

CNAMEリソースレコード

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

CNAMEリソースレコードの例は以下のとおりです。

所有者(Owner)クラスタイプRDATA
www.nintendo.co.jpINCNAMEwww.nintendo.co.jp.edgekey.net.
www.nintendo.co.jp.edgekey.net.INCNAMEe5192.b.akamaiedge.net.
e5192.b.akamaiedge.net.INA184.26.241.185
「www.nintendo.co.jp」の別名は「www.nintendo.co.jp.edgekey.net.」
「www.nintendo.co.jp.edgekey.net.」の別名は「e5192.b.akamaiedge.net.」
「e5192.b.akamaiedge.net.」の IP アドレスは「184.26.241.185」という意味

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

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

「www.nintendo.co.jp.」の IP アドレスは「www.nintendo.co.jp.edgekey.net.」に聞いてくれ。と言う意味ですね。

SOAリソースレコード

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

NS リソースレコードで確認したように、1つのゾーンに対して、権威 DNS サーバーは複数存在します。

  • 1台をプライマリーサーバーと呼び、リソースレコードを更新
  • その他をセカンダリーサーバーと呼び、プライマリーサーバーのリソースレコードをコピー

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

所有者(Owner)クラスタイプRDATA
nintendo.co.jpINSOAns-19.awsdns-02.com.
awsdns-hostmaster.amazon.com.
1
7200
900
1209600
86400

SOA リソースレコードの RDATA はそれぞれ以下の項目を表します。

項目説明
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

ドメインの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 8640

PTRリソースレコード

PTRリソースレコードとは、逆引き DNS (IP アドレス-->ホスト名) 等に使用する別のドメイン名前空間を指す値を記録したレコードです。

PTRリソースレコードの例は以下のとおりです。

所有者(Owner)クラスタイプRDATA
2.2.0.192.in-addr.arpa.INPTRmail.example.jp
IP アドレス「192.0.2.2」のドメイン名は「mail.example.jp」という意味
in-addr.arpa ドメインは逆引き DNS 用に利用する名前空間です
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

正しく逆引きできているか確かめるために、「ns1.jprs.co.jp.」のAリソースレコードを確認します。

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

MXリソースレコード

MXリソースレコードとは、ドメイン名に対応するメールサーバの IP アドレスを記録したレコードです。

MXリソースレコードの例は以下のとおりです。

所有者(Owner)クラスタイプRDATA
nintendo.co.jp.INMX10 mxa-0039de01.gslb.pphosted.com.
nintendo.co.jp.INMX10 mxb-0039de01.gslb.pphosted.com.
mxa-0039de01.gslb.pphosted.com.INA148.163.137.238
mxb-0039de01.gslb.pphosted.com.INA148.163.133.238

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

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

なお、先頭にある数字は優先度です。

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

ドメインの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.

DNS メッセージ

DNS メッセージとは、ドメイン名から IP アドレスを名前解決するために利用するメッセージのことです。

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

「権威 DNS サーバーへリソースレコードを問い合わせ」もしくは「権威 DNS サーバーからリソースレコードを応答」する時は以下のフォーマットを利用します。

名前説明
識別(ID)問い合わせと応答で同じ値を利用し、
どの問い合わせに対する回答か明確にする。
フラグフラグを記載
質問の数(QD Count)「質問」の数
回答の数(AN Count)「回答」のリソースレコードの数
オーソリティの数(NS Count)「オーソリティ」のリソースレコードの数
追加情報の数(AR Count)「追加情報」のリソースレコードの数
質問質問セクションを記載
回答リソースレコードリソースレコードのフォーマットに従って「回答」を記載
オーソリティリソースレコードリソースレコードのフォーマットに従って「オーソリティ」を記載
追加情報リソースレコードリソースレコードのフォーマットに従って「追加情報」を記載
「識別(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…問い合わせの名前なし

質問セクション

名前説明
質問名(Qname)ドメイン名をASCIIコードで記載
質問タイプ(Qtype)リソースレコードのタイプを記載
質問クラス(Qclass)クラスを記載。通常は "IN" を表す"1"

ドメイン名が google.com の場合、「質問名(Qname)」は「0x06google0x03com」となります。

これは、ドメイン名をドメインごとに分け(「google」・「com」)、それぞれの先頭に文字の長さ「0x06」・「0x03」を追加します。

リソースレコードの問い合わせ

項目サイズ説明
所有者(Owner)---権威 DNS サーバーの名前nintendo.co.jp
名前(Name)可変長リソースレコードの名前www
タイプ(Type)16ビットリソースレコードのタイプA
クラス(class)16ビットクラス。通常は「0x0001 = Internet(in)」0001
TTL32ビットリソースレコードのキャッシュ時間(秒)300
RD長(RDLength)16ビットRDATAの長さ(オクテット)8
RDATA可変長リソースの中身13.248.184.86
76.223.57.182

dig コマンドによる確認

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 SECTION:
;nintendo.co.jp. IN A
回答リソースレコード;; ANSWER SECTION:
nintendo.co.jp. 103 IN A 76.223.57.182
nintendo.co.jp. 103 IN A 13.248.184.86
オーソリティリソースレコード;; 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 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

参考資料

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

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

コメント