⛏️

[DNS]digコマンドを使って名前解決の流れを追ってみる

2022/11/05に公開

用語

  • スタブリゾルバ
    • PC やスマホなどの機器に存在する
    • 自分自身では名前解決を行わず、フルリゾルバに名前解決を依頼する
  • フルリゾルバ
    • スタブリゾルバから名前解決依頼を受け取り、名前解決を代行する
    • PC のネットワーク設定で、優先 DNS サーバ/代替 DNS サーバとして設定されているもの
    • ISP が提供していたり、Google Public DNS などオープンに提供されているものもある
  • ルートサーバ
    • DNS サービスの起点となるサーバ
    • jp, com, dev などの TLD(トップレベルドメイン)の名前解決を担当する
  • 権威サーバ
    • 自分が管理しているゾーンの情報を返却することができるサーバ
    • 委任している場合は委任先の情報を返却する

名前解決の流れ

zenn.dev にアクセスする際の名前解決の流れ

1. 名前解決依頼

  • ブラウザなどで、zenn.dev にアクセスしようとすると、機器内にあるスタブリゾルバがフルリゾルバに名前解決を依頼する

2. ルートサーバへの問い合わせ

  • フルリゾルバは、ルート DNS に zenn.dev の IP アドレスについて問い合わせを行う
    • フルリゾルバはキャッシュを保持するので、キャッシュ内に zenn.dev の IP アドレスを保持している場合は、名前解決を実行せずにキャッシュの情報を返す
# ルートサーバに対して、zenn.devの情報を問い合わせ
# 権威サーバへ問い合わせるときは +norecオプションをつける
# @で問い合わせ先のDNSサーバを指定できる(省略するとフルリゾルバに対する問合せとなる)dig +norec @A.ROOT-SERVERS.NET. zenn.dev

ルートサーバの情報は以下 URL で公開されている
https://www.internic.net/domain/named.root

3. ルートサーバからの回答

# dig +norec @A.ROOT-SERVERS.NET. zenn.devのレスポンス
; <<>> DiG 9.10.6 <<>> +norec @A.ROOT-SERVERS.NET. zenn.dev
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8931
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 5, ADDITIONAL: 11

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;zenn.dev.			IN	A

;; AUTHORITY SECTION:
dev.			172800	IN	NS	ns-tld5.charlestonroadregistry.com.
dev.			172800	IN	NS	ns-tld3.charlestonroadregistry.com.
dev.			172800	IN	NS	ns-tld2.charlestonroadregistry.com.
dev.			172800	IN	NS	ns-tld1.charlestonroadregistry.com.
dev.			172800	IN	NS	ns-tld4.charlestonroadregistry.com.

;; ADDITIONAL SECTION:
ns-tld5.charlestonroadregistry.com. 172800 IN A	216.239.60.105
ns-tld5.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4805::69
ns-tld3.charlestonroadregistry.com. 172800 IN A	216.239.36.105
ns-tld3.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:36::69
ns-tld2.charlestonroadregistry.com. 172800 IN A	216.239.34.105
ns-tld2.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:34::69
ns-tld1.charlestonroadregistry.com. 172800 IN A	216.239.32.105
ns-tld1.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:32::69
ns-tld4.charlestonroadregistry.com. 172800 IN A	216.239.38.105
ns-tld4.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:38::69

;; Query time: 130 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Sat Nov 05 08:03:24 JST 2022
;; MSG SIZE  rcvd: 393
  • ルートサーバは zenn.dev の権威サーバではないのでANSWER SECTIONが存在しない
  • AUTHORITY SECTIONで、dev を管理する権威サーバの情報を返却する

4. 権威サーバ(dev)への問い合わせ

  • フルリゾルバは、dev の権威サーバに zenn.dev の IP アドレスについて問い合わせを行う
dig +norec @ns-tld5.charlestonroadregistry.com. zenn.dev

5. 権威サーバ(dev)からの回答

# dig +norec @ns-tld5.charlestonroadregistry.com. zenn.devのレスポンス

; <<>> DiG 9.10.6 <<>> +norec @ns-tld5.charlestonroadregistry.com. zenn.dev
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41522
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;zenn.dev.			IN	A

;; AUTHORITY SECTION:
zenn.dev.		10800	IN	NS	ns-cloud-a2.googledomains.com.
zenn.dev.		10800	IN	NS	ns-cloud-a3.googledomains.com.
zenn.dev.		10800	IN	NS	ns-cloud-a1.googledomains.com.
zenn.dev.		10800	IN	NS	ns-cloud-a4.googledomains.com.

;; Query time: 360 msec
;; SERVER: 216.239.60.105#53(216.239.60.105)
;; WHEN: Sat Nov 05 08:10:11 JST 2022
;; MSG SIZE  rcvd: 158
  • 権威サーバ(dev)は zenn.dev の権威サーバではないのでANSWER SECTIONが存在しない
  • AUTHORITY SECTIONで、zenn.dev を管理する権威サーバの情報を返却する

6. 権威サーバ(zenn.dev)への問い合わせ

  • フルリゾルバは、zenn.dev の権威サーバに zenn.dev の IP アドレスについて問い合わせを行う
dig +norec @ns-cloud-a2.googledomains.com. zenn.dev

7. 権威サーバ(zenn.dev)からの回答

# dig +norec @ns-cloud-a2.googledomains.com. zenn.devのレスポンス

; <<>> DiG 9.10.6 <<>> +norec @ns-cloud-a2.googledomains.com. zenn.dev
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45970
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;zenn.dev.			IN	A

;; ANSWER SECTION:
zenn.dev.		86400	IN	A	35.190.77.180

;; Query time: 54 msec
;; SERVER: 216.239.34.106#53(216.239.34.106)
;; WHEN: Sat Nov 05 08:15:39 JST 2022
;; MSG SIZE  rcvd: 53
  • 権威サーバ(zenn.dev)は zenn.dev の IP アドレスを管理しているので、ANSWER SECTIONで、zenn.dev に対応する IP アドレスを返却する

8. スタブリゾルバへ IP アドレスの返却

  • フルリゾルバは、スタブリゾルバに zenn.dev の IP アドレス情報を返却する
    • フルリゾルバは名前解決した情報を、一定時間キャッシュとして蓄える

Discussion