Digのmanページを見ると、次のことがわかります。
+[no]trace
Toggle tracing of the delegation path from the root name servers for the name
being looked up. Tracing is disabled by default. When tracing is enabled, Dig
makes iterative queries to resolve the name being looked up. It will follow
referrals from the root servers, showing the answer from each server that was
used to resolve the lookup.
では、これは実際にはどのように機能するのでしょうか?機能的に同等な一連のDig
コマンド(+ traceなし)は何ですか?
_Dig +trace
_は、ネームサーバーのふりをして機能し、ツリーのルートから始まる反復クエリを使用して名前空間ツリーを下に移動します。
最初に行うことは、通常のシステムDNSサーバーにNS "のレコードを要求します。"
ルートネームサーバーの現在のリストとなる応答を受け取った後、1つを選択し、追加のレコードセクションで最初に取得しなかった場合は、その名前のAレコードを要求して、取得します。次のクエリの送信先となるIPアドレス。 IPアドレスが192.5.5.241のf.root-servers.netを選択するとします。
この時点で、解決パスを追跡するドメイン名を指定したコマンドとして_Dig +trace www.google.co.uk.
_を使用します。
次の舞台裏のクエリはこれです:
_$ Dig +norecurse @192.5.5.241 www.google.co.uk
; <<>> Dig 9.9.4 <<>> +norecurse @192.5.5.241 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8962
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 11, ADDITIONAL: 15
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.uk. IN A
;; AUTHORITY SECTION:
uk. 172800 IN NS ns5.nic.uk.
uk. 172800 IN NS ns6.nic.uk.
uk. 172800 IN NS ns4.nic.uk.
uk. 172800 IN NS nsc.nic.uk.
uk. 172800 IN NS ns2.nic.uk.
uk. 172800 IN NS ns3.nic.uk.
uk. 172800 IN NS nsd.nic.uk.
uk. 172800 IN NS nsa.nic.uk.
uk. 172800 IN NS ns7.nic.uk.
uk. 172800 IN NS nsb.nic.uk.
uk. 172800 IN NS ns1.nic.uk.
;; ADDITIONAL SECTION:
ns1.nic.uk. 172800 IN A 195.66.240.130
ns2.nic.uk. 172800 IN A 217.79.164.131
ns3.nic.uk. 172800 IN A 213.219.13.131
ns4.nic.uk. 172800 IN A 194.83.244.131
ns5.nic.uk. 172800 IN A 213.246.167.131
ns6.nic.uk. 172800 IN A 213.248.254.130
ns7.nic.uk. 172800 IN A 212.121.40.130
nsa.nic.uk. 172800 IN A 156.154.100.3
nsb.nic.uk. 172800 IN A 156.154.101.3
nsc.nic.uk. 172800 IN A 156.154.102.3
nsd.nic.uk. 172800 IN A 156.154.103.3
ns1.nic.uk. 172800 IN AAAA 2a01:40:1001:35::2
ns4.nic.uk. 172800 IN AAAA 2001:630:181:35::83
nsa.nic.uk. 172800 IN AAAA 2001:502:ad09::3
;; Query time: 45 msec
;; SERVER: 192.5.5.241#53(192.5.5.241)
;; WHEN: Tue Feb 11 19:19:14 MST 2014
;; MSG SIZE rcvd: 507
_
わあ、これでuk
のネームサーバーがあり、それだけがルートサーバーが知っていることがわかりました。 これは参照です、再帰を要求しなかったため(_+norecurse
_はそれをオフにします)。
すごい、すすぎと繰り返します。今回は、uk
ネームサーバーの1つを選びますそして同じ質問をします。
_$ Dig +norecurse @195.66.240.130 www.google.co.uk
; <<>> Dig 9.9.4 <<>> +norecurse @195.66.240.130 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 618
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.uk. IN A
;; AUTHORITY SECTION:
google.co.uk. 172800 IN NS ns1.google.com.
google.co.uk. 172800 IN NS ns3.google.com.
google.co.uk. 172800 IN NS ns2.google.com.
google.co.uk. 172800 IN NS ns4.google.com.
;; Query time: 354 msec
;; SERVER: 195.66.240.130#53(195.66.240.130)
;; WHEN: Tue Feb 11 19:22:47 MST 2014
;; MSG SIZE rcvd: 127
_
すばらしい、uk
トップレベルのネームサーバーが_google.co.uk
_というゾーンがあることを知っており、これらのネームサーバーに質問するように指示することがわかりました。これは別の紹介です。
すすぎ、繰り返します。
ただし、今回は、応答の追加レコードセクションでAレコードを取得しなかったため、ns2.google.comなどの1つを選択し、そのアドレスを検索する必要があります。クエリをrestart(ルートで再度)し、ツリーを追跡してns2.google.comのIPアドレスを見つけます。簡潔にするためにその部分は省略しますが、そのIPは216.239.34.10であることがわかります。
したがって、次のクエリは次のとおりです。
_$ Dig +norecurse @216.239.34.10 www.google.co.uk
; <<>> Dig 9.9.4 <<>> +norecurse @216.239.34.10 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33404
;; flags: qr aa; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.google.co.uk. IN A
;; ANSWER SECTION:
www.google.co.uk. 300 IN A 74.125.225.216
www.google.co.uk. 300 IN A 74.125.225.223
www.google.co.uk. 300 IN A 74.125.225.215
;; Query time: 207 msec
;; SERVER: 216.239.34.10#53(216.239.34.10)
;; WHEN: Tue Feb 11 19:26:43 MST 2014
;; MSG SIZE rcvd: 82
_
これで完了です。 (最終的に)完了したことをどのようにして知るのですか? www.google.co.ukのAレコードであるクエリに対する回答を得ました。また、紹介ではないため、最後の応答にaa
ビットが設定されていることもわかりますこれは、信頼できる回答ですあなたのクエリ。
そのため、_Dig +trace
_を使用すると、途中の各ステップで何が行われます。
DNSSEC対応バージョンのDigを使用していて、コマンドに_+dnssec
_を追加すると、さらに多くのレコードが表示される場合があります。これらの余分なレコードは読者の演習として残されていますが、_Dig +sigchase
_がどのように機能するかについて説明します。
あなたが見上げていたとしましょう
www.domain.co.uk
DNSは階層であり、TLD(ドメイン名の最後の部分)に対して権限のあるサーバーを知っているルートサーバーから始まります。だからに等しい
Dig subdomain.domain.co.uk
ステップバイステップは:
Dig SOA @g.root-servers.net uk
(つまり、ルートサーバーの1つをクエリして、誰が.ukの権限があるかを確認します)
これは一連の信頼できるukサーバーで応答するので、co.ukを持っている人に尋ねます
Dig SOA @ns6.nic.uk co.uk
また、SOA(権限)は同じサーバーにあると言われています
それでは、ns1.nic.ukをクエリして、domain.co.ukを持つユーザーを確認してみましょう
Dig SOA @ns1.nic.uk domain.co.uk
これは戻ってきて、ドメインの権限はdns.dns1.de(およびバックアップ)にあると言います。
これで、Aレコードを要求できます。
Dig A @dns.dns2.de www.domain.co.uk
;; QUESTION SECTION:
;www.domain.co.uk. IN A
;; ANSWER SECTION:
www.domain.co.uk. 86400 IN CNAME domain.co.uk.
domain.co.uk. 86400 IN A 95.130.17.36