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 werdenname
: Name des resource records, der angefragt werden soll, z.B. www.example.comtype
: 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 mitdig
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!