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も有用な情報なので気にすると幸せになれます