digコマンド

 ネームーサーバーの挙動を知りたい時に利用するのがdigコマンドです。Domain information groperの略だったと思いますが、間違っているかもわかりません。
 digコマンドはネームサーバーに登録されているドメインの正引き・逆引きを確かめるためのコマンドです。殊にbindを設定する際には欠かすことのできないコマンドです。nslookupやtracerouteといった似たようなコマンドがありますが、DNS情報を生のまま見たいのであればdigコマンドが最も優れています。というのはnslookupがIPアドレスなどを求めるコマンドであるのに対してdigコマンドはそのレコードを直接見るというコマンドだということです。つまりbind設定時のデバックのためのコマンドという意味合いが非常に大きいです。というのもbindがインストールされる時、設定用にこのコマンドも同時にインストールされています。

dig コマンドの基本

 digコマンドの基本形式は正引きの場合、
dig [@name-server] [domain] [q-type]
です。[@name-server]はそのドメインを検索するネームサーバー名を入力します。[domain]は検索ドメインです。[q-type]ではネームサーバーに登録されたレコードの種類を記述します。また逆引きの際は、オプション-xを利用します。
dig -x @[@name-server] [IP-Adress] [q-type]
という感じで、IPアドレスからドメインを引きます。この基本形は、指定の<サーバー名>と<クエリタイプ>が逆になっても構いません。つまり、$ dig google.com @ns.google.comのような形でも大丈夫です。また、dig google.com @121.2.73.119のようにサーバー名をIPアドレスでも指定できます。
 [@name-server]や[q-type]は省略できます。省略した場合は、前者はシステムが指定しているネームサーバーを探しに行きます。後者はマッチしたレコードをすべて返します。

 ポート番号を指定する場合は、オプション-pを利用します。
dig [@name-server] [domain] [q-type] -p [port]
dig -x @[@name-server] [IP-Adress] [q-type] -p [port]
 bindは通常UDPポート53を利用しますが、開発段階や設定時には違うポートで接続確認をしたい時などにポートを指定してドメインを引くことができます。

digコマンド結果の意味

 コマンドを実行するとダラーと殆ど意味不明の結果が現れますので解説します。例えばexample.comを正引きで引いてみると、example.comというゾーンに設定されているすべてのレコードが返ってきます。digの正引きコマンドで調べたい事柄は、
  • IPアドレス
  • IPアドレスが記載されているレコード
  • その正引きのゾーンがどのネームサーバーで管理されているか?
  • その管理しているネームサーバーのIPアドレス
こんなようなものです。主にあるドメインに対してのIPアドレスがわかれば充分ですが、それだけを調べたい場合はnslookupでも充分です。
 ここでの例のようにexample.comというドメインに対してオプションもクラスもネームサーバーも指定していない場合は、example.comを管理しているネームサーバーをくまなく検索してくれます。つまりどこでもいいからexample.comの情報をください!という意味になります。

$ dig example.com

; <<>> DiG 9.6.1-P1 <<>> example.com (*1)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43906
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 (*2)

;; QUESTION SECTION: (*3)
;example.com.            IN    A

;; ANSWER SECTION: (*4)
example.com.        728    IN    A    123.456.xxx.xxx

;; AUTHORITY SECTION: (*5)
example.com.        728    IN    NS    ns2.example.com.
example.com.        728    IN    NS    ns.example.com.

;; ADDITIONAL SECTION: (*6)
ns1.maihama-net.com.    1979    IN    A    654.321.xxx.xxx
ns.example.com.        1510    IN    A    123.456.xxx.xxx

;; Query time: 176 msec
;; SERVER: 192.168.11.1#53(192.168.11.1)
;; WHEN: Sun Dec  6 22:50:52 2009
;; MSG SIZE  rcvd: 123
● *1 ここでは調べたいドメイン名が掲示されます。

● flags: (*2) 検索結果のフラグが表示されます。何が検索されて、何が検索できなかったかを示しています。
  • QUERY: 1 送信されたクエリとその数です。ですので通常は1
  • ANSWER: 1 正引きされたその対応するIPアドレスの数です。大規模なネームサーバーですと3~4ぐらいのアンサーが返ってきます。
  • AUTHORITY: 2  ANSERを返したネームサーバー(権威あるネームサーバー)の数です。通常プライマリーネームサーバーとセカンダリネームサーバーがあるので2ぐらいを返しますが、個人で使用しているドメインなどは多少接続が切れてもいいや...ぐらいの場合は1、大規模な企業などのネームサーバーですと3~4を返すこともあります。
  • ADDITIONAL: 2 ドメインをIPアドレスに変換してくれたネームサーバーのIPアドレスの数を示しています。AUTHORITYの数とたいていは同じです。
● QUESTION SECTION(*3) example.comの正引きをしてくれたクラスとレコードを示しています。INはInternetクラス、AはAdressレコードです。InternetクラスのAレコードでexample.comのIPアドレスを見つけた!という意味になります。
 クラスには、
  • IN Internetクラス
  • CS CSNETクラス
  • CH CHAOSクラス
  • HS Hesiodクラス
がありますが、殆どがINクラスです。ネームサーバーのバージョンを調べるのにCHクラスを使用したりしますがIN以外は殆ど使いません。

● ANSWER SECTION(*4) ここでは正引きされたIPアドレスが表示されます。書式は、
[Domain].        [TTL]    [Class]    [Record]    [IP Adress]
という風になっていて、TTLというのはそのドメインがキャッシュで保存される時間を示しています。たいてい初心者はIPアドレスを確認する...というので充分です。

● AUTHORITY SECTION(*5) ここでは権威あるネームサーバーを示しています。権威あるというのはそのゾーンを管理しているという意味です。例では二つのネームサーバーが表示されています。一つのネームサーバーが止まってももう一つあるので正しく正引きができるというわけです。ここでは同様にレコードの情報も示されていますが、NSとなっています。NSレコードはネームサーバー名を定義するレコードであるドメインをネームサーバー名に利用する際に使います。ここでの例のようにexample.comは、ns.example.comというネームサーバー名にも利用されているというわけです。

● ADDITIONAL SECTION (*6) 正引きをしてくれたネームサーバーのIPアドレスをおしえてくれます。
 


Bindのバージョン情報を調べる

$ dig [@name-server] chaos txt version.bind
バージョンはchaosのtxtレコードで調べます。# dig @ns.example.com chaos txt version.bindでns.example.comで利用されているbindのバージョンが返って来ます。が、たいていの場合、セキュリティー上バージョン名を隠しているので任意の文字列が返ってきます。このバージョン名はnamed.conf内のoptionsステートメイントのversionで定義された文字列です。空の場合は何も表示されません。
[named.conf]

options {
  ...
  directory "/var/named";
  version "DNS Server";
  ...
}






プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer