digコマンド、DNSのメモ書き

###digコマンド

digコマンドについてのメモ書きです。
digコマンドはDNSサーバに問い合わせて、ドメイン名からIPアドレなどを調査できたりします。

###権威DNSサーバ（コンテンツサーバ）とキャッシュDNSサーバ

digコマンドの前に、DNSサーバについてです。

参考サイト
[DNSサーバとは](https://manual.iij.jp/dns/help/1480649.html)
[奥が深いDNSサーバーとdigコマンド](https://qiita.com/hypermkt/items/610b5042d290348a9dfa)

権威DNSサーバ（コンテンツサーバとも呼ばれる）とキャッシュDNSサーバがある。上の参考サイトが、DNSの再帰的な名前解決についてわかりやすく説明しています。DNSの名前解決はインターネットの根幹をなすものなので、どの階層(ノード）の権威DNSコンテンツサーバは複数台稼働している。

#####DNSサーバを指定しない場合、macOS

ドメイン名からIPアドレスを知りたい場合、「dig ドメイン名」コマンドを実行すればいいという情報が多かったのですが、自分のmacOSだとオプションでDNSサーバを指定しないと結果を返してくれませんでした。
（VMでCentOS７を起動してみましたが、CentOS7だとDNSサーバを指定しなくても結果を返してくれました。）

```
$ dig yahoo.co.jp

; <<>> DiG 9.10.6 <<>> yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 33409
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;yahoo.co.jp.			IN	A

;; Query time: 74 msec
;; SERVER: 2404:1a8:7f01:b::3#53(2404:1a8:7f01:b::3)
;; WHEN: Mon May 11 14:58:57 JST 2020
;; MSG SIZE  rcvd: 29

```

結果はstatusがREFUSEDで、ANSWER SECTIONも返してくれません。

#####DNSサーバを指定する場合（8.8.8.8はグーグルのPublicDNS）、macOS

```
$ dig @8.8.8.8 yahoo.co.jp

; <<>> DiG 9.10.6 <<>> @8.8.8.8 yahoo.co.jp
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29602
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

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

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

;; Query time: 157 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon May 11 14:58:02 JST 2020
;; MSG SIZE  rcvd: 72
```

結果はstatusがNOERRORで、ANSER SECTIONでAレコードを返してくれます。

#####DNSサーバを指定しない場合、CentOS7

```
$ dig yahoo.co.jp

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-1 <<>> yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2536
;; flags: qr rd ra; 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.		169	IN	A	183.79.135.206
yahoo.co.jp.		169	IN	A	182.22.59.229

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

;; ADDITIONAL SECTION:
ns01.yahoo.co.jp.	873	IN	A	118.151.254.133
ns02.yahoo.co.jp.	741	IN	A	118.151.254.149
ns11.yahoo.co.jp.	521	IN	A	124.83.255.37
ns12.yahoo.co.jp.	132	IN	A	124.83.255.101

;; Query time: 18 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: 月  5月 11 19:42:22 JST 2020
;; MSG SIZE  rcvd: 212

```

DNSを指定しなくても結果を返してくれます。ANSER SECTIONだけでなく、AUTHORITY SECTION、ADDITIONAL SECTIONも返してくれます。

#####dig -x、CentOS7

-xオプションは逆引きです。IPアドレスから対応するホストのネームを返してくれます。

```
$ dig -x 183.79.135.206

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.2 <<>> -x 183.79.135.206
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51797
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;206.135.79.183.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
206.135.79.183.in-addr.arpa. 900 IN	PTR	f1.top.vip.kks.yahoo.co.jp.

;; AUTHORITY SECTION:
79.183.in-addr.arpa.	900	IN	NS	ns12.yahoo.co.jp.
79.183.in-addr.arpa.	900	IN	NS	ns02.yahoo.co.jp.
79.183.in-addr.arpa.	900	IN	NS	ns01.yahoo.co.jp.
79.183.in-addr.arpa.	900	IN	NS	ns11.yahoo.co.jp.

;; ADDITIONAL SECTION:
ns01.yahoo.co.jp.	828	IN	A	118.151.254.133
ns02.yahoo.co.jp.	401	IN	A	118.151.254.149
ns11.yahoo.co.jp.	341	IN	A	124.83.255.37
ns12.yahoo.co.jp.	123	IN	A	124.83.255.101

;; Query time: 22 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: 月  5月 11 19:42:57 JST 2020
;; MSG SIZE  rcvd: 236

```

ホストのネームだけ知りたければ、hostやnslookupでもできます。
dig -xコマンドのANSWER SECTIONと同じ結果です。

```
$ host 183.79.135.206
206.135.79.183.in-addr.arpa domain name pointer f1.top.vip.kks.yahoo.co.jp.

$ nslookup 183.79.135.206
206.135.79.183.in-addr.arpa	name = f1.top.vip.kks.yahoo.co.jp.

Authoritative answers can be found from:
79.183.in-addr.arpa	nameserver = ns02.yahoo.co.jp.
79.183.in-addr.arpa	nameserver = ns12.yahoo.co.jp.
79.183.in-addr.arpa	nameserver = ns01.yahoo.co.jp.
79.183.in-addr.arpa	nameserver = ns11.yahoo.co.jp.
ns01.yahoo.co.jp	internet address = 118.151.254.133
ns02.yahoo.co.jp	internet address = 118.151.254.149
ns11.yahoo.co.jp	internet address = 124.83.255.37
ns12.yahoo.co.jp	internet address = 124.83.255.101
```

hostの-aオプションはAllです。ネームサーバ(NSレコード)の情報なども返してくれます。
NSレコードには、ドメインの権威DNSサーバのホスト名が登録されています。

```
$ host -a 183.79.135.206
Trying "206.135.79.183.in-addr.arpa"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44100
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;206.135.79.183.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
206.135.79.183.in-addr.arpa. 900 IN	PTR	f1.top.vip.kks.yahoo.co.jp.

;; AUTHORITY SECTION:
79.183.in-addr.arpa.	194	IN	NS	ns11.yahoo.co.jp.
79.183.in-addr.arpa.	194	IN	NS	ns12.yahoo.co.jp.
79.183.in-addr.arpa.	194	IN	NS	ns02.yahoo.co.jp.
79.183.in-addr.arpa.	194	IN	NS	ns01.yahoo.co.jp.

;; ADDITIONAL SECTION:
ns01.yahoo.co.jp.	286	IN	A	118.151.254.133
ns02.yahoo.co.jp.	99	IN	A	118.151.254.149
ns11.yahoo.co.jp.	33	IN	A	124.83.255.37
ns12.yahoo.co.jp.	286	IN	A	124.83.255.101
```

-t NSオプションでも、ドメインのNSレコードを返してくれます。-tはタイプの指定です。

参考サイト
[6.1 NSレコードを取得する方法(-t NS)](https://qiita.com/hana_shin/items/e99f64a01f2632b7a719#61-ns%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-t-ns)

```
$  dig -t NS yahoo.co.jp

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

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

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

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

;; Query time: 6 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: 火  5月 12 09:58:18 JST 2020
;; MSG SIZE  rcvd: 180

```

#####dig ANY 

digコマンドでANYを指定すると、Aレコードだけでなく、NS、MX、SOA、TXTレコードなども一緒に返してくれます。下の実行結果はレコードが多いので、一部のみ抜粋しています。

```
$  dig ANY yahoo.co.jp @8.8.8.8

; <<>> DiG 9.10.6 <<>> ANY yahoo.co.jp @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43608
;; flags: qr rd ra; QUERY: 1, ANSWER: 17, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
yahoo.co.jp.		699	IN	SOA	yahoo.co.jp. postmaster.yahoo.co.jp. 2005110010 1800 900 86400 900
yahoo.co.jp.		699	IN	CAA	0 issue "globalsign.com"
yahoo.co.jp.		699	IN	CAA	0 issue "cybertrust.ne.jp"
yahoo.co.jp.		699	IN	MX	10 mx5.mail.yahoo.co.jp.
yahoo.co.jp.		699	IN	MX	10 mx2.mail.yahoo.co.jp.
yahoo.co.jp.		699	IN	TXT	"google-site-verification=GvbYgNin-mY73VbS4IJK2D8nI3tHEf2NpRdy76VYqBU"
yahoo.co.jp.		699	IN	TXT	"v=spf1 include:spf.yahoo.co.jp ~all"
yahoo.co.jp.		699	IN	NS	ns11.yahoo.co.jp.
yahoo.co.jp.		699	IN	NS	ns12.yahoo.co.jp.
yahoo.co.jp.		99	IN	A	183.79.135.206
yahoo.co.jp.		99	IN	A	182.22.59.229
```

#####dig +short

+shortオプションを指定すると、AレコードのIPアドレスのみを返してくれます。

```
$ dig yahoo.co.jp +short @1.1.1.1
182.22.59.229
183.79.135.206

#逆引き
$ dig -x 182.22.59.229 +short @1.1.1.1
f1.top.vip.ssk.yahoo.co.jp.
```

#####DNSキャッシュサーバ情報の取得と指定

+short +identifyオプションで使っているDNSキャッシュサーバ情報のIPアドレスを返してくれる。

参考サイト
[9 DNS応答を返すキャッシュDNSサーバの調べ方(+short +identify)](https://qiita.com/hana_shin/items/e99f64a01f2632b7a719#9-dns%E5%BF%9C%E7%AD%94%E3%82%92%E8%BF%94%E3%81%99%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5dns%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E8%AA%BF%E3%81%B9%E6%96%B9short-identify)
[DNSキャッシュサーバ  【 DNS cache server 】 ](http://e-words.jp/w/DNS%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%82%B5%E3%83%BC%E3%83%90.html)
->問い合わせ結果は一定期間保存され、期間内に同じ問い合わせが来た時には外部サーバへ新たに問い合わせることはせず自ら返答する。これにより上位DNSサーバの負担が軽減され、利用者への応答時間も短縮される。

```
$ dig yahoo.co.jp +short +identify
182.22.59.229 from server 10.0.2.3 in 15 ms.
183.79.135.206 from server 10.0.2.3 in 15 ms.
```

+short +identifyオプションを指定しないでも最後に返してくれるね。SERVER: 10.0.2.3#53(10.0.2.3)

```
$ dig yahoo.co.jp
~省略
;; Query time: 6 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: 火  5月 12 10:50:11 JST 2020
;; MSG SIZE  rcvd: 212

$ dig yahoo.co.jp +short +identify @1.1.1.1
182.22.59.229 from server 1.1.1.1 in 5 ms.
183.79.135.206 from server 1.1.1.1 in 5 ms.
```

また、DNSキャッシュサーバを指定する場合、@オプションで指定する。

```
$ dig yahoo.co.jp @1.1.1.1
~省略
;; Query time: 5 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: 火  5月 12 10:51:37 JST 2020
;; MSG SIZE  rcvd: 83
```

#####DNSルートサーバ(ルートネームサーバ)情報の取得、CentOS7

オプションを何も指定しないと、１３あるDNSルートサーバの情報が取得できます。

```
$ dig

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.2 <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27196
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 14

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;.				IN	NS

;; ANSWER SECTION:
.			17485	IN	NS	i.root-servers.net.
.			17485	IN	NS	c.root-servers.net.
.			17485	IN	NS	m.root-servers.net.
以下省略
```

#####他によく使うdigコマンド

他によく使う、もしくは使う機会がありそうなdigコマンドのメモです。コマンドのみ、実行結果省略です。環境はCentos７。

```
#+trace。ルートネームサーバから再帰的な解決の様子がトレースできる。
$ dig yahoo.co.jp +trace

# +multiline, 出力結果の整形
$ dig yahoo.co.jp  +multiline

# SOAレコードを取得
$ dig -t SOA yahoo.co.jp

#-hオプション。オプション一覧と簡単な使い方のヘルプ。
$ dig -h


```

#####digコマンド参考サイト

[CMAN,nslookup(dig)テスト【DNSサーバ接続確認】](https://www.cman.jp/network/support/nslookup.html)
->ウェブサービス。digなどを実行してくれる。
[【 dig 】コマンド――ドメイン名からIPアドレスを調べる](https://www.atmarkit.co.jp/ait/articles/1711/09/news020.html)
[奥が深いDNSサーバーとdigコマンド](https://qiita.com/hypermkt/items/610b5042d290348a9dfa)
[digコマンドの使い方](https://qiita.com/hana_shin/items/e99f64a01f2632b7a719)



#####https、ssl化の参考サイト

[自分で発行したサーバー証明書（オレオレ証明書）をブラウザに登録する方法](https://kekaku.addisteria.com/wp/20190327053337)
->ローカル環境でオレオレ証明書を使ってhttpsアクセスする際、ブラウザの警告をなくす方法。実際にこのあたりはやらないからいいかな、、、

#####その他の参考サイト
[curlコマンドでapiを叩く](https://qiita.com/bunty/items/758425773b2239feb9a7)