web-dev-qa-db-ja.com

Dig + traceは実際どのように機能しますか?

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なし)は何ですか?

19
Doktor J

_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_がどのように機能するかについて説明します。

38
milli

あなたが見上げていたとしましょう

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
1
Paul