用語辞典・コマンド・確認ツール

dig

digとは

dig(ディグ)は、DNSレコードや問い合わせ過程を詳しく確認できるUnix系で広く使われるコマンドです。BIND 9に含まれるDNS検索ツールで、質問するサーバー、名前、レコード種類、プロトコル、表示項目を細かく指定できます。

基本形はdig @server name typeです。サーバーを省けばOS設定のリゾルバーを使い、種類を省けば通常Aレコードを質問します。回答だけでなくDNSヘッダーの状態・フラグ、QUESTION、ANSWER、AUTHORITY、ADDITIONAL、応答時間やメッセージ大きさも表示します。

digの価値はアドレスを一つ得ることだけではなく、「何を質問し、どのサーバーが、どの状態・フラグ・区間を持つDNSメッセージを返したか」を残せることです。

指定サーバーへDNS 問い合わせを送り、返ったメッセージをヘッダーと四つの区間へ分ける通常照会、逆引き、委任追跡、DNSSEC関連情報を一つの出力から読む
掘り下げる道具を持つDNS問い合わせツールからサーバーへ質問し、質問、回答、権威、追加の各区画と、状態、フラグ、時間、メッセージ大きさ、逆引き、ルートから権威サーバーへの追跡、DNSSECの盾を示す文字なしのピクトグラム図解
図1区間が空でもメッセージ全体が失敗とは限りません。状態、レコード種類、ANSWER数、AUTHORITYのSOAやNSを組み合わせて判断します。

DNSメッセージの区画を読む

HEADER結果と処理状態

状態、問い合わせID、QR・AA・TC・RD・RA・AD・CD等のフラグ、各区間の件数を示します。

QUESTION実際に送った質問

名前、クラス、レコード種類を確認し、検索や入力違いを排除します。

ANSWER質問への直接回答

所有者名前、TTL、クラス、種類、レコードデータが入り、CNAME連鎖を含む場合があります。

AUTHORITY回答を支えるゾーン情報

委任のNSや、否定応答のSOAなど、権威情報に関するレコードが入ります。

ADDITIONAL処理を助ける追加情報

NSのアドレスやOPT 疑似レコードなど、追加のメッセージ情報が入ります。

Footer通信条件と測定情報

問い合わせサーバー、ポート、応答時間、受信時刻、メッセージ大きさなどを確認します。

@サーバーで質問先を固定する

dig @192.0.2.53 example.com AAAAのように、先頭へ@付きサーバーを置くと、そのサーバーへ直接質問します。既定リゾルバー、パブリックリゾルバー、権威サーバーへ同じ質問を送り、キャッシュと正式データの違いを切り分けられます。

ただし権威サーバーへ再帰問い合わせを送っても、外部名の再帰を提供しないのが通常です。サーバーの役割を確認し、REFUSEDを「DNS全体の故障」と誤解しません。

状態とフラグは別の情報

状態はNOERROR、NXDOMAIN、SERVFAIL、REFUSEDなどメッセージの処理結果です。NOERRORでもANSWERが0なら、名前は存在するが指定種類がない否定応答の場合があります。NXDOMAINは名前自体の不存在です。

AAは権威応答、RDは再帰問い合わせ期待する、RAは再帰問い合わせ利用可能、TCは切り詰めです。ADは応答した検証機能付きリゾルバーがデータを認証済みと判断した印で、単に+dnssecを付けただけで自動的に検証されるわけではありません。

ANSWERの一行を五項目に分ける

レコードは通常、所有者名前、TTL、クラス、種類、RDATAの順です。TTLはそのデータをキャッシュ再利用できる残り時間の基礎で、公開から経過した実時間や反映完了時刻ではありません。

CNAMEがあると、別名レコードと最終名のA・AAAAが同じANSWERへ並ぶことがあります。最初のアドレスだけを抜き出さず、名前連鎖とTTLを読みます。複数アドレスは負荷分散・冗長化の候補で、表示順だけで優先順位を断定しません。

+短いは便利だが根拠を隠す

+shortはレコードデータを簡潔に取り出せるためスクリプト向きです。しかし状態、サーバー、フラグ、TTL、CNAMEや権威情報文脈を省くため、問題調査の最初から短い出力だけを保存すると原因を失います。

まず通常出力を記録し、処理へ値だけ渡す段階で短いを使います。空出力がNXDOMAIN、種類なし、タイムアウト、形式エラーのどれかを短いだけで判断しないよう、終了状態や標準エラーも確認します。

-xは逆名前を組み立てる

dig -x IPアドレスはIPv4ならin-addr.arpa、IPv6ならip6.arpaのPTR 問い合わせを適切な逆名前へ変換します。手作業でオクテットや4ビットを逆順にする誤りを避けられます。

PTRがない、複数ある、転送レコードと一致しない場合があります。逆引き結果はアドレス管理者が設定した名前で、接続先サービスの本人確認にはTLS証明書等を使います。

UDP、TCP、EDNSを切り分ける

DNSは通常UDPを使い、応答が切り詰めならTCPで再試行できます。+tcpで最初からTCPを試し、UDPだけ失敗するパスMTU、断片、ファイアウォール問題を比較できます。

OPT 疑似レコードはEDNSのUDPペイロード大きさ、バージョン、DNSSEC OKビット等を運び、通常のゾーンレコードではありません。パケット大きさを大きく設定すれば常に良いわけではなく、ネットワーク経路の断片処理とサーバー方針に影響されます。

+トレースは委任を追うがDNSSEC検証そのものではない

+traceはルートサーバーから始め、TLD、委任先の権威サーバーへ反復問い合わせを進めます。再帰リゾルバーのキャッシュを使った通常照会と異なり、委任のどこで期待と違うかを調べられます。

ローカルネットワークが外部権威サーバーへの直接DNSを制限していると失敗します。また、委任を表示しただけで署名連鎖を暗号学的に検証したことにはなりません。DNSSECを調べるときはDS・DNSKEY・RRSIG、検証機能付きリゾルバーのAD、信頼アンカーを別々に確認します。

nslookupとの使い分け

nslookupはWindowsを含む多くの環境で使え、対話的にサーバーと種類を切り替えやすいツールです。digはDNSメッセージの区間・フラグ・EDNS・DNSSEC関連や表示制御を詳しく扱えます。

片方が正しく片方が誤りという関係ではありません。利用可能な環境と必要な詳細で選び、質問サーバー・名前・種類・時刻を揃えて比較します。

digはDNS応答を一行で取り出すだけでなく、メッセージの状態・フラグ・区間・通信条件まで読むツールです。短い・トレース・DNSSEC等の選択肢が何を追加し、何を証明しないかを理解して使います。

BIND 9版digの構文、section、query option、reverse lookup、trace、DNSSEC関連表示:ISC BIND 9「dig manual」

関連用語