digコマンドの使い方

DiG 9.8.4-P1のdigで検証。



■ 目次
1. digの書式
2. digオプションの順番について
3. 逆引きの問い合わせについて ( -xオプション )
4. 再帰問い合わせをしない ( +norecurseオプション aa,rdフラグ )
5. TCPによる問い合わせ ( +vcオプション、axfrオプション )
6. EDNS0による問い合わせ ( +ednsオプション、+bufsizeオプション、+dnssecオプション )
7. DNSSECによる問い合わせ (+bufsizeオプション、+dnssecオプション )
8. BINDのバージョンの確認 ( chaos version.bind txt の問い合わせ)
9. ルートヒントファイルを取得する
10. ルートDNSのトラストアンカーを取得する
11. ルートDNSから順番に問い合わせる ( +traceオプション )
12. ゾーン転送の確認 ( axfrオプション )



1. digの書式
基本的に、dig以降の引数の順番は関係ない。
詳細(ヘルプ)は、dig -h や man dig で確認できる。


2. digオプションの順番について
digオプションは、その順番や位置によって表示内容が異なってくるので注意する。
digの後にdigオプションをつけたほうがよけいな3行(スクリプト作成などでその表示が邪魔だなと個人的に思う)が出力されないので良いと思う。


3. 逆引きの問い合わせについて
デフォルトでは、IPv4アドレスは in-addr.arpa形式で、IPv6アドレスは ip6.arpa形式で問い合わせるが、かなり面倒である。
-xオプションを使うと入力が大変楽になる。


4. 再帰問い合わせをしない
再帰問い合わせというのは、下記の図のようなこと。
なぜ+norecurseを付けて試すのかというと、問い合わせ先のDNSサーバ(図でいうと赤マルのDNSサーバ)によけいなキャッシュをさせたくない場合や、
問い合わせ先DNSサーバがコンテンツDNSサーバかどうかを確認したい場合(これはフラグ見ればわかるけど) ぐらい?


5. TCPによる問い合わせ
通常、DNSの問い合わせはUDP53番宛に対して行われ、応答サイズが512バイトを超える場合はDNSサーバ側はTC=1のビットをセットして返す。
そしてクライアント側はTC=1によって応答が切り詰められたことを知り、今度はTCPで再度問い合わせを行うという仕組みになっている。
(これを、TCPフォールバックという)
しかし、digの+vcオプションを使用すると、いきなりTCP53番で問い合わせることができる。

問い合わせ先DNSサーバ(またはその手前にあるFWなど)がTCP53番を許可しているかどうかを調べるのによく利用する。
TCP53番は、DNS問い合わせ以外にもゾーン転送でも利用しているので、ゾーン転送不可の原因を調べるのに役立つ。


6. EDNS0による問い合わせ
4で説明したとおり、通常の問い合わせでは、応答サイズが512バイトを超える場合はTCPフォールバックによりTCPで問い合わせを行う仕組みを持っているが、
EDNS0とは、応答サイズが512バイトを超えてもUDPで答えられるようにした拡張機能のことである。

ただし、EDNS0での最大UDPサイズは4096バイトなので、これを超える場合はTCPフォールバックによりTCPで再問い合わせが行われる。
digのedns=0オプション、+bufsizeオプション、または+dnssecオプションを使うと、EDNS0を有効にすることができる。

自社のDNSやFWなどがEDNS0に対応しているかどうかを調べるのに役立つ。
特にFWによっては、512バイト以上のDNS問い合わせは無いとしてUDPパケットを破棄したり、フラグメント化された2番目以降のUDPパケットをうまく
処理しないものがある。


7. DNSSECによる問い合わせ
DNSSECで問い合わせる場合は、+dnssecオプションを付加する。
+dnssecオプションを付加すると、自動的にEDNS0も有効となる(最大サイズ4096バイトに設定)。
+bufsizeも併用してEDNS0の最大受信サイズを指定することもできる。


8. BINDのバージョンの確認
digを使ってBINDのバージョンの確認ができる。
今どきバージョンを返すDNSサーバはダメでしょ。


9. ルートヒントファイルを取得する
named.confが読み込んでいるルートヒントを新しく取得する。
取得したファイルに問題が無ければ、ルートヒントファイルと入れ替えてnamedを再起動(再読み込みはあまり宜しくない)。


10. ルートDNSのトラストアンカーを取得する
DNSSEC対応の設定に必要なトラストアンカー(KSK公開鍵)を取得する。


11. ルートDNSから順番に問い合わせる
digにはtraceオプションというものがある。
これを使うことで、ルートDNSサーバから、そのドメインやIPアドレスがどのように委任(登録)されているかが分かる。
また、必ずしも同じDNSサーバを経由するわけではないので、何度も同じコマンドを打って問題となっているDNSを調べることも可能。
その場合、BAD (HORIZONTAL) REFERRALやら、serverfailなどのエラーが表示されている。


12. ゾーン転送の確認
digを使って、ドメインのゾーン転送要求をすることができる。
セカンダリDNSサーバ以外から実施してゾーン転送ができる場合、プライマリDNSサーバの設定がヤバイ。
また、エラー表示によって有る程度はどこに問題があるのか判別もできる。