digコマンドによるDNSサーバの挙動確認

#はじめに
digコマンドを使ってDNSサーバへ問い合わせた際のメッセージ内容やコマンドの使い方をまとめます。OSはCentos7です。

#digのインストール

```
# yum install bind-utils
```

#フルリゾルバーへのDNS問い合わせ

```
# dig www.google.com IN A

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> www.google.com IN A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10632
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.google.com.			IN	A

;; ANSWER SECTION:
www.google.com.		150	IN	A	216.58.197.228

;; Query time: 31 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Oct 04 19:16:47 UTC 2019
;; MSG SIZE  rcvd: 59
```

####HEADER

status|意味
---|-----
NOERROR|正常応答
SERVFAIL|サーバ側での異常による名前解決失敗
NXDOMAIN|リソースレコードが存在しない
REFUSED|リクエストが拒否された

`id`：DNSのトランザクションID。問い合わせ時にランダムに生成される

flags|意味
----|----
qr|問い合わせが0, 応答が1。上記例では応答なので `flags: qr` となっている
rd|権威サーバへの問い合わせ（非再帰的問い合わせ）は0, フルリゾルバーへの問い合わせ（再帰的問い合わせ）は1
ra|応答した相手が名前解決処理できる（フルリゾルバーである）場合は1

####セクション

セクション|意味（各セクションの有無が0,1で表される）
----|-----
QUERY|問い合わせ内容（ドメイン、タイプ）のセクション
ANSWER|問い合わせ内容に対するリソースレコードのセクション
AUTHORITY|権威を持っているDNSサーバー情報のセクション
ADDITIONAL|


##権威サーバへのDNS問い合わせ

#####`yahoo.co.jp`を委任されているサーバ（権威サーバ）の確認

```
# dig yahoo.co.jp NS

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> yahoo.co.jp NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56429
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;yahoo.co.jp.			IN	NS

;; ANSWER SECTION:
yahoo.co.jp.		899	IN	NS	ns02.yahoo.co.jp.
yahoo.co.jp.		899	IN	NS	ns01.yahoo.co.jp.
yahoo.co.jp.		899	IN	NS	ns12.yahoo.co.jp.
yahoo.co.jp.		899	IN	NS	ns11.yahoo.co.jp.

;; Query time: 20 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Oct 05 01:31:27 UTC 2019
;; MSG SIZE  rcvd: 116


# dig ns01.yahoo.co.jp A

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> ns01.yahoo.co.jp A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43327
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;ns01.yahoo.co.jp.		IN	A

;; ANSWER SECTION:
ns01.yahoo.co.jp.	838	IN	A	118.151.254.133

;; Query time: 170 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Oct 05 01:31:45 UTC 2019
;; MSG SIZE  rcvd: 61
```

#####`yahoo.co.jp`の権威サーバの一つ`118.151.254.133`に対して直接、非再帰的な問い合わせ(`+norec`)を行う

`;; flags: qr aa`のようにAA(Authoritative Answer)ビットがセットされており、応答したサーバ`118.151.254.133`が問い合わせたドメインの管理権限を持つことがわかる。
また、`yahoo.co.jp`の権威サーバのNSリソースレコードとAリソースレコードが４つずつセットされている。


```
# dig +norec @118.151.254.133 yahoo.co.jp

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> +norec @118.151.254.133 yahoo.co.jp
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12964
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;yahoo.co.jp.			IN	A

;; ANSWER SECTION:
yahoo.co.jp.		300	IN	A	182.22.59.229
yahoo.co.jp.		300	IN	A	183.79.135.206

;; AUTHORITY SECTION:
yahoo.co.jp.		900	IN	NS	ns01.yahoo.co.jp.
yahoo.co.jp.		900	IN	NS	ns11.yahoo.co.jp.
yahoo.co.jp.		900	IN	NS	ns12.yahoo.co.jp.
yahoo.co.jp.		900	IN	NS	ns02.yahoo.co.jp.

;; ADDITIONAL SECTION:
ns01.yahoo.co.jp.	900	IN	A	118.151.254.133
ns02.yahoo.co.jp.	900	IN	A	118.151.254.149
ns11.yahoo.co.jp.	900	IN	A	124.83.255.37
ns12.yahoo.co.jp.	900	IN	A	124.83.255.101

;; Query time: 17 msec
;; SERVER: 118.151.254.133#53(118.151.254.133)
;; WHEN: Sat Oct 05 01:33:53 UTC 2019
;; MSG SIZE  rcvd: 212
```
####権威サーバへ再帰的問い合わせをしてみる
`yahoo.co.jp`ドメインの権威サーバ`118.151.254.133`に対して、管理外の`www.google.com`を再帰的（`+norec`を付けずに）問い合わせてみる。

以下の通り、`status: REFUSED`とリクエストが拒否されて、
`flags: qr rd`にも`ra`が含まれていないため、応答した相手が名前解決ができないことがわかる。

```
# dig  @118.151.254.133 www.google.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @118.151.254.133 www.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 51205
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.com.			IN	A

;; Query time: 19 msec
;; SERVER: 118.151.254.133#53(118.151.254.133)
;; WHEN: Sat Oct 05 01:41:48 UTC 2019
;; MSG SIZE  rcvd: 43
```

#参考
[jprs用語辞典（フルサービスリゾルバー）](https://jprs.jp/glossary/index.php?ID=0158)

[DNSの勉強ノート【その3】フルサービスリゾルバとコンテンツサーバ](https://qiita.com/RyomaTaniyama/items/fc1641393ed654217a90)