digの出力
digはDNSの問い合わせ結果を確認するコマンド。ホスト名を引数に渡すと、応答の全体が表示される。
$ dig www.example.com
; <<>> DiG 9.20.26-Debian <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55790
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com. IN A
;; ANSWER SECTION:
www.example.com. 300 IN A 172.66.147.243
www.example.com. 300 IN A 104.20.23.154
;; Query time: 19 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)
;; WHEN: Mon Aug 03 08:17:28 JST 2026
;; MSG SIZE rcvd: 76
情報量が多いが、普段確認するのは以下の4箇所。
ANSWER SECTION: 名前解決の結果
問い合わせに対する答え。最初に見る箇所。
;; ANSWER SECTION:
www.example.com. 300 IN A 172.66.147.243
www.example.com. 300 IN A 104.20.23.154
各行は左から順に、ホスト名、TTL、クラス、レコードタイプ、値を表す。上の例ではwww.example.comのAレコードとして2つのIPアドレスが返っている。
なお;で始まる行はコメント。;; QUESTION SECTION:の下にある;www.example.com.は問い合わせた内容であり、答えではない。
status: 問い合わせが成功したか
ANSWER SECTIONが空の場合はHEADER行のstatusを見る。
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55790
NOERRORは問い合わせが成功した状態。ドメイン自体が存在しない場合はNXDOMAINになる。
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 31923
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
NOERRORなのにANSWER SECTIONがない場合は、ホスト名は存在するが、問い合わせたタイプのレコードが登録されていない状態。以下はIPv6アドレスを持たないホストにAAAAレコードを問い合わせた例。
$ dig github.com AAAA
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59620
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
flagsの行にあるANSWER: 0が答えの件数を表す。
TTL: キャッシュに残る秒数
ANSWER SECTIONの2列目の数値はTTL(Time To Live)であり、その答えをキャッシュしてよい残り秒数を表す。
キャッシュされた応答を返すDNSサーバでは、同じ問い合わせを繰り返すとTTLが減っていく。
$ dig www.example.com +noall +answer
www.example.com. 26 IN A 172.66.147.243
www.example.com. 26 IN A 104.20.23.154
$ dig www.example.com +noall +answer
www.example.com. 21 IN A 104.20.23.154
www.example.com. 21 IN A 172.66.147.243
DNSレコードを変更した直後に古い値が返る場合は、TTLの秒数だけ待てばキャッシュが切れる。
SERVER: どのDNSサーバが答えたか
出力の末尾にあるSERVERは、実際に問い合わせたDNSサーバのアドレス。
;; Query time: 19 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)
#53はポート番号。期待しない結果が返る場合、参照しているDNSサーバが想定と違うケースがある。特定のDNSサーバに直接問い合わせるには@でアドレスを指定する。
$ dig @8.8.8.8 www.example.com
Query timeは応答までにかかった時間。名前解決が遅い場合の確認に使う。
結果だけを見る
IPアドレスだけを知りたい場合は+shortを付ける。
$ dig www.example.com +short
172.66.147.243
104.20.23.154
TTLやレコードタイプまで見たい場合は+noall +answerを使う。ANSWER SECTIONだけが表示される。
$ dig www.example.com +noall +answer
www.example.com. 300 IN A 104.20.23.154
www.example.com. 300 IN A 172.66.147.243
補足
Aレコード以外を調べるにはホスト名の後にレコードタイプを指定する。
$ dig github.com MX +short
0 github-com.mail.protection.outlook.com.
MXレコードの先頭の数値は優先度を表す。
別名が設定されているホストでは、ANSWER SECTIONにCNAMEと最終的なAレコードが並ぶ。
$ dig www.iana.org +noall +answer
www.iana.org. 5 IN CNAME www.iana.org.cdn.cloudflare.net.
www.iana.org.cdn.cloudflare.net. 300 IN A 104.18.25.232
www.iana.org.cdn.cloudflare.net. 300 IN A 104.18.24.232
digが入っていない環境でIPアドレスだけを調べる方法は【getent hosts】 nslookupやdigコマンドが無いLinux環境でIPアドレスを調べる
を参照。
DNSの結果を無視して特定のIPアドレスに接続を確認したい場合はcurlのresolveオプションでDNSを回避してIPアドレスを直接指定する を参照。
オプションの詳細はdig - DNS lookup utility (BIND 9 Manual Pages) を参照。
