DNS確認で使うdigコマンド（個人的によく使うコマンドオプション編）

digのコマンドオプション編(1)

割とよく使うオプションと使いかた

適当なゾーンをローカルで作成して例にしています

以降のサンプルで使用する`example.hoge`をdigで普通に叩いた時の結果がこちら
この情報を覚えつつ以降で登場するオプションの結果を比較するとわかりやすいかも

```
# dig example.hoge

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2 <<>> example.hoge
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49563
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;example.hoge.			IN	A

;; ANSWER SECTION:
example.hoge.		300	IN	A	127.0.0.102
example.hoge.		300	IN	A	127.0.0.100
example.hoge.		300	IN	A	127.0.0.101

;; AUTHORITY SECTION:
example.hoge.		300	IN	NS	ns.example.hoge.
example.hoge.		300	IN	NS	ns2.example.hoge.

;; ADDITIONAL SECTION:
ns.example.hoge.	300	IN	A	104.131.17.10
ns2.example.hoge.	300	IN	A	104.131.83.96

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Oct 28 05:55:53 2016
;; MSG SIZE  rcvd: 145
```


#Query Option
コマンドのバージョンで挙動が異なる可能性があります
よく使われていそうなRHELのバージョンで例にしております

```
# dig -v
DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2
```

## +short
Answer Sectionの答えのみを表示する

```
# dig +short example.hoge
127.0.0.102
127.0.0.100
127.0.0.101
```

## +noall (それの組み合わせ)
出力を非表示（にして表示させたい項目を絞る）

+noallだけ
何も表示されません

```
# dig +noall example.hoge
#
```

組み合わせてみる
####authority sectionだけ出す

```
# dig +noall +auth example.hoge
example.hoge.		300	IN	NS	ns2.example.hoge.
example.hoge.		300	IN	NS	ns.example.hoge.
```

#### answer sectionを抜き出す

```
# dig +noall +ans example.hoge
example.hoge.		300	IN	A	127.0.0.102
example.hoge.		300	IN	A	127.0.0.100
example.hoge.		300	IN	A	127.0.0.101
```


ちなみに+オプションの位置によってコメントが表示されてしまう
（コマンドのソースを見てないので意図的なものかは未確認）

```
# dig example.hoge +noall +ans

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2 <<>> example.hoge +noall +ans
;; global options: +cmd
example.hoge.		300	IN	A	127.0.0.102
example.hoge.		300	IN	A	127.0.0.100
example.hoge.		300	IN	A	127.0.0.101
```

さらに応答がない（NXDOMAINなど）の場合は何も応答が返ってこないので
この様な結果になる事は事前に覚えておきましょう

```
# dig +noall +ans  @104.131.17.10 hoge.example.hoge
#
```


無いと思うけどこの部分だけを抜き出す

```
# dig +noall +cmd example.hoge

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2 <<>> +noall +cmd example.hoge
;; global options: +cmd
```

## +nssearch
NSに登録されている全サーバからSOAを取得してきてくれる
セカンダリを自前で運用していない場合など、
ゾーン転送ができているかなどを確認する場合に便利
1 NS毎でdig soaをする必要がない

```
# dig example.hoge +nssearch
SOA example.hoge. info.example.hoge. 2016101102 3600 900 604800 300 from server 104.131.17.10 in 0 ms.
SOA example.hoge. info.example.hoge. 2016101102 3600 900 604800 300 from server 104.131.83.96 in 10 ms.
```

次でtcpの話もするがtcpが通らないNSは表示ができない

```
# dig example.hoge +nssearch
SOA example.hoge. info.example.hoge. 2016101104 3600 900 604800 300 from server 104.131.17.10 in 0 ms.
;; connection timed out; no servers could be reached
```

## +tcp
tcpで問い合わせをする
たまにtcpを塞いでしまってる人がいるので確認に使う
tcpが通らないとゾーン転送もできないのでこれで確認とか

```
# dig +noall +ans example.hoge +tcp @ns2.example.hoge.
example.hoge.		300	IN	A	127.0.0.101
example.hoge.		300	IN	A	127.0.0.102
example.hoge.		300	IN	A	127.0.0.100
```

tcpでの名前解決ができない場合

```
# dig example.hoge +tcp @ns2.example.hoge.

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2 <<>> example.hoge +tcp @ns2.example.hoge.
;; global options: +cmd
;; connection timed out; no servers could be reached
```

## +trace
ServFailなどの時にルートゾーンから辿ってどこでコケているかなど探る時に便利です
yahoo.co.jpさんのドメインで例

```
# dig yahoo.co.jp +trace

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2 <<>> yahoo.co.jp +trace
;; global options: +cmd
.			517703	IN	NS	c.root-servers.net.
.			517703	IN	NS	i.root-servers.net.
.			517703	IN	NS	l.root-servers.net.
.			517703	IN	NS	g.root-servers.net.
.			517703	IN	NS	f.root-servers.net.
.			517703	IN	NS	k.root-servers.net.
.			517703	IN	NS	a.root-servers.net.
.			517703	IN	NS	d.root-servers.net.
.			517703	IN	NS	e.root-servers.net.
.			517703	IN	NS	b.root-servers.net.
.			517703	IN	NS	h.root-servers.net.
.			517703	IN	NS	j.root-servers.net.
.			517703	IN	NS	m.root-servers.net.
;; Received 508 bytes from 127.0.0.1#53(127.0.0.1) in 9 ms

jp.			172800	IN	NS	c.dns.jp.
jp.			172800	IN	NS	b.dns.jp.
jp.			172800	IN	NS	g.dns.jp.
jp.			172800	IN	NS	d.dns.jp.
jp.			172800	IN	NS	f.dns.jp.
jp.			172800	IN	NS	a.dns.jp.
jp.			172800	IN	NS	e.dns.jp.
;; Received 425 bytes from 192.228.79.201#53(192.228.79.201) in 1177 ms

yahoo.co.jp.		86400	IN	NS	ns02.yahoo.co.jp.
yahoo.co.jp.		86400	IN	NS	ns01.yahoo.co.jp.
yahoo.co.jp.		86400	IN	NS	ns11.yahoo.co.jp.
yahoo.co.jp.		86400	IN	NS	ns12.yahoo.co.jp.
;; Received 169 bytes from 150.100.6.8#53(150.100.6.8) in 850 ms

yahoo.co.jp.		300	IN	A	182.22.59.229
yahoo.co.jp.		300	IN	A	183.79.135.206
yahoo.co.jp.		900	IN	NS	ns02.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	ns01.yahoo.co.jp.
;; Received 201 bytes from 118.151.254.149#53(118.151.254.149) in 154 ms
```

# Option

## axfr
Slave側で使ったりします
axfrがdigで叩いて通ればゾーン転送要求が通っている事になるので
だいたいはゾーン転送はうまくいくはず

ちなみにSlaveとして想定していないサーバからマスターの権威に
このコマンドが通ると情報が不正に見えてしまったりするので
allow-transferなどで制限したほうがよい
↓
https://jprs.jp/tech/security/2016-01-12-unauthorized-zone-transfer.html

```
# dig +noall +ans example.hoge @ns2.example.hoge. axfr
example.hoge.		300	IN	SOA	example.hoge. info.example.hoge. 2016101104 3600 900 604800 300
example.hoge.		300	IN	NS	ns.example.hoge.
example.hoge.		300	IN	NS	ns2.example.hoge.
example.hoge.		300	IN	A	127.0.0.100
example.hoge.		300	IN	A	127.0.0.101
example.hoge.		300	IN	A	127.0.0.102
ns.example.hoge.	300	IN	A	104.131.17.10
ns2.example.hoge.	300	IN	A	104.131.83.96
www.example.hoge.	300	IN	A	127.0.0.10
example.hoge.		300	IN	SOA	example.hoge. info.example.hoge. 2016101104 3600 900 604800 300
```

#おまけ
## OpenRecursiveじゃないか確認しよう
http://www.openresolver.jp
 *サイトをご利用した際に生じたいかなる損害についても責任を負いません・・・*

## version.bind
セキュリティのためにも利用しているバージョン情報は空にするか
適当に文字を入れましょう

以下はバージョンが見えてしまっている場合
最近は脆弱性の攻撃コードが直ぐにインターネット上にアップロードされたりするので危険です

```
# dig +noall +ans  @104.131.17.10 chaos txt version.bind
version.bind.		0	CH	TXT	"9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2"
```

隠蔽処理をしたやつ
bindの場合はoptionに`version none;`を設定すれば情報が消えます

```
# dig @104.131.17.10 chaos txt version.bind

;; QUESTION SECTION:
;version.bind.			CH	TXT
```

好きな文字も可能です

```
# dig +noall +ans  @104.131.17.10 chaos txt version.bind
version.bind.		0	CH	TXT	"I am DNS Server!"
```

# その他
本当はヘッダのStatus欄やflagも有用な情報なので気にすると幸せになれます