dig +trace
funktioniert, indem er vorgibt, dass es sich um einen Nameserver handelt, und der Namespace-Baum wird mit iterativen Abfragen heruntergefahren, beginnend am Stamm des Baums und folgt Verweisen auf dem Weg.
Als Erstes fragt der normale DNS-Server des Systems nach NS-Einträgen nach ".".
Nachdem er eine Antwort erhalten hat, die die aktuelle Liste der Stammnamenserver ist, wählt er einen aus und fragt nach dem A-Datensatz für diesen Namen, wenn er nicht beim ersten Eintrag im Abschnitt mit den zusätzlichen Datensätzen 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.
An dieser Stelle verwenden wir dig +trace www.google.co.uk.
als Befehl einen Domänennamen, für den wir den Auflösungspfad verfolgen möchten.
Die nächste Abfrage hinter den Kulissen lautet wie folgt:
$ 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, also wissen wir jetzt, dass es Nameserver gibt uk
und das ist das einzige, was der Root-Server weiß. Dies ist eine Überweisung, weil wir nicht um Rekursion gebeten haben ( +norecurse
schaltet sie aus).
Toll, wir spülen und wiederholen. Dieses Mal wählen wir einen der uk
Nameserver aus und stellen ihm dieselbe 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
Toll, jetzt haben wir herausgefunden, dass der uk
Top-Level-Nameserver weiß, dass es eine Zone gibt, die angerufen wird, google.co.uk
und uns anweist, 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 mit den zusätzlichen Datensätzen der Antwort erhalten. Daher wählen wir einen aus, beispielsweise ns2.google.com, und müssen die Adresse finden. Wir starten eine Abfrage erneut (im Stammverzeichnis erneut) und jagen den Baum nach der IP-Adresse für ns2.google.com. 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, nämlich die A-Datensätze für www.google.de. Sie können auch feststellen, dass es sich nicht mehr um einen Verweis handelt. Das aa
Bit wird in der letzten Antwort gesetzt. Dies bedeutet, dass dies die maßgebliche Antwort für Ihre Abfrage ist.
Das ist also, was bei jedem Schritt passiert, wenn Sie es verwenden dig +trace
.
Wenn Sie über eine DNSSEC-fähige Version von dig verfügen und Sie +dnssec
den Befehl hinzufügen, werden möglicherweise mehrere Datensätze angezeigt. Was diese zusätzlichen Datensätze sind, bleibt dem Leser als Übung überlassen dig +sigchase
.