image: dns-tree.webp:contain kind: labor language: Bash requires: [tcpip] reference: [terminal]

DNS: Wie aus einem Namen eine Adresse wird

Pakete im Internet brauchen eine IP-Adresse, Menschen merken sich Namen. Wer übersetzt zwischen beiden? Du fragst mit dig nach der Adresse von hackschule.de, gehst den Weg der Frage selbst ab, von den Root-Servern über die Server für .de bis zu dem einen, der die Antwort wirklich kennt, und siehst, warum die zweite Frage schneller beantwortet wird als die erste.

1. Vorbereitung

Diese Aktivität setzt TCP/IP-Verbindungen fort: Was eine IP-Adresse ist und was ping tut, solltest du kennen. Du brauchst nur ein Terminal.

Stelle zuerst sicher, dass du keinen Ordner geöffnet hast. Um sicherzugehen, drücke einfach den Shortcut für »Ordner schließen«: StrgK und dann F. Dein Workspace sollte jetzt ungefähr so aussehen:

Ein leerer Workspace ohne geöffneten Ordner.

Schließe die linke Seitenleiste mit StrgB, um mehr Platz zu haben, und öffne das Terminal mit StrgJ:

Der Workspace mit geöffnetem Terminal im unteren Bereich.

Rechts oben im Terminal das Symbol zum Maximieren, der Mauszeiger darauf, darunter der Hinweis »Maximize Panel«.

Mit dem Symbol rechts oben im Terminal kannst du es maximieren. Die linke Seitenleiste blendest du jederzeit mit StrgB ein und aus.

2. Einen Namen nachschlagen

In TCP/IP-Verbindungen hat ping hackschule.de einfach funktioniert. Dabei kennt das Netz nur Zahlen: Bevor das erste Paket losgeht, fragt dein Rechner einen DNS-Server (Domain Name System), welche Adresse zu dem Namen gehört. Diese Frage kannst du selbst stellen, mit dig:

dig hackschule.de

Die Ausgabe von dig hackschule.de: im QUESTION SECTION die Frage nach dem A-Eintrag, im ANSWER SECTION hackschule.de mit seiner TTL und der Adresse 5.9.51.11, darunter Query time, SERVER 127.0.0.11 und die Größe der Antwort.

Die Ausgabe ist lang, aber nur drei Stellen sind wichtig:

  • QUESTION SECTION: Die Frage. A heißt: Gesucht ist eine IPv4-Adresse.
  • ANSWER SECTION: Die Antwort, hackschule.de., eine Zahl, IN A und die Adresse. Der Punkt am Ende des Namens gehört dazu, gleich mehr dazu. Die Zahl ist die TTL (time to live): So viele Sekunden darf man sich die Antwort noch merken. Bei hackschule.de sind es höchstens 300; hat kurz vorher schon jemand gefragt, weniger, warum, steht weiter unten.
  • SERVER: Wen dig gefragt hat. In deinem Workspace ist das 127.0.0.11, ein kleiner DNS-Server, den Docker jedem Container mitgibt. Er kennt die Antwort selbst nicht, sondern fragt weiter.
Aufgabe 1Die Adresse

Welche IPv4-Adresse hat hackschule.de?

Tipp

Sie steht im ANSWER SECTION, hinter dem A.

Nur die Antwort, ohne alles drumherum, gibt dig +short aus. Schreib damit einen Befehl, der genau die Adresse von hackschule.de ausgibt:

Aufgabe 2Nur die Adresse

Schreib einen Befehl, der nur die IPv4-Adresse von hackschule.de ausgibt, sonst nichts.

3. Nicht nur Adressen

Ein Name kann mehrere Einträge haben, jeder mit einem Typ. Den Typ schreibst du vor den Namen:

dig +short AAAA google.com
dig +short MX gmail.com
dig +short NS hackschule.de

Drei Abfragen mit dig +short: eine IPv6-Adresse von google.com, die Mailserver von gmail.com mit einer Zahl davor, und die beiden Nameserver von hackschule.de bei cloudflare.com.

Typ Was er nennt Beispiel
A eine IPv4-Adresse 5.9.51.11
AAAA eine IPv6-Adresse 2a00:1450:…
MX den Mailserver für Adressen …@name, mit einer Zahl davor: Kleinere werden zuerst versucht 5 gmail-smtp-in.l.google.com.
NS die Nameserver, die für den Namen zuständig sind joel.ns.cloudflare.com.
TXT beliebigen Text, etwa zum Nachweis, dass einem eine Domain gehört "v=spf1 …"

hackschule.de hat keinen AAAA-Eintrag; dig +short AAAA hackschule.de gibt nichts aus. Nicht jeder Name hat jeden Typ.

Aufgabe 3Wohin die Post geht

Nenne einen Mailserver von gmail.com, ohne die Zahl davor.

Tipp

Der Typ für Mailserver ist MX.

4. Wer kennt die Antwort?

Kein Server der Welt kennt alle Namen. Stattdessen ist jeder Name ein Pfad, von rechts nach links gelesen, und für jedes Stück ist jemand anderes zuständig:

Der Baum der Namen: oben die Wurzel, ein Punkt, darunter die Endungen de, com und org, unter de die Namen hackschule und wikipedia, unter com google, unter org wikipedia; der Weg zu hackschule.de ist blau; daneben, wer zuständig ist: die Root-Server, DENIC für de, Cloudflare für hackschule.de.

  • Ganz oben steht die Wurzel, geschrieben als der Punkt am Ende von hackschule.de.. Für sie sind die 13 Root-Server zuständig, a.root-servers.net bis m.root-servers.net.
  • Darunter die Endungen (Top-Level-Domains) wie de, com oder pe. Für de ist die DENIC zuständig, eine Genossenschaft in Frankfurt.
  • Darunter die Namen, die jemand bei der Endung angemeldet hat, wie hackschule.de. Wer einen Namen anmeldet, sagt, welche Nameserver für ihn zuständig sind; bei hackschule.de sind es zwei von Cloudflare.

Wer eine Adresse sucht, fängt oben an. Die Root-Server kennen hackschule.de nicht, aber sie wissen, wer für de zuständig ist. Frag selbst, mit @ vor dem Server, den dig fragen soll:

dig @a.root-servers.net hackschule.de

Die Antwort von a.root-servers.net: kein ANSWER SECTION, aber im AUTHORITY SECTION die Nameserver für de, etwa a.nic.de, f.nic.de, l.de.net und s.de.net.

Der Root-Server antwortet nicht mit einer Adresse. Im AUTHORITY SECTION steht ein Verweis: Frag die Server für de. Im Bild steht nur dieser Teil der Antwort; +noall +authority blendet den Rest aus.

Aufgabe 4Was der Root-Server sagt

Du fragst einen Root-Server nach hackschule.de. Was antwortet er?

Was der Root-Server sagt

Geh den Weg selbst weiter: Frag einen der Server für de nach hackschule.de. Er verweist dich wieder weiter, und erst der Server, auf den er verweist, kennt die Adresse.

Aufgabe 5Zuständig für de

Nenne einen Nameserver, der für die Endung de zuständig ist.

Tipp

Er steht in der Antwort des Root-Servers, im AUTHORITY SECTION. dig +short NS de fragt direkt danach.

Aufgabe 6Wer es wirklich weiß

Welcher Nameserver kennt die Adresse von hackschule.de selbst? Nenne einen.

Tipp

Frag einen der Server für de nach hackschule.de, etwa dig @a.nic.de hackschule.de, und schau in den AUTHORITY SECTION.

5. Den ganzen Weg auf einmal

dig +trace geht den Weg von oben selbst ab und zeigt jede Station:

dig +trace +nodnssec hackschule.de

dig +trace hackschule.de: erst die 13 Root-Server, dann von einem Root-Server die Nameserver für de, dann von einem Server für de die beiden Nameserver von Cloudflare, zuletzt von einem davon die Adresse 5.9.51.11.

Vier Blöcke, und unter jedem steht, von wem er kam (Received … from): die Liste der Root-Server, dann ein Root-Server mit den Servern für de, dann ein Server für de mit denen von Cloudflare, zuletzt einer von Cloudflare mit der Adresse. +nodnssec lässt die Signaturen weg, mit denen die Antworten unterschrieben sind; sie würden die Ausgabe verdoppeln.

Aufgabe 7Warum so umständlich?

Warum gibt es nicht einen einzigen großen Server, der alle Namen der Welt kennt?

Mindestens 15 Wörter. Nur du und deine Lehrkraft können die Antwort lesen.

6. Gemerkt ist schneller: die TTL

Den ganzen Weg muss niemand bei jeder Frage gehen. Der DNS-Server, den dein Workspace fragt, merkt sich jede Antwort, so lange, wie ihre TTL sagt. Bevor du es ausprobierst:

Vermutung 8Zweimal dieselbe Frage

Du fragst zweimal kurz hintereinander nach wikipedia.org. Was ist beim zweiten Mal anders?

Zweimal dieselbe Frage
dig wikipedia.org
dig wikipedia.org

Achte auf Query time und auf die TTL im ANSWER SECTION. Beim zweiten Mal kam die Antwort aus dem Speicher, in null oder einer Millisekunde, und die TTL ist um die Sekunden kleiner, die seitdem vergangen sind. Läuft sie ab, fragt der Server wieder ganz von vorn.

Darum dauert es eine Weile, bis eine geänderte Adresse überall ankommt: Wer die alte noch gemerkt hat, benutzt sie, bis ihre TTL abgelaufen ist. Bei hackschule.de sind das höchstens fünf Minuten, die Server für de darf man sich zwei Tage merken (172800 Sekunden).

7. Rückwärts: von der Adresse zum Namen

Auch zu einer Adresse kann ein Name gehören, ein Eintrag vom Typ PTR. dig -x fragt danach:

dig +short -x 8.8.8.8

So kam in TCP/IP-Verbindungen traceroute zu den Namen der Router: Zu jeder Adresse hat es rückwärts nachgefragt.

Aufgabe 9Rückwärts

Welcher Name gehört zur Adresse 8.8.8.8?

8. Wem kann man glauben?

Eine DNS-Antwort ist ein unverschlüsseltes UDP-Paket, und dein Rechner glaubt der ersten, die passt. Wer im selben WLAN sitzt oder einen DNS-Server betreibt, könnte dir eine falsche unterschieben, und zwar gezielt: mit der Adresse eines eigenen Servers, auf dem eine Kopie der echten Seite läuft.

Aufgabe 10Eine falsche Antwort

Jemand im selben WLAN hat einen eigenen Server mit einer nachgebauten Kopie von hackschule.de, samt Anmeldeseite. Er schiebt deinem Rechner eine falsche DNS-Antwort unter: für hackschule.de die Adresse seines Servers. Was passiert, wenn du dann http://hackschule.de öffnest?

Eine falsche Antwort

Dagegen gibt es zweierlei. DNSSEC unterschreibt die Antworten, und wer nachprüft, merkt eine Fälschung; das sind die Einträge, die +nodnssec eben weggelassen hat. Und bei https:// zeigt der Server ein Zertifikat für seinen Namen vor: Ein falscher Server, zu dem eine gefälschte Antwort führt, hat keins für hackschule.de, und der Browser warnt. Wie solche Zertifikate und Signaturen funktionieren, zeigt Kryptographie im Terminal.

9. Zusammenfassung

Befehl oder Begriff Bedeutung
dig name, dig +short name Nach der Adresse fragen, ausführlich oder nur die Antwort
dig +short TYP name Nach einem anderen Eintrag fragen: AAAA, MX, NS, TXT
dig @server name Einen bestimmten DNS-Server fragen
dig +trace name Den Weg von den Root-Servern an selbst abgehen
dig -x adresse Rückwärts: Welcher Name gehört zur Adresse?
TTL Wie viele Sekunden eine Antwort gemerkt werden darf
Root-Server, Endung, zuständiger Nameserver Wer auf dem Weg von rechts nach links durch den Namen gefragt wird

10. Wie geht es weiter?

  • dig +short TXT hackschule.de und dig +short TXT gmail.com: Was steht dort? Such nach »SPF«: Damit sagt eine Domain, welche Server E-Mails in ihrem Namen verschicken dürfen.
  • dig +short google.com mehrmals hintereinander: Kommt immer dieselbe Adresse? Große Dienste verteilen ihre Besucher über DNS auf viele Server.
  • cat /etc/resolv.conf zeigt, welchen DNS-Server dein Workspace fragt.