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.
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:

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


Mit dem Symbol rechts oben im Terminal kannst du es maximieren. Die linke Seitenleiste blendest du jederzeit mit StrgB ein und aus.
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 ist lang, aber nur drei Stellen sind wichtig:
A heißt: Gesucht ist eine IPv4-Adresse.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.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.Welche IPv4-Adresse hat hackschule.de?
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:
Schreib einen Befehl, der nur die IPv4-Adresse von hackschule.de ausgibt, sonst nichts.
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

| 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.
Nenne einen Mailserver von gmail.com, ohne die Zahl davor.
Der Typ für Mailserver ist MX.
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:

hackschule.de.. Für sie sind die 13 Root-Server zuständig, a.root-servers.net bis m.root-servers.net.de, com oder pe. Für de ist die DENIC zuständig, eine Genossenschaft in Frankfurt.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

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.
Du fragst einen Root-Server nach hackschule.de. Was antwortet er?
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.
Nenne einen Nameserver, der für die Endung de zuständig ist.
Er steht in der Antwort des Root-Servers, im AUTHORITY SECTION. dig +short NS de fragt direkt danach.
Welcher Nameserver kennt die Adresse von hackschule.de selbst? Nenne einen.
Frag einen der Server für de nach hackschule.de, etwa dig @a.nic.de hackschule.de, und schau in den AUTHORITY SECTION.
dig +trace geht den Weg von oben selbst ab und zeigt jede Station:
dig +trace +nodnssec hackschule.de

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.
Warum gibt es nicht einen einzigen großen Server, der alle Namen der Welt kennt?
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:
Du fragst zweimal kurz hintereinander nach wikipedia.org. Was ist beim zweiten Mal anders?
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).
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.
Welcher Name gehört zur Adresse 8.8.8.8?
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.
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?
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.
| 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 |
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.