Wie funktioniert dig + trace eigentlich?

18

Wenn ich mir die Handbuchseite für dig anschaue, erhalte ich Folgendes:

+[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.

Wie funktioniert das in der Praxis? Was wäre die äquivalente digBefehlsfolge (ohne + trace), die funktional äquivalent wäre?

Doktor J
quelle

Antworten:

37

dig +trace Es wird so getan, als wäre es ein Nameserver, und der Namespace-Baum wird mithilfe von iterativen Abfragen, beginnend am Stamm des Baums, abgearbeitet, wobei Verweise auf dem Weg verfolgt werden.

Als erstes wird der normale DNS-Server nach NS-Einträgen für "." Gefragt.

Nachdem es eine Antwort erhalten hat, die die aktuelle Liste der Stammnamenserver darstellt, wählt es einen aus und fragt dann nach dem A-Datensatz für diesen Namen, wenn er beim ersten Mal nicht im Abschnitt für zusätzliche Datensätze abgerufen wurde eine IP-Adresse, an die die nächste Abfrage gesendet werden soll. Nehmen wir an, es wählt f.root-servers.net mit der IP-Adresse 192.5.5.241 aus.

An dieser Stelle verwenden wir dig +trace www.google.co.uk.als Befehl einen Domänennamen, für den der Auflösungspfad nachverfolgt werden soll.

Die nächste Abfrage hinter den Kulissen lautet:

$ 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

Wow, jetzt wissen wir, dass es Nameserver für gibt ukund das ist das einzige, was der Root-Server kennt. Dies ist eine Überweisung , da wir keine Rekursion angefordert haben ( +norecursedeaktiviert).

Gut, wir spülen und wiederholen. Diesmal wählen wir einen der ukNameserver aus und stellen ihm die gleiche Frage .

$ 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

Genial, jetzt haben wir herausgefunden, dass der ukTop-Level-Nameserver weiß, dass es eine Zone gibt, die aufgerufen wird, google.co.ukund uns gebeten, diesen Nameservern unsere Frage zu stellen. Dies ist eine weitere Überweisung.

Spülen, wiederholen.

Dieses Mal haben wir jedoch keine A-Datensätze im Abschnitt "Zusätzliche Datensätze" der Antwort erhalten. Wählen Sie daher einen aus, z. B. "ns2.google.com", und suchen Sie die Adresse. Wir starten eine Abfrage neu (wieder im Stammverzeichnis) und jagen den Baum ab, um die IP-Adresse für ns2.google.com zu ermitteln. Ich werde diesen Teil der Kürze halber überspringen, aber wir erfahren, dass die IP dafür 216.239.34.10 ist.

Unsere nächste Frage lautet also:

$ 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

Und wir sind fertig! (endlich) Woher wissen wir, dass wir fertig sind? Wir haben eine Antwort auf unsere Anfrage erhalten, bei der es sich um die A-Einträge für www.google.co.uk handelt. Sie können auch feststellen, dass es sich nicht mehr um eine Überweisung handelt. Das aaBit ist in der letzten Antwort gesetzt, was bedeutet, dass dies die maßgebliche Antwort für Ihre Anfrage ist.

Das passiert also bei jedem Schritt auf Ihrem Weg dig +trace.

Beachten Sie, dass bei einer DNSSEC-fähigen Version von dig, die Sie +dnssecdem Befehl hinzufügen , möglicherweise mehrere Datensätze angezeigt werden. Was diese zusätzlichen Aufzeichnungen sind, bleibt als Übung für den Leser übrig ... aber es wird erklärt, wie es dig +sigchasefunktioniert.

Milli
quelle
Ein Zweifel: in der Anfrage an @ 192.5.5.241, die Antworten in den zusätzlichen Abschnitt, sie sind die sogenannten Glue - Records ?
José Tomás Tocino
Ja, da der Name der A-Datensätze innerhalb oder unterhalb der Zone liegt, auf die sich die NS-Datensätze im Abschnitt Authority beziehen, sind sie erforderlich, um den Lösungsprozess fortzusetzen.
milli
1

Nehmen wir an, Sie haben nachgeschaut

www.domain.co.uk

DNS ist eine Hierarchie, die mit Stammservern beginnt, die wissen, welche Server für die TLDs (der letzte Teil des Domänennamens) maßgeblich sind. Also die Äquivalente zu

dig subdomain.domain.co.uk

Schritt für Schritt wäre:

dig SOA @g.root-servers.net uk

(dh fragen Sie einen der Root-Server ab, um herauszufinden, wer für .uk maßgeblich ist.)

Dies reagiert mit einer Reihe von autoritativen britischen Servern. Deshalb fragen wir sie, wer co.uk hat

dig SOA @ns6.nic.uk co.uk

Und wir erfahren, dass die SOA (Behörde) sich auf denselben Servern befindet

Fragen wir also ns1.nic.uk ab, um zu sehen, wer domain.co.uk hat

dig SOA @ns1.nic.uk domain.co.uk

Dies kommt zurück und besagt, dass die Autorität für die Domain bei dns.dns1.de liegt (plus Backups).

Nun können wir nach dem A-Datensatz fragen:

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
Paul
quelle
Wie gehe ich auf das Thema Delegation ein? Angenommen, die Berechtigung für domain.co.uk lautet dns.dns1.de, members.domain.co.uk wurde jedoch an dns.dns2.com delegiert, und ich suche joe.members.domain.co.uk. Woher weiß ich, wann es "sicher" ist, das SOA-Karussell zu verlassen und die anderen Datensätze abzufragen?
Doktor J
Der eigentliche Prozess fragt die Aganze Zeit nach der Aufzeichnung. Es gibt keine Magie, auf SOAAbfragen umzuschalten. (Dies konnte nicht der Fall sein, da ein auflösender Proxy nicht wusste, wann er zurückwechseln sollte.) Es ist auch keine magische Änderung des Domainnamens in der Frage. Es ist den www.domain.co.uk.ganzen Weg durch. Dies ist wichtig zu wissen, da jeder der abgefragten Content-Server die vollständige Antwort liefern kann .
JdeBP
@DoktorJ Ja, das ist mein Fehler JdeBP ist richtig. Ich habe versucht, einen Punkt mit der SOA zu vereinbaren, aber das hat sich in der Antwort verwickelt. Die andere Antwort ist genauer.
Paul
@ Paul danke für das Follow-up; Ich habe die andere Antwort als die richtige Antwort markiert, um allen anderen zu helfen, die möglicherweise hier gelandet sind (keine Beleidigung für Sie!) :)
Doktor J
@ doktorj Überhaupt nicht, das ist genau so, wie es sein sollte :)
Paul