dig コマンドを理解する
dig コマンドをたたくのはいいが内容が読めない・・・。ということで dig コマンドの内容を理解してみる。
digコマンドとは?
digコマンドとは、domain information groperの略で、直訳すると「ドメイン情報の手探りツール」といった意味になります。ネームサーバに対して問い合わせを行い、その応答結果を表示するコマンドで、BINDとともに提供されています。
引用元 => @IT:DNS Tips:digコマンドとは
ところで、BINDはなんでしょうか。
BINDとは?
BIND(バインド、Berkeley Internet Name Domain、以前の呼名はBerkeley Internet Name Daemon)はインターネットでもっとも利用されているDNSサーバである。
引用元=>BIND - Wikipedia
DNSサーバとのこと。
digコマンドの使い方
digコマンド形式……dig @server domain query-type
- 指定する内容
- server:利用するネームサーバ
- domain:情報を知りたいドメイン名
- query-type:知りたい情報のタイプ
dig -h をみるとオプションなど色々ありますね。
Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt} {global-d-opt} host [@local-server] {local-d-opt} [ host [@local-server] {local-d-opt} [...]]
digコマンド出力例
$ dig @10.20.138.1 google.com A ; <<>> DiG 9.3.4-P1.1 <<>> @10.20.138.1 google.com A ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6499 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 0 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 300 IN A 74.125.45.100 google.com. 300 IN A 74.125.67.100 google.com. 300 IN A 209.85.171.100 ;; AUTHORITY SECTION: google.com. 345600 IN NS ns4.google.com. google.com. 345600 IN NS ns1.google.com. google.com. 345600 IN NS ns2.google.com. google.com. 345600 IN NS ns3.google.com. ;; Query time: 49 msec ;; SERVER: 10.20.138.1#53(10.20.138.1) ;; WHEN: Fri Apr 10 17:09:22 2009 ;; MSG SIZE rcvd: 148
digコマンド出力の内容を見ていく
status……正しく情報を得られた場合はNOERROR、ドメイン名が存在しない場合は NXDOMAINと表示されます。
flags……この応答がどういう意味を持つのかを示すフラグが表示されています。特に「aa」が付く場合は、応答を返したネームサーバが権威付きの回答をしていることを示します。
QUERY/ANSWER/AUTHORITY/ADDITIONAL……それぞれのセクションに何個のリソースレコードを返したかが表示されます。
statusの部分
【status: NOERROR】となっており、存在するということになります。
flagsの部分
【flags: qr rd ra】となっていますが、これはなんでしょうか。
QR
メッセージがサーバからの回答 (response) の場合は QR が表示されます。
dig コマンド実行結果は「サーバからの回答」ですので QR は必ず表示されます。
AA
回答したネームサーバが、問い合わせたドメイン名について 権威を持っている場合は AA が表示されます。
TC
メッセージの切り詰めが行われた場合 (メッセージが UDP の 制限である 512byte 超過) TC が表示されます。
RD
再帰的問い合わせを要求の場合に表示されますが、 RD は常に表示されるようです。
RA
サーバが再帰的問い合わせをサポートしている場合は RA が表示されます。
引用元=>HugeDomains.com - Shop for over 300,000 Premium Domains
これによると、【flags: qr rd ra】は、「サーバからの回答で、再帰的問い合わせをサポートしている」ということになります。
再帰的問い合わせとは?
通常,DNS サーバに問合せると, そのサーバだけで解決できない時は,答を得られるまで, 代行して再帰的に問合せてくれます.+norecurse をつけると, 再帰的に問合せず,たらい回す先のサーバだけを教えてくれます.
ただし,その DNS サーバがすでに問合せ済で, キャッシュに情報が残っている場合は,このオプションを用いても, 答を教えてくれます.
引用元=>dig コマンドを使いこなす - いますぐ実践! Linuxシステム管理 / Vol.022
- norecurseオプション(+norec)をつけると再帰的に問い合わせないで、たらい回す先のサーバだけ教えてくれるとのことなので、やてみましょう。
$ dig +norec @10.20.138.1 google3.com A ; <<>> DiG 9.3.4-P1.1 <<>> +norec @10.20.138.1 google3.com A ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27212 ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 12 ;; QUESTION SECTION: ;google3.com. IN A ;; AUTHORITY SECTION: com. 14914 IN NS a.gtld-servers.net. com. 14914 IN NS b.gtld-servers.net. com. 14914 IN NS c.gtld-servers.net. com. 14914 IN NS d.gtld-servers.net. com. 14914 IN NS e.gtld-servers.net. com. 14914 IN NS f.gtld-servers.net. com. 14914 IN NS g.gtld-servers.net. com. 14914 IN NS h.gtld-servers.net. com. 14914 IN NS i.gtld-servers.net. com. 14914 IN NS j.gtld-servers.net. com. 14914 IN NS k.gtld-servers.net. com. 14914 IN NS l.gtld-servers.net. com. 14914 IN NS m.gtld-servers.net. ;; ADDITIONAL SECTION: a.gtld-servers.net. 1304 IN A 192.5.6.30 b.gtld-servers.net. 1304 IN A 192.33.14.30 c.gtld-servers.net. 1304 IN A 192.26.92.30 d.gtld-servers.net. 1304 IN A 192.31.80.30 e.gtld-servers.net. 1304 IN A 192.12.94.30 f.gtld-servers.net. 1304 IN A 192.35.51.30 g.gtld-servers.net. 1304 IN A 192.42.93.30 h.gtld-servers.net. 1304 IN A 192.54.112.30 i.gtld-servers.net. 1304 IN A 192.43.172.30 j.gtld-servers.net. 1304 IN A 192.48.79.30 k.gtld-servers.net. 1304 IN A 192.52.178.30 l.gtld-servers.net. 1304 IN A 192.41.162.30 ;; Query time: 9 msec ;; SERVER: 10.20.138.1#53(10.20.138.1) ;; WHEN: Fri Apr 10 17:29:16 2009 ;; MSG SIZE rcvd: 448
上記のような、たらい回す先のサーバ情報が帰ってきました。では今度は、再帰的問い合わせをやってみましょう。
$ dig @10.20.138.1 google3.com A ; <<>> DiG 9.3.4-P1.1 <<>> @10.20.138.1 google3.com A ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 22038 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;google3.com. IN A ;; Query time: 909 msec ;; SERVER: 10.20.138.1#53(10.20.138.1) ;; WHEN: Fri Apr 10 17:30:04 2009 ;; MSG SIZE rcvd: 29
上記のようにかえってきました。【status: SERVFAIL】となっています。SERVFAILとはなんでしょか?
●レスポンス・コード*1(RCODE):4ビット
0:正常(NoError)
1:フォーマット・エラー(FormErr)
2:サーバ・エラー(ServFail)
3:問い合わせされた名前は見つからない(NXDomain)
4:その問い合わせは実装していない(NotImp)
5:何らかの理由による拒否(Refused)
など
引用元=>DNSの設定は正しいか?〜nslookup/ipconfig〜:ネットワーク・コマンドでトラブル解決(7) - @IT
上記の説明によると、「サーバ・エラー(ServFail)」のようです。
これで、再帰的問い合わせとは何かが理解できました。
QUERY/ANSWER/AUTHORITY/ADDITIONAL をどう見るか
返ってきた返事は以下となっています。1つ1つ見ていきましょう。
QUERY
問い合わせ内容を格納する。
;; QUESTION SECTION:
;google.com. IN A
google.com の A というタイプについての問い合わせはわかったのですが、IN はなんでしょうか・・。
INは
レコードのクラスを表すこの部分は インターネットで使うレコードであることを意味します。
だそうです。
ANSWER
回答内容を格納する。
;; ANSWER SECTION: google.com. 300 IN A 74.125.45.100 google.com. 300 IN A 74.125.67.100 google.com. 300 IN A 209.85.171.100
google.com のIPが得られたことがわかります。
AUTHORITY
;; AUTHORITY SECTION: google.com. 345600 IN NS ns4.google.com. google.com. 345600 IN NS ns1.google.com. google.com. 345600 IN NS ns2.google.com. google.com. 345600 IN NS ns3.google.com.
オーソリティとは・・・
オーソリティ(authority)とは日本語で「権威」のことです。DNS の言葉としては、委任されたドメインの情報を管理できるという「権威」を指します。「権威」そのものを指すこともありますし、「権威を持つもの」の意味で使うこともあります。
ドメイン名はツリー構造をしており、委任により管理が分散されています。それぞれのドメインの管理者は、委任されたドメインを自由に管理することができ、この状態を「オーソリティを持っている」といいます。管理者がサブドメインをさらに別の管理者に委任すると、オーソリティは委任先の管理者が持つことになります。
引用元@IT:DNS Tips:委任された管理者が持つ、「オーソリティ」とは
つまり、ドメインを自由に管理することができるサーバということですね。
ADDITIONAL
追加情報。例えば回答されたMXレコード・ホストやNSレコード・ホストのIPアドレス(Aレコード)など。
;; Query time: 49 msec ;; SERVER: 10.20.138.1#53(10.20.138.1) ;; WHEN: Fri Apr 10 17:09:22 2009 ;; MSG SIZE rcvd: 148
追加情報には、問い合わせにかかった時間や、DNSサーバ、時間、メッセージのサイズなどが書かれていますね。
引用元=>DNSの設定は正しいか?〜nslookup/ipconfig〜:ネットワーク・コマンドでトラブル解決(7) - @IT
query-typeについてもう少し掘り下げてみる
ゾーンファイル(DNSの設定)に関する知識があると、わかりやすそうです。
a
ホスト名からIPアドレスへの変換のためのレコード
mx
メールの転送先を示すレコード
ns
下位(空白の場合はその)ドメインのネームサーバを表すレコード
digのオプションについて
【 dig 】 ドメイン情報をDNSサーバーから取得する | 日経 xTECH(クロステック) にいろいろと書いてあります。
再試行する回数を指定できたり、再帰的に検索しなくできたり、逆引きできたり、利用するポートをしていできたりいろいろできますね。
$ dig -h Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt} {global-d-opt} host [@local-server] {local-d-opt} [ host [@local-server] {local-d-opt} [...]] Where: domain is in the Domain Name System q-class is one of (in,hs,ch,...) [default: in] q-type is one of (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a] (Use ixfr=version for type ixfr) q-opt is one of: -x dot-notation (shortcut for in-addr lookups) -i (IP6.INT reverse IPv6 lookups) -f filename (batch mode) -b address[#port] (bind to source address/port) -p port (specify port number) -t type (specify query type) -c class (specify query class) -k keyfile (specify tsig key file) -y name:key (specify named base64 tsig key) -4 (use IPv4 query transport only) -6 (use IPv6 query transport only) d-opt is of the form +keyword[=value], where keyword is: +[no]vc (TCP mode) +[no]tcp (TCP mode, alternate syntax) +time=### (Set query timeout) [5] +tries=### (Set number of UDP attempts) [3] +retry=### (Set number of UDP retries) [2] +domain=### (Set default domainname) +bufsize=### (Set EDNS0 Max UDP packet size) +ndots=### (Set NDOTS value) +[no]search (Set whether to use searchlist) +[no]defname (Ditto) +[no]recurse (Recursive mode) +[no]ignore (Don't revert to TCP for TC responses.) +[no]fail (Don't try next server on SERVFAIL) +[no]besteffort (Try to parse even illegal messages) +[no]aaonly (Set AA flag in query (+[no]aaflag)) +[no]adflag (Set AD flag in query) +[no]cdflag (Set CD flag in query) +[no]cl (Control display of class in records) +[no]cmd (Control display of command line) +[no]comments (Control display of comment lines) +[no]question (Control display of question) +[no]answer (Control display of answer) +[no]authority (Control display of authority) +[no]additional (Control display of additional) +[no]stats (Control display of statistics) +[no]short (Disable everything except short form of answer) +[no]ttlid (Control display of ttls in records) +[no]all (Set or clear all display flags) +[no]qr (Print question before sending) +[no]nssearch (Search all authoritative nameservers) +[no]identify (ID responders in short answers) +[no]trace (Trace delegation down from root) +[no]dnssec (Request DNSSEC records) +[no]multiline (Print records in an expanded format) global d-opts and servers (before host name) affect all queries. local d-opts and servers (after host name) affect only that lookup. -h (print help and exit) -v (print version and exit)
まとめ
だいぶわってきました。そのほか、dig コマンドの読み方について、「こう見ると良いよ!」などありましたら、教えて下さい!