dig(domain information groper) コマンドは DNS メッセージをほとんどそのまま出力する為、DNS のトラブルシューティングでは必須のツールです。DNS メッセージは基本的に問い合わせと応答に同じフォーマットが使われる為、dig の出力結果を正確に判断する能力があれば DNS における問題解決能力は飛躍的に向上します。
なお、dig の基本的な構文は以下のとおりです。
dig [オプション] [@サーバ] ドメイン名 [タイプ] [クラス]
[ ] で囲まれた引数は省略可能です。[@サーバ]を省略した場合は OS 設定のフルリゾルバが、[タイプ]を省略した場合は A が、[クラス]を省略した場合は IN が指定されます。
dig コマンドの各フィールドの意味
まず、ローカルに擬似的なインターネット名前空間を用意し、「tech.yamashiro.blog.」に対して dig した結果が以下です。
[root@localhost ~]# dig tech.yamashiro.blog.
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> tech.yamashiro.blog.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43114
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tech.yamashiro.blog. IN A
;; ANSWER SECTION:
tech.yamashiro.blog. 3600 IN A 192.168.0.200
;; AUTHORITY SECTION:
yamashiro.blog. 3600 IN NS ns1.xserver.jp.
;; ADDITIONAL SECTION:
ns1.xserver.jp. 3600 IN A 192.168.0.100
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 土 7月 11 17:52:53 JST 2020
;; MSG SIZE rcvd: 108
「QUESTION」「ANSWER」「AUTHORITY」「ADDITIONAL」については、説明不要だと思いますので省略します。注目すべきは「HEADER SECTION」です。
HEADER SECTION
HEADER SECTION の各フィールドの意味は以下のとおりです。
opcode
問い合わせの種類を指定。「QUERY」「NOTIFY」「UPDATE」が入る。
status
トラブルシューティング時に最も役に立つフィールドです。以下の意味を持ちます。
NOERROR | 通常応答 |
SERVFAIL | サーバ側の異常で名前解決に失敗した |
NXDOMAIN | その名前とその下の階層にはいずれのリソースレコードも存在しない |
REFUSED | アクセス制限や管理ポリシーなどによりリクエストを拒否した |
id
DNS のトランザクション ID。問い合わせ時にランダムに生成し、応答パケットにコピーする。
flags
それぞれ以下の意味を持つ。
qr | 応答であることを示す |
aa | 管理者権限を持つ応答であることを示す |
tc | 応答が切り詰められたことを示す |
rd | dig コマンドが送った問い合わせが再帰問い合わせであったことを示す |
ra | 応答した相手がフルリゾルバであることを示す |
status フィールドの意味だけでも憶えておくと役に立ちます。