Vorbereitung

Der Domain Information Groper

Die man page von dig beschreibt den Funktionsumfang und Anwendungszweck von dig eigentlich am besten:

dig (domain information groper) is a flexible tool for interrogating DNS name servers. It performs DNS lookups and displays the answers that are returned from the name server(s) that were queried. Most DNS administrators use dig to troubleshoot DNS problems because of its flexibility, ease of use and clarity of output. Other lookup tools tend to have less functionality than dig.

Ich persönlich würde noch hinzufügen, dass dig hervorragend eingesetzt werden kann, um die Funktionsweise des DNS praktisch zu erlernen.

dig ist also ein Kommandozeilenwerkzeug, um Anfragen an DNS-Server zu schicken. Als Antwort gibt es die Informationen aus dem DNS-Auflösungsprozess und Meta-Informationen (z.B. wie lange es gedauert hat eine Antwort zu bekommen). Was und wie angefragt wird kann man dabei über Kommandozeilenargumente sehr genau einstellen. Das erlaubt es ziemlich viel auszuprobieren und ich kann Sie nur auffordern dies auch zu tun. Aber als erstes hier als Beispiel, ein einfacher Aufruf von dig:

student@lernVM:~$ dig www.example.com

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52300
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.example.com.		IN	A

;; ANSWER SECTION:
www.example.com.	13184	IN	A	93.184.216.34

;; Query time: 6 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 29 14:00:24 CEST 2020
;; MSG SIZE  rcvd: 60

Der Aufruf von dig war hier einfach:

dig www.example.com

Wenn das einzge Kommandozeilenargument ein DNS-Name ist (hier www.example.com), dann wird der A-Record zu diesem Namen (also die IPv4-Adresse) angefragt. In der Antwort oben sieht man alles, was wir im DNS-Header erwarten. Dort ist z.B. die ID angegeben und die Flags des DNS-Headers. Hier sind die drei folgenden Flags gesetzt:

  • qr: query response bit (und damit eine Antwort)
  • rd: recursion desired bit (war schon in der Anfrage gesetzt)
  • ra: recursion available bit (hier wird das rd-Flag bestätigt)

Noch interessant wäre das aa-Flag (autoritative answer), d.h. ob die Antwort eine autoritative Antwort ist. Da aa hier nicht vorkommt, ist die Antwort wohl aus einem Cache gekommen.

Nach den Flags kommen die Counter. In der Antwort steht die ursprüngliche Anfrage, eine Antwort auf diese Anfrage und ein Eintrag in der Additional Section des DNS Pakets. Die Frage wird dann auch aufgelistet und man sieht, dass der A-Record angefragt wurde. Die Antwort beinhaltet dann auch die IPv4-Adresse, die angefragt wurde. In der Answer Section ist noch etwas aufgetaucht, eine Zahl (13184). Das ist die TTL, die wir schon als Teil der Resource Records kennengelernt haben.

Ganz unten in der Antwort stehen noch ein paar Meta-Daten. Z.B. der Server, der geantwortet hat, die Größe der empfangenen Antwort, die Dauer der Anfrage und ein Zeitstempel.

Soweit, so einfach.

Typische Anwendung

Die typische Anwendung von dig sieht in etwa so aus:

dig @server name type

wobei:

  • server: Name oder IP-Adresse des Namensservers, bei dem angefragt werden soll (optional, sonst wird der lokal konfigurierte verwendet). Das @ muss dem Server-Namen, bzw. der IP-Adresse ohne Leerzeichen vorangestellt werden
  • name: Name des resource records, der angefragt werden soll, z.B. www.example.com
  • type: Typ des resource records, der zurückerwartet wird, z.B. MX, NS, ANY, AAAA. default: A

Aus dem obigen Aufruf von dig können wir jetzt auch ganz explizit die Anfrage nachbilden mit:

dig @127.0.0.53 www.example.com A

Interessanter wäre es natürlich gewesen etwas völlig anderes anzufragen, aber dazu kommen wir noch.

Schalter, Schalter, Schalter

Es gibt wie schon erwähnt viele Schalter, mit denen man die DNS-Anfrage beeinflussen kann. Allumfassend ist dabei natürlich die man page. Wir schauen uns einige ausgewählte Schalter an.

Mit -x kann man die Umkehroperation zur normalen DNS-Auflösung durchführen. D.h. anstatt einen Namen in eine IP-Adresse aufzulösen wird aus einer IP-Adresse ein Name aufgelöst. Das DNS unterstützt diese Operation mit einem cleveren Trick und nennt sich Reverse DNS. Nach dem -x-Schalter muss gefolgt von einem Leerzeichen eine IP-Adresse folgen. Mehr dazu aber in den Aufgaben.

Dann gibt es noch eine Reihe an Flags, mit denen man Dinge ein, oder ausschalten kann:

  • +[no]recurse: Hier kann man das recursion desired Flag setzen oder löschen (Beispiel: dig +norecurse www.example.com)
  • +[no]short: Hier kann man nur die gesuchte Antwort ausgeben lassen (nützlich, wenn man Kommandos mit Pipes verbinden möchte)
  • +[no]tcp: Man kann DNS auch über TCP nutzen, auch, wenn üblicherweise UDP genutzt wird und der Server Anfragen über TCP unterstützt
  • +[no]trace: Hier kann man mit dig die gesamte iterative Namensauflösung selbst übernehmen, was ja typischerweise der rekursive Namensserver für einen macht

Mit diesem Wissen ausgestattet kann es nun losgehen.

Jetzt sollten Sie in der Lage sein…

  • Komplexe Anfragen nach beliebigen Resource Records im Internet zu stellen

Spielen Sie ein bisschen mit dig herum. Keine Angst, Sie können nichts kaputt machen.

Viel Erfolg!


Zurück
Übersicht
Weiter