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) を参照。