実務で使い倒すdig入門
digとはDNSを対話的に調べるための多機能クライアントである。
まずは最短コマンド
dig example.com
最も基本の使い方。デフォルトのレコード種別(A)を、OSのリゾルバ設定で指定されたDNSサーバに問い合わせます。余計な出力を抑えるなら:
dig +short example.com
IPv6を見たい:
dig AAAA example.com +short
出力の読み方(どこを見るべきか)
digの出力は大きく「ヘッダ」「QUESTION」「ANSWER」「AUTHORITY」「ADDITIONAL」「統計」に分かれます。現場でまず確認するのは以下です。
| セクション | 何が分かるか | 重要ポイント |
|---|---|---|
| HEADER | フラグ(rcode, aa, rd, ra 等)、EDNS、応答サイズ | NXDOMAIN や SERVFAIL、aa(権威)の有無 |
| QUESTION | 問い合わせたFQDNと種別 | 思っていた名前/種別かの再確認 |
| ANSWER | 実際の回答レコード | TTL、CNAMEのチェーン、A/AAAAの値 |
| AUTHORITY | どのNSが権威か | 委譲先の確認、SOAでのゾーン情報 |
| ADDITIONAL | 追加情報(多くはNSのA/AAAA) | 次の問い合わせ先直行用のヒント |
| Query time/Server | 往復時間と応答したDNS | 遅延・キャッシュの有無の当たりを付ける |
最短チェックの型:
dig example.com | sed -n '1,10p'
dig +nocmd example.com +noall +answer
dig +nocomments +noquestion +nostats +answer example.com
よく使うレコード種別
| 種別 | 用途 | 例 |
|---|---|---|
| A | IPv4アドレス | dig A example.com |
| AAAA | IPv6アドレス | dig AAAA example.com |
| CNAME | 別名(名前の転送) | dig CNAME www.example.com |
| MX | メール交換サーバ | dig MX example.com +short |
| NS | ゾーンの権威ネームサーバ | dig NS example.com |
| TXT | テキスト(SPF, DKIM, 認証等) | dig TXT example.com |
| SOA | ゾーンの開始情報 | dig SOA example.com |
| PTR | 逆引き(IP→名前) | dig -x 8.8.8.8 |
| SRV | サービスディスカバリ | dig SRV _sip._tcp.example.com |
サーバの指定・経路の見極め
特定のDNSを使って結果差分を比較するのが運用の基本です。
dig @1.1.1.1 example.com
dig @8.8.8.8 AAAA example.com +short
社内DNSや権威に直当てする場合も同様です。応答が権威かどうかはHEADERのaaフラグで判別できます。
最小出力モード(短く、速く)
| 目的 | コマンド | 補足 |
|---|---|---|
| 値だけ欲しい | dig +short name | CNAMEがあると最終解決値のみにはならない点に注意 |
| 答えだけ | dig +noall +answer name | セクションを限定 |
| 統計だけ | dig +nosearch +nocmd name +noall +stats | 遅延調査 |
| コメント削除 | dig +nocomments name | 余白を減らす |
タイムアウト・再試行・TCP/UDP
DNSは通常UDPで通信します。パケット断片化やEDNS周りで詰まる場合はTCPへ切替、また待ち時間を調整します。
dig +time=2 +tries=1 example.com
dig +tcp example.com
dig +vc example.com # +tcp と同義の実装が多い
権威が大きなDNSSEC応答を返す場合や途中FWでEDNSが壊される場合に+tcpが解決策になることがあります。
キャッシュとの差分を見る
同じ名前でも、問い合わせ先が違うとTTLや値が変わることがあります。以下を比べると傾向が見えます。
dig @resolver-of-your-os example.com
dig @8.8.8.8 example.com
dig @1.1.1.1 example.com
ANSWERのTTLが小さければ、更新直後やキャッシュエントリの残存を示唆します。
逆引き(PTR)
IPから名前を辿るには -x フラグを使います。
dig -x 1.2.3.4 +short
逆引きゾーンはin-addr.arpa(IPv4)やip6.arpa(IPv6)に委譲されているため、権威の都合で結果が出ないこともあります。
委譲の追跡(+trace)
委譲やDNSSECの途中で詰まるときは、ルートからの経路を追います。
dig +trace example.com
ルート→TLD→ゾーンと辿るので、どこで応答が失われるか、どのNSが遅いかを把握できます。権威のA/AAAAが足りない、グルーが古い、といった事故を発見しやすいです。
DNSSEC関連の手がかり
DNSSECの有無や検証可否をざっくり掴むにはフラグとレコード種別を見ます。
dig DNSKEY example.com
dig RRSIG example.com
HEADERのad(Authenticated Data)が立っていれば、問い合わせたリゾルバで検証済みです(cdで検証を抑止する実装もあります)。
EDNSと応答サイズ
近年のDNSはEDNS拡張で大きな応答を扱います。FWやロードバランサで断片化が落ちるとSERVFAILになりがちです。
dig +bufsize=4096 example.com
+bufsizeでEDNSの受信バッファを調整し、問題切り分けに使います。
名前解決の落とし穴チェックリスト
- 名前がFQDNか(末尾のドットの扱いに注意: example.com.)
- 検索サフィックスで意図しないドメインに問い合わせていないか(+nosearch)
- CNAMEの多段でTTLや応答サイズが膨らんでいないか
- 権威のNSが片系断になっていないか(AUTHORITYとADDITIONALの整合)
- MX/TXTはクォートや;を含むため +short だけでは欠落しないか
スクリプトでの使い方の型
CIや監視での最小例。0/1の成否だけ見たい場合。
dig +time=2 +tries=1 +nocomments +noquestion +nostats +answer example.com A | grep -qE '[0-9]+.[0-9]+.[0-9]+.[0-9]+'
複数レコードをJSON化したい場合はjqなどと組み合わせるか、ANSWERを正規化してパースします。
実践レシピ
- 新旧の値を同時比較:
dig old.example.com A +short; dig new.example.com A +short - 権威直撃で伝播確認:
dig @ns1.example.com www.example.com A +noall +answer - メール系トラブル:
dig MX example.com +noall +answer; dig TXT example.com +noall +answer
digと他ツールの使い分け
| ツール | 強み | 弱み | 使いどころ |
|---|---|---|---|
| dig | 出力が詳細・制御自在 | 慣れるまで冗長 | 検証・トラブルシュート本命 |
| host | 簡潔・人間向け | オプションが少ない | 単発確認 |
| nslookup | 歴史が長い | 実装差が大きい | レガシー環境で互換目的 |
実務でのコツは、目的に応じて出力を最小化し、問い合わせ先を固定して差分を見ること。迷ったら +trace と +noall +answer をまず試す、が覚えやすい指針です。