ドメインやホスト名に関する情報をDNSサーバから取得するコマンドといえば、やはりdigコマンドだろう。
いろいろとオプションのあるdigコマンドだが、今回は普段使ってて便利なオプションや使い方について残しておくことにする。

1.基本的な使い方

基本的には、以下のように該当のドメインを指定して名前解決をする際に利用する。

dig ドメイン名
blacknon@BS-PUB-UBUNTU-01:~$ dig orebibou.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> orebibou.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59998
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;orebibou.com. IN A

;; ANSWER SECTION:
orebibou.com. 25551 IN A 157.112.152.17

;; Query time: 0 msec
;; SERVER: XXX.XXX.XXX.XXX#53(XXX.XXX.XXX.XXX)
;; WHEN: Sun Nov 20 08:57:31 JST 2016
;; MSG SIZE rcvd: 46

この際、細かい情報(Query timeとか)は不要で、ANSWER SECTIONだけが欲しい場合は、以下のようにコマンドを実行する。

dig ドメイン名 +noall +answer
blacknon@BS-PUB-UBUNTU-01:~$ dig orebibou.com +noall +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> orebibou.com +noall +answer
;; global options: +cmd
orebibou.com. 25038 IN A 157.112.152.17

2.逆引きをする

digでIPアドレスからドメインの逆引きを行う場合、オプションなしだとin-addr.arpa形式(IPv6の場合はip6.arpa形式)で指定する必要があるのだが、それだといろいろ面倒。
普通にIPアドレスを指定して逆引きを行う場合は「-x」オプションを用いる。

dig IPアドレス(逆順).in-addr.arpa. ptr
dig -x IPアドレス
blacknon@BS-PUB-UBUNTU-01:~$ # 172.28.0.170の情報を取得する場合
blacknon@BS-PUB-UBUNTU-01:~$ dig 170.0.28.172.in-addr.arpa. ptr +noall +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> 170.0.28.172.in-addr.arpa. ptr +noall +answer
;; global options: +cmd
170.0.28.172.in-addr.arpa. 0    IN      PTR     BS-PUB-REDMINE.
blacknon@BS-PUB-UBUNTU-01:~$ dig -x 172.28.0.170 +noall +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> -x 172.28.0.170 +noall +answer
;; global options: +cmd
170.0.28.172.in-addr.arpa. 0    IN      PTR     BS-PUB-REDMINE.

3.MXレコードやNSレコードを取得する

普通にdigコマンドを実行しただけだと、Aレコードしか出力されない。
MXレコードやNSレコードについて取得する場合は、以下のようにコマンドを実行する。

dig TYPE ドメイン名
blacknon@BS-PUB-UBUNTU-01:~$ dig MX orebibou.com +noall +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> MX orebibou.com +noall +answer
;; global options: +cmd
orebibou.com.           8622    IN      MX      0 orebibou.com.
blacknon@BS-PUB-UBUNTU-01:~$ dig NS orebibou.com +noall +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> NS orebibou.com +noall +answer
;; global options: +cmd
orebibou.com.           86399   IN      NS      ns4.xserver.jp.
orebibou.com.           86399   IN      NS      ns3.xserver.jp.
orebibou.com.           86399   IN      NS      ns1.xserver.jp.
orebibou.com.           86399   IN      NS      ns5.xserver.jp.
orebibou.com.           86399   IN      NS      ns2.xserver.jp.
blacknon@BS-PUB-UBUNTU-01:~$ dig TXT orebibou.com +noall +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> TXT orebibou.com +noall +answer
;; global options: +cmd

すべての情報を一括で取得する場合は、ANYを指定する。

dig ANY ドメイン名
blacknon@BS-PUB-UBUNTU-01:~$ dig ANY orebibou.com +noall +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> ANY orebibou.com +noall +answer
;; global options: +cmd
orebibou.com.           86389   IN      NS      ns3.xserver.jp.
orebibou.com.           86389   IN      SOA     ns1.xserver.jp. root.sv0.xserver.jp. 0 10800 3600 604800 3600
orebibou.com.           86389   IN      NS      ns1.xserver.jp.
orebibou.com.           86389   IN      NS      ns2.xserver.jp.
orebibou.com.           86389   IN      NS      ns5.xserver.jp.
orebibou.com.           86389   IN      MX      0 orebibou.com.
orebibou.com.           86389   IN      NS      ns4.xserver.jp.
orebibou.com.           86389   IN      A       157.112.152.17

4.IPアドレス、ホスト名のみを取得する

スクリプトなどで使う際、IPアドレスやホスト名のみを返してほしい場合がある。
そんな時は、「+short」を付与することで対応可能だ。

dig ドメイン名 +short
dig -x ドメイン名 +short #逆引きの場合
blacknon@BS-PUB-UBUNTU-01:~$ dig orebibou.com +short
157.112.152.17
blacknon@BS-PUB-UBUNTU-01:~$ dig -x 172.28.0.170 +short
BS-PUB-REDMINE.

5.参照するDNSサーバを指定する

参照するDNSサーバを指定する場合は、「@DNSサーバ(IPアドレス)」で行える。

blacknon@BS-PUB-UBUNTU-01:~$ dig @8.8.8.8 orebibou.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @8.8.8.8 orebibou.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22790
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
orebibou.com. 78580 IN A 157.112.152.17

;; Query time: 37 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Nov 20 15:25:22 JST 2016
;; MSG SIZE rcvd: 57

6.TCPで問い合わせを行う

通常、digではUDPでの問い合わせを行っているのだが、応答サイズが512バイトを超える場合はTCPでの問い合わせに切り替わるようになっている。
これを、最初からTCPでの問い合わせを行わせる場合は「+vc」オプションを付与する。

dig ドメイン名 +vc

7.再起問い合わせを行わない

対象となるDNSサーバで保持しているキャッシュでのみ問い合わせを行う(再起問い合わせを行わない)場合は、「+norecurse」オプションを付与する。

dig ドメイン名 +norecurse

8.ルートDNSから確認を行う

ルートDNSから名前解決の流れを確認する場合は、「+trace」オプションを付与する。

dig ドメイン名 +trace
blacknon@BS-PUB-UBUNTU-01:~$ dig orebibou.com +noall +trace +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> orebibou.com +noall +trace +answer
;; global options: +cmd
. 34616 IN NS a.root-servers.net.
. 34616 IN NS b.root-servers.net.
. 34616 IN NS c.root-servers.net.
. 34616 IN NS d.root-servers.net.
. 34616 IN NS e.root-servers.net.
. 34616 IN NS f.root-servers.net.
. 34616 IN NS g.root-servers.net.
. 34616 IN NS h.root-servers.net.
. 34616 IN NS i.root-servers.net.
. 34616 IN NS j.root-servers.net.
. 34616 IN NS k.root-servers.net.
. 34616 IN NS l.root-servers.net.
. 34616 IN NS m.root-servers.net.
. 34616 IN RRSIG NS 8 0 518400 20161129170000 20161116160000 39291 . GAH8f/1gyiRBYZJW26DiCTkZQNKROfEW12L3GhdZ6Z01RLmuz5vTfrCg MmkhynOjVZ7z7egke6G4g+gLdKpigv+bdmKihhLJRrSBm/gMpvSqDz+1 gaJib1kGFjzNzlZpMtzTSjn7FgvCfaYUkMl6uCS4di0cgJUyNkXeCrys ipmqatYSjFW8DNNevTQxLZ+PyAXTa8JFeDxTAjhqBNnAa0gkOda/D2w3 pjpuKgr3O7y3vy4ZtEGU6N4Y+AnBwFxRvPsWUss1vDJLfh9jpyHaBgyA 4TGWgfFJkwlpxKNTZ4bLHT2yCpbwrE6QGgm/gxC45TFGLcmpf8RTNlkQ rkGAKA==
;; Received 525 bytes from XXX.XXX.XXX.XXX#53(XXX.XXX.XXX.XXX) in 4 ms

com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20161203050000 20161120040000 39291 . NruSInD5nVbfdXxwQfcGy/rPx0k2SjXicq7cm60ENmpPXz3cGBn7Bxbg qOg+t9JSpCkh29BzwxNwKmOzjCAeUciN7huzVbMt2bdDcLgImPesmIdH x+O4o7Nv1AViFbhEvDZ7ekMq7f9u9+zF36gdnPFPHdUTqWDQbAD4DekZ A1cFKOHQ7qkj2diOkvAx8va7+a2OxQQAfABVwKL7Fn8IvQe5TuUbmBWT Exvm6A9AMCamOMF90EJgSB8ZztbjaQ35TzuFuaUwblWTkGexqnfSCLwk IZsc4atbggFAG4g4KW7H0I+Zd+Cly11sfh/QYCEN146wubarNGYMKOuS rtRxsg==
;; Received 864 bytes from 192.112.36.4#53(g.root-servers.net) in 11 ms

orebibou.com. 172800 IN NS ns1.xserver.jp.
orebibou.com. 172800 IN NS ns2.xserver.jp.
orebibou.com. 172800 IN NS ns3.xserver.jp.
orebibou.com. 172800 IN NS ns4.xserver.jp.
orebibou.com. 172800 IN NS ns5.xserver.jp.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20161126054847 20161119043847 6404 com. CX+Ran2nMh1niLakNtUZGHyQkL/BmsA4rve0i9eim5lbPoai2S/oRt6M UjfjAV0RkolD2YTiUXtucIAANQEa6H+JTXVNSRPMXOGeCdErUhTA24hC yzkAWjIZAyyrXyJgesqmFtJCpsnhINZ8AX5dIGxErLv5kluB7MdC7cPk XS0=
POM0E9T9KRVDHN1HO3U4RIR8M8T9TD3L.com. 86400 IN NSEC3 1 1 0 - POMHEVU7A7D1H8GPQH1U7KMT6DP8NR13 NS DS RRSIG
POM0E9T9KRVDHN1HO3U4RIR8M8T9TD3L.com. 86400 IN RRSIG NSEC3 8 2 86400 20161125055412 20161118044412 6404 com. rlKgsCT91JVCpeUSNFrpWV8xFO7ufAhtu2i0Pk/KNwR55hInRPZ9wTQv krJ8fvibTReoopKpep2B+PSOqcN0VV5gPET5Lv9hWg63QgDwRuRmb64s dGFY1bhVzFsG5NoACYpF/iSKWE9BlabwAwAOGDvLy4YVxeQ4gpydnDxe pCc=
;; Received 626 bytes from 192.41.162.30#53(l.gtld-servers.net) in 172 ms

orebibou.com. 86400 IN A 157.112.152.17
;; Received 46 bytes from 219.94.203.247#53(ns4.xserver.jp) in 11 ms

9.問い合わせ結果が長い行を改行する

問い合わせをした結果が長い行を、そのままだと見にくいので適切な箇所で改行させる場合は「+multiline」オプションを用いる。

dig ドメイン名 +multiline
blacknon@BS-PUB-UBUNTU-01:~$ dig ANY orebibou.com +noall +answer

; <<>> DiG 9.10.3-P4-Ubuntu <<>> ANY orebibou.com +noall +answer
;; global options: +cmd
orebibou.com.           86399   IN      SOA     ns1.xserver.jp. root.sv0.xserver.jp. 0 10800 3600 604800 3600
orebibou.com.           86399   IN      NS      ns4.xserver.jp.
orebibou.com.           86399   IN      NS      ns1.xserver.jp.
orebibou.com.           86399   IN      NS      ns2.xserver.jp.
orebibou.com.           86399   IN      NS      ns3.xserver.jp.
orebibou.com.           86399   IN      MX      0 orebibou.com.
orebibou.com.           86399   IN      A       157.112.152.17
orebibou.com.           86399   IN      NS      ns5.xserver.jp.
blacknon@BS-PUB-UBUNTU-01:~$ dig ANY orebibou.com +noall +answer +multiline

; <<>> DiG 9.10.3-P4-Ubuntu <<>> ANY orebibou.com +noall +answer +multiline
;; global options: +cmd
orebibou.com.           86399 IN NS ns5.xserver.jp.
orebibou.com.           86399 IN A 157.112.152.17
orebibou.com.           86399 IN MX 0 orebibou.com.
orebibou.com.           86399 IN SOA ns1.xserver.jp. root.sv0.xserver.jp. (
                                0          ; serial
                                10800      ; refresh (3 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                3600       ; minimum (1 hour)
                                )
orebibou.com.           86399 IN NS ns3.xserver.jp.
orebibou.com.           86399 IN NS ns2.xserver.jp.
orebibou.com.           86399 IN NS ns4.xserver.jp.
orebibou.com.           86399 IN NS ns1.xserver.jp.

10.DNSSECで問い合わせをする

DNSSECで問い合わせをする場合は「+dnssec」オプションを付与する。

dig ドメイン名 +dnssec

11.DNSサーバのバージョンを確認する

今時はあまりないと思うが、参照先のDNSサーバの種類やバージョンを得る場合は以下のようにコマンドを実行する。

dig @DNSサーバ chaos version.bind txt
blacknon@BS-PUB-UBUNTU-01:~$ dig @XXX.XXX.XXX.XXX chaos version.bind txt

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @XXX.XXX.XXX.XXX chaos version.bind txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<