- DNS wird seit den 1980er-Jahren seit über 35 Jahren genutzt und seine Struktur ist stabil, trotzdem brauchen viele Programmierer lange, bis sie grundlegende Probleme sicher debuggen können
- Die Schwierigkeit liegt weniger in der Komplexität von DNS selbst als in den vielen unsichtbaren Komponenten wie Resolver-Caches, lokalen DNS-Bibliotheken und der Kommunikation mit autoritativen Nameservern
dig ist leistungsfähig, aber Ausgabeformat und Begriffe sind ungewohnt; Funktionen wie +norecurse sind zwar nützlich, die Interpretation der Ergebnisse ist aber nicht intuitiv
- Häufige Fallstricke wie Negative Caching, die frühere fehlende TCP-DNS-Unterstützung in
musl, Resolver, die TTL ignorieren, dauerhaftes Caching durch nginx oder Kubernetes ndots lernt man nur schwer, solange einen niemand darauf hinweist
- Für Menschen, die nur selten mit DNS arbeiten, helfen Cheat Sheets; Probleme, bei denen Experimente riskant wirken, lassen sich durch sichere Experimentierumgebungen wie Mess With DNS entschärfen
DNS: alt, aber trotzdem schwierig
- DNS wird seit den Zeiten von RFC 1034 seit über 35 Jahren genutzt, kommt auf jeder Website im Internet zum Einsatz und funktioniert in vielerlei Hinsicht ähnlich wie vor 30 Jahren
- Trotzdem kann es lange dauern, grundlegende Probleme zu debuggen, etwa „Die Domain ist korrekt eingerichtet, wird aber nicht aufgelöst“ oder „
dig und der Browser liefern unterschiedliche DNS-Ergebnisse“
- Menschen, die DNS schwierig finden, bleiben meist an folgenden Punkten hängen
- Schon einfache DNS-Änderungen für eine Website fühlen sich nicht selbstverständlich an
- Sie verwechseln, dass DNS-Records nicht gepusht, sondern gepullt werden
- Sie kennen die Grundbegriffe, geraten aber bei Detailverhalten wie Negative Caching oder Unterschieden zwischen DNS-Abfragen von
dig und Browsern durcheinander
Unsichtbare Resolver und Nameserver
- Der grundlegende Ablauf einer DNS-Anfrage vom Computer aus wirkt einfach
- Der Computer stellt eine Anfrage an einen Server namens Resolver
- Der Resolver prüft seinen Cache und fragt bei Bedarf erneut bei einem autoritativen Nameserver nach
- Mehrere für das Debugging wichtige Elemente sind standardmäßig nicht sichtbar
- Es ist schwer zu erkennen, was sich im Cache des Resolvers befindet
- Lokal ist nicht offensichtlich, welche DNS-Bibliothek die Anfrage verarbeitet
- Möglich sind libc
getaddrinfo, glibc, musl, Apples Implementierung, eigener DNS-Code des Browsers oder separate Custom-Implementierungen
- Jede Implementierung unterscheidet sich leicht bei Konfiguration, Caching-Verhalten und unterstützten Funktionen
musl DNS unterstützte bis Anfang 2023 kein TCP
- Die Kommunikation zwischen Resolver und autoritativem Nameserver ist nicht sichtbar
- Wenn man nachvollziehen könnte, welcher autoritative Nameserver abgefragt wurde und welche Antwort er geliefert hat, ließen sich viele DNS-Probleme leichter verstehen
Ansätze, um versteckte Systeme sichtbar zu machen
- Schon zu zeigen, welche versteckten Komponenten es gibt, hilft beim Lernen enorm
- Wer nicht weiß, dass selbst auf einem einzelnen Computer je nach Situation mehrere DNS-Bibliotheken verwendet werden können, kann lange verwirrt bleiben
- Mess With DNS versucht einen Fishbowl-Ansatz für Experimente, bei dem normalerweise unsichtbare Teile sichtbar werden
- Es macht Teile der Kommunikation zwischen Resolver und autoritativem Nameserver sichtbar
- Eine weitere Möglichkeit ist, Debugging-Informationen in DNS-Antworten aufzunehmen
- Es gibt bereits eine Funktion namens Extended DNS Errors oder EDE
- Tools fügen EDE-Unterstützung nach und nach hinzu
Hinweise durch Extended DNS Errors
- Extended DNS Errors sind eine neue Methode, mit der DNS-Server in Antworten zusätzliche Debugging-Informationen bereitstellen können
- Fragt man die nicht existierende Domain
xjwudh.com mit dig @8.8.8.8 xjwudh.com ab, kann folgender zusätzlicher Fehler erscheinen
; EDE: 12 (NSEC Missing): (Invalid denial of existence of xjwudh.com/a)
- Dieses Beispiel scheint sich auf DNSSEC zu beziehen; wichtig ist, dass in der Antwort eine zusätzliche Debug-Meldung mitgeliefert wird
- Um das obige Beispiel zu sehen, war eine neuere Version von
dig erforderlich
Leistungsfähig, aber schwer zu lesen: dig
- Um den internen Zustand von DNS zu prüfen, ist
dig nützlich
- Mit
dig +norecurse lässt sich prüfen, welche Records ein bestimmter DNS-Resolver im Cache hat
8.8.8.8 scheint SERVFAIL zurückzugeben, wenn die Antwort nicht im Cache ist
google.com ist im Cache und liefert daher NOERROR sowie einen A-Record zurück
homestarrunner.com ist nicht im Cache und liefert SERVFAIL, aber das bedeutet nicht, dass es keinen DNS-Record gibt
- Die Ausgabe von
dig ist schwer zu lesen, wenn man sie nicht gewohnt ist
- Überschriften wie
->>HEADER<<-, flags:, OPT PSEUDOSECTION:, QUESTION SECTION: und ANSWER SECTION: sind ungewohnt
- Zeilenumbrüche und Leerzeichen zwischen den Abschnitten wirken nicht konsistent
- Bei
MSG SIZE rcvd: 47 ist schwer zu erkennen, ob es außer rcvd noch andere Felder gibt
- Man muss wissen, dass zwar von 1 Record in der Sektion
ADDITIONAL die Rede ist, tatsächlich aber die OPT PSEUDOSECTION diese Rolle übernimmt
- Die Ausgabe von
dig wirkt weniger wie ein von Anfang an bewusst entworfenes Format, sondern eher wie ein Skript, das mit der Zeit organisch gewachsen ist
DNS-Tools lesbarer machen
- Dokumentation, die die Ausgabe von
dig selbst erklärt, ist hilfreich
- how to use dig erklärt die Struktur der
dig-Ausgabe und wie man die Standardausgabe kürzer einstellt
- Man kann auch freundlichere Tools bauen
- Es gibt Alternativen wie dog, doggo und DNS lookup tool
- Wenn man jedoch fortgeschrittene Funktionen wie
+norecurse braucht, kann es besser sein, alles mit dig zu erledigen
- Den großen Funktionsumfang von
dig zu ersetzen, ist eine große Aufgabe
- Denkbar wäre auch, der
dig-Ausgabe eine Option wie +human hinzuzufügen, die dieselben Informationen strukturierter darstellt
- Header, Anfrage, Antwort, zusätzliche Sektionen, Zeit, Server, Protokoll und Antwortgröße könnten klar getrennt werden
- Der Ansatz wäre nicht, Informationen zu reduzieren, sondern dieselben Informationen lesbarer darzustellen
- Aktuelle Versionen von
dig haben ein Ausgabeformat +yaml
- Es kann klarer wirken, ist aber so ausführlich, dass selbst eine einfache DNS-Antwort unter Umständen nicht auf einen Bildschirm passt
Häufige, aber schwer zu lernende DNS-Fallstricke
- Bei DNS gibt es Fallstricke, denen man relativ häufig begegnet, die man aber nur schwer erkennt, solange einen niemand darauf hinweist
-
Negative Caching
- Wenn man eine Domain besucht, für die es noch keinen DNS-Record gibt, kann der „nicht vorhanden“-Status dieses Records gecacht werden
- Wenn dieser Zustand mehrere Stunden im Cache bleibt, wird es sehr lästig
-
Unterschiede bei getaddrinfo-Implementierungen
-
Resolver, die TTL ignorieren
- Selbst wenn man die TTL eines DNS-Records auf 5 Minuten setzt, können manche Resolver sie ignorieren und deutlich länger cachen, etwa 24 Stunden
-
nginx-Konfigurationsprobleme
- Wenn nginx falsch konfiguriert ist, kann es DNS-Records dauerhaft cachen
-
Kubernetes ndots
- ndots kann Kubernetes-DNS verlangsamen
Fallstricke teilen und dokumentieren
- Wissen über seltsame Fallstricke ist schwer zu bekommen, und es ist ineffizient, wenn Menschen dieselben Probleme immer wieder neu entdecken müssen
- Wenn man ein Thema erklärt, ist es sehr hilfreich, häufige Fallstricke gleich mit anzusprechen
- Als Beispiel außerhalb von DNS erklärt Josh Comeaus Einführung in Flexbox die minimum size gotcha
- Auch Community-Sammlungen häufiger Fallstricke sind nützlich
- Bei Bash ist shellcheck als Sammlung von Bash-Fallstricken sehr hilfreich
- Die Dokumentation von DNS-Fallstricken ist auch deshalb schwierig, weil verschiedene Nutzer auf unterschiedliche Probleme stoßen
- Wer alle drei Jahre einmal DNS für eine persönliche Domain einrichtet, erlebt andere Fallstricke als jemand, der DNS für eine stark frequentierte Domain betreibt
Seltene Nutzung und schwieriges Experimentieren
- Viele Menschen arbeiten nur sehr selten mit DNS
- Wenn man nur alle drei Jahre einmal mit DNS zu tun hat, ist es ganz natürlich, dass es schwer zu lernen ist
- Cheat Sheets wie „Ablauf zum Ändern von Nameservern“ können hilfreich sein
- DNS ist außerdem eine Technik, mit der man nur ungern experimentiert, weil man die eigene Domain kaputtmachen könnte
- Mess With DNS wurde entwickelt, um diese Hürde beim Experimentieren zu senken
1 Kommentare
Meinungen auf Hacker News
Dem stimme ich nicht zu. DNS ist meiner Ansicht nach nicht wirklich schwer zu lernen; es gibt nur wenige, die sich die Zeit nehmen, es zu lernen.
Das Gute an DNS ist, dass das System bei Anfragen seinen internen Zustand offenlegt. Man kann sich DNS-Server für bekannte Zonen ansehen und ihr Verhalten leicht nachvollziehen, und kostenlose Tools wie
digsind weit verbreitet verfügbar.Es hat mich in meiner Laufbahn immer wieder überrascht, dass sich Leute, mit denen ich zusammengearbeitet habe, vor allem an mein DNS-Wissen erinnern, weil ich nicht das Gefühl habe, etwas Mysteriöses oder Besonderes zu wissen. DNS ist sehr gut standardisiert, gängige Server- und Client-Implementierungen halten sich strikt an die Standards, und mit kostenlosen Tools lässt es sich leicht beobachten. Es braucht nur Mühe und Zeit, wirklich schwierig ist es nicht.
Früher dachte ich, „Nein, eigentlich ist es einfach!“ sei eine Ermutigung als Antwort auf „es ist schwer zu lernen“. Ich mag DNS und finde es in vielerlei Hinsicht erstaunlich einfach. Unter https://implement-dns.wizardzines.com zeige ich zum Beispiel, wie man mit einfachem Python-Code einen Spielzeug-DNS-Resolver von Grund auf implementiert.
Mit der Zeit habe ich aber gelernt, dass „Nein, es ist leicht zu lernen!“ oft weniger als „Du schaffst das!“ verstanden wird, sondern eher als „Es ist nicht schwer, du bist nur dumm“. Wenn man bei einem Thema jahrelang verwirrt war, hilft es nicht besonders, zu hören: „Eigentlich ist es doch einfach.“
Deshalb sage ich das inzwischen nicht mehr, sondern investiere viel Mühe darin, zu verstehen, warum Menschen bestimmte Dinge schwierig finden, und diese Hürden zu senken.
BIND macht seine Aufgabe hervorragend, aber die Konfigurationsdateien sind nicht besonders schön, das Handbuch ist lang und trocken und manchmal unnötig kompliziert.
digist mächtig, kürzt aber alles so ab, als wären wir noch in der Zeit von 80-Spalten-Terminals. Beim Debuggen von DNS-Problemen war Wireshark für mich manchmal ein besseres Tool alsdig.Wenn man PowerDNS oder einen anderen modernen DNS-Server verwendet, dürfte es viel einfacher sein, einen funktionierenden DNS-Server einzurichten. Einen guten modernen DNS-Client kenne ich nicht wirklich, also habe ich mich letztlich an
diggewöhnt. Als jemand, der beimip-Befehl das Flag--colornutzt, würde ich mir wünschen, dass Tools wiedigeine modernere Ausgabe hätten. Die Kommandozeilen-Flags packe ich mir schon in Aliasse; ich wünsche mir nur, dass die Funktion eingebaut wird.Ernsthaft:
MSG SIZE rcvd: 71hätte man nicht abkürzen müssen. Auchflags: qr rd rahätte man ausschreiben können. Ich weiß auch nicht, was die Semikolons am Zeilenanfang vermitteln sollen; sie sorgen eher für Verwirrung.Es ist nicht verwunderlich, dass Leute verwirrt sind, wenn sie DNS mit dem verfügbaren Material lernen.
Wenn es „nur ein wenig Mühe und Zeit“ braucht: Wie viel Mühe und Zeit genau? Mehrere Leute in diesem Thread sagen, sie hätten es gelernt, indem sie einen Server implementiert haben, und erzählen, dass sie Monate gebraucht haben, um es zu verstehen, nur um dann zu wiederholen: „Wenn man es einmal verstanden hat, ist es ziemlich einfach.“ Können wir uns dann nicht darauf einigen, dass es für etwas so Allgegenwärtiges und konzeptionell Einfaches in der Praxis tatsächlich schwer zu lernen ist?
Zum Beispiel: Welche Regeln gelten dafür, wie ein Browser DNS-Einträge cached und ablaufen lässt? Sind diese Regeln über Browser hinweg konsistent?
Ich finde, der Artikel trifft den Kern sehr gut. DNS selbst ist nicht schwierig, aber DNS in der realen Welt zu lernen ist schwierig. Denn vieles auf dem Weg von der beabsichtigten Abfrage bis zum erwarteten Ergebnis ist verborgen.
Früher bestand die grundlegende Internetverbindung aus einer Schnittstelle, einem Gateway und einem DNS-Server-Anbieter. Heute ist man manchmal gleichzeitig über mehrere WANs wie LTE und WiFi verbunden, und für Nutzer ist schwer zu erkennen, welcher Auflösungspfad tatsächlich genutzt wurde. Unklar ist auch, ob es der Browser war, die Standardschnittstelle der C-Bibliothek des Systems, ein lokaler Resolver oder ein rekursiver Resolver dazwischen, ob es einen lokalen Cache gibt oder ob standardmäßig spezielle Optionen angehängt werden.
Selbst wenn alles funktioniert, kann man nicht blind darauf vertrauen, dass die Anfrage und Antwort einer Anwendung denselben Pfad genommen haben wie bei einer anderen Anwendung. Drei Browser können jeweils unterschiedliche Methoden verwenden, das Betriebssystem verhält sich wieder anders, und mDNS kann noch eine fünfte Option hinzufügen.
Es gibt den Witz, dass es in der Informatik nur drei schwierige Probleme gibt: Cache-Invalidierung und Namensgebung.
Und DNS ist ein Caching-System für die Namen von Dingen.
https://reddit.com/comments/15c2ul2/comment/jtty9dy
Es wird global verwaltet (IANA), ist hierarchisch, föderiert und leicht zu ändern.
DNS ist eine Technologie, bei der es eine Diskrepanz zwischen dem gibt, wie einfach sie wirkt, und dem Schwierigkeitsgrad, der sich in der Praxis zeigt.
Wir nutzen DNS täglich, und es wirkt sehr einfach. Die Alltagssprache von DNS besteht aus Domainnamen, Lookups und IP-Adressen. Diese Sprache ist direkt im Browser sichtbar, und aus dieser Sichtbarkeit entsteht ein mentales Modell dafür, wie es funktioniert.
Im Inneren gibt es jedoch eine völlig andere Sprache: Zonen, Resolver, delegierte Autorität und den seltsamen Punkt hinter Top-Level-Domains.
Zum Beispiel wissen wir beide, was
host.example.co.ukbedeutet, aber ohne abschließenden Punkt könnte ein Resolver versuchen,host.example.co.uk.example.co.ukaufzulösen.Mit den Windows-Standardeinstellungen kann es in so einem Fall passieren, dass
host.example.co.uk.example.co,host.example.co.uk.example, erneuthost.example.co.uk.exampleund dannhost.example.co.uk.versucht wird, um ein Ergebnis zu bekommen. Allerdings habe ich noch nie gesehen, dass Windows tatsächlich den ersten Versuch macht; dieses Verhalten scheint dafür entworfen worden zu sein, Unternehmensumgebungen mit einem föderierten Monstrum namens Active Directory zu bewältigen.Heutige Browser schleichen sich ohne Zustimmung der Nutzer mit hoher Wahrscheinlichkeit zu DNS-over-HTTPS(DoH)-Servern davon und treiben sich mit allerlei fragwürdigen Gegenstellen herum. DNS-Lookups sind grundlegende Daten, und ISPs mochten es, sehen zu können, wohin Nutzer gehen. Betriebssystemanbieter können natürlich ebenfalls „Telemetrie“ senden. Google besitzt zwar nicht den Desktop, aber den Browser; wenn man Nutzer dazu bringt, statt des von ihnen konfigurierten DNS einen „sicheren“ DNS-Server zu verwenden, ist das gut für Google. Durch solche Tricks ist IT-Fehlersuche deutlich spannender geworden als früher.
Um den abschließenden Punkt muss man sich nicht allzu große Sorgen machen. Wahrscheinlich nutzt man ohnehin fast sicher nicht den DNS-Server, den man zu nutzen glaubt. Ich verstehe, warum DoH entwickelt wurde, und für manche normalen Nutzer gibt es auch Gründe dafür. Wenn etwa jemand, der kein IT-Profi ist, einen bösartigen WLAN-Hotspot nutzt, bietet es einen gewissen Schutz, wenn der Browser für DNS-Lookups sicher nach Hause telefoniert. Ob Browseranbieter deshalb die Endpoint-Security-Entscheidungen der Nutzer übergehen dürfen, ist aber eine andere Frage.
DNS ist viel komplexer als bloß Adressen nachzuschlagen. Heute geht es um Geld, und eigentlich war das seit etwa 2000 schon immer so. Inzwischen gibt es viele sehr eigensinnige Großunternehmen, die darüber bestimmen wollen, wer über die Nutzer profitiert.
DNS selbst ist einfach. Die Verteilung von Informationen ohne Bindung an eine Organisation ist wirklich knifflig.
Vor ein paar Jahren wurde mir klar, dass ich DNS nur bruchstückhaft verstand. Ich kannte
dig(1), BIND und das CS101-Niveau der Konzepte dazu, wie rekursive DNS-Auflösung funktioniert, aber mir fehlte das Praxiswissen, das nötig ist, um nichttriviale Systeme zu entwerfen und zu implementieren oder nicht funktionierende Systeme zu debuggen.Also las ich „DNS and BIND“ fast von Anfang bis Ende und setzte für ein paar weniger wichtige persönliche Websites auch echte BIND-Server auf. Es war nicht schwer, erforderte aber eine ordentliche Zeitinvestition. BIND ist nicht für viele Anwendungsfälle die richtige Antwort, war aber sehr wertvoll, weil viele DNS-Konzepte und -Begriffe weiterhin aus BIND stammen.
Ich denke, Bücher werden beim Lernen solcher Dinge unterschätzt. Materialien im Web sind meistens entweder High-Level-Theorie, etwa Blockdiagramme rekursiver Lookups, aufgabenorientierte Anleitungen wie rekursive Lookups mit
dig, oder Low-Level-Material, bei dem man Quellcode liest, um die Retry-Policy des lokalen DNS-Clients zu verstehen. Um die einzelnen Teile zu verstehen, wie sie ineinandergreifen, was sie erreichen sollen, und bis hin zur Implementierung, etwa wo Caches sitzen, gibt es kaum einen Ersatz für den ganzheitlichen Ansatz, den man oft in Büchern findet. Im Web gibt es das nicht gar nicht, aber es ist selten.Alle IT-Verantwortlichen sollten am besten Praxiswissen zum Debuggen von DNS-Problemen haben.
DNS war historisch ein Einfallstor für wichtige Sicherheitslücken und wird es wahrscheinlich weiter bleiben. Solche Schwachstellen führen zu Angriffswegen in fast allen anderen Protokollen, etwa SMTP. Selbst das für HTTPS verwendete Zertifizierungsstellen-System hängt stark von einem grundsätzlich unsicheren Protokoll ab. Würde man merken, wenn eine Bank statt eines OV-Zertifikats ein DV-Zertifikat gekauft hätte? Vermutlich nicht.
Deshalb ist es nicht unbedingt schlecht, wenn DNS für Menschen ohne ausreichendes Interesse schwer zu lernen wirkt. Denn man sieht auch heute noch Leute, die DNS-bezogene Funktionen bauen, ohne sich die Zeit zu nehmen, die Geschichte von Dingen wie Port-Randomisierung, Cache Poisoning und AXFR wirklich zu verstehen.
Als schamlose Werbung für ein Nebenprojekt: Im Artikel hieß es, es wäre schön, einen „Debug“-Modus für DNS-Auflösung zu haben; die Web-UI von ComfyDNS hat genau diese Funktion :3
https://comfydns.com/
Das Bild oben mit
TRACE google.com A INzeigt diese Funktion.ComfyDNS ist auch ein Projekt, mit dem ich ein persönliches Jucken gekratzt habe. Ich war es leid, bind9-Zonendateien von Hand zu bearbeiten, und wollte außerdem wissen, wie DNS funktioniert. Die Oberfläche kannte ich, die Details nicht, also habe ich die RFCs „von Grund auf“ implementiert. Netty habe ich verwendet, aber keine DNS-Library. Es hat ziemlich Spaß gemacht.
Bitte verzeiht, wenn die Website dem Traffic nicht standhält und ausfällt. Es ist eine Rails-App, die im Free Tier von Oracle Cloud läuft.
Der Witz, den man immer hörte, war, dass DNS die zwei schwierigsten Probleme der Informatik kombiniert: Namensgebung und Cache-Invalidierung.
Es ist nicht die schwierige Art von Cache-Invalidierung. Tatsächlich muss man fast nie etwas „invalidieren“.
Auch serverseitig ist es völlig zulässig, eine Zeit lang alte und neue Version gemischt auszuliefern.
Es fühlt sich an, als wäre schon wieder so ein Artikel erschienen. In den 1990ern war das Internet kleiner, und Computer waren viel langsamer und leistungsschwächer, aber wir haben es sehr leicht gelernt.
Für ISPs waren Dinge wie DNS, LDAP, SMTP, IMAP damals absolutes Grundwissen, und die Leute haben tatsächlich offizielle Dokumente wie RFCs gelesen. Wer im Internet Server betreiben wollte, musste das lernen, und mit etwas Zeitaufwand – also bezahlter Arbeitszeit – konnte man es lernen.
Die heutige Generation von Entwicklern und DevOps-Leuten hat keine Geduld oder Eigeninitiative, erwartet, alles vorgekaut zu bekommen, und kopiert wahllos irgendetwas von StackOverflow und aus minderwertigen Blogs. Statt die Grundlagen zu lernen, auf denen das Internet aufgebaut ist, greifen sie zum neuesten hippen Wrapper-Tool der Woche und folgen miserablen Blog-Anleitungen. Wenn dann alles zusammenbricht und die Firma viel Geld verliert, fühlen sie sich ungerecht behandelt. Das liegt daran, dass sie sich nie die Zeit genommen haben, die Grundlagen dazu zu lernen, wie es im Internet wirklich funktioniert.
Ich habe das immer wieder gesehen. Es ist wirklich nicht so schwer. Man muss einfach seine Hausaufgaben machen.
Es ist nicht schwer. DNS ist eine der wenigen Technologien, die sich nicht stark verändert haben, und seine Funktionsweise ist ziemlich intuitiv.
digkann etwas verwirrend sein. Es kann mehr als das altenslookup, ist aber weniger intuitiv. Nebenbei:nslookupfunktioniert immer noch gut.Einer der Gründe, warum jüngere Leute in der Branche bei DNS und den Kernprotokollen durcheinanderkommen, ist meiner Meinung nach, dass heute zu viele Dinge „einfach funktionieren“.
Ein heutiger WLAN-Router zum Beispiel funktioniert direkt nach dem Auspacken „einfach“. Anfang der 2000er brauchte man für die Einrichtung solcher Dinge einen Netzwerktechniker, der DNS, IP, Ethernet, RFC1918, echte Routing-Protokolle und vieles andere kannte – und wahrscheinlich auch gut wusste, warum es so konfiguriert wurde.
Wenn man DNS aus Client-Sicht verwirrend findet, sollte man mal BIND konfigurieren ;-)
/Gejammer eines alten Unix-Barts
Ich hätte den DHCP-Server des WRT54G so einrichten müssen, dass er die statische IP des Domain Controllers als DNS-Server für die korrekte Namensauflösung verteilt. Stattdessen habe ich alles irgendwie mit IP-Adressen und Einträgen in der hosts-Datei zum Laufen gebracht. Den MX-Record der Domain habe ich ebenfalls auf die WAN-IP des Routers gesetzt, und PTR-Records gab es nicht. Rückblickend ist es ein Wunder, dass die E-Mail-Zustellung so reibungslos funktioniert hat.
Ein paar Jahre später habe ich verstanden, wie DNS tatsächlich funktioniert, und Anfang 20 habe ich ein internes Intranet geerbt, das BIND als Nameserver für alle externen Unternehmens-Domain-Zonen nutzte. Um die Zuverlässigkeit zu erhöhen, habe ich diese Konfiguration auf VPS umgezogen und dabei enorm viel über Zonentransfers, SOA und Ähnliches gelernt. Für diese Erfahrung bin ich dankbar, aber heute wird fast alles davon für einen erledigt, sodass es zu einer Tätigkeit mit geringem Wert geworden ist. Ob gut oder schlecht: „IT“ wird nicht auf dieselbe Weise bewertet wie „Software Engineering“.
Ich werde nie das Update vergessen, mit dem Firefox DNS-over-HTTPS standardmäßig aktiviert hat. Wir verteilten per DHCP interne DNS-Server an die Workstations, und plötzlich kamen lauter Meldungen wie „Meine E-Mails sind verschwunden! Alles ist kaputt!“ herein. Internes Webmail und Intranet-Webserver sahen aus, als wären sie einfach verschwunden.
Herauszufinden, was passiert war, dauerte unnötig lange. Zum Teil lag das an dem Gedanken: „Es ist DNS – warum sollte das plötzlich kaputtgehen?“ Aber es ist ziemlich offensichtlich, dass Mozilla dieses leicht vorhersehbare Problem nicht vorausgesehen hatte.
Wenn ich zum Beispiel
thing.behind.cdn.itauflöse, bekomme ich eine Antwort, während jemand anderes für denselben Namen eine andere Antwort bekommt. Das ist an sich ziemlich offensichtlich, wird aber kompliziert, wenn jemand vernünftigerweise fragt: „Könnt ihr fürthing.behind.cdn.itein Loch in die Firewall öffnen?“Manche Server leiten Anfragen weiter, manche delegieren, manche lösen stellvertretend auf und manche nicht. Dazu kommt die Magie der Suchdomains auf Client-Seite, und es ist unklar, ob Clients oder interne Resolver-Bibliotheken TTLs einhalten.
Es gibt unzählige Record-Typen, und manchmal fordert ein Server dazu auf, statt über UDP erneut per TCP zu verbinden.
Deshalb ist DNS ziemlich komplex. Es funktioniert sehr gut, und die meisten schwierigen Teile sind in Dinge abstrahiert, die „im Großen und Ganzen einfach funktionieren“, wodurch die Illusion entsteht, es sei simpel.
Es ist erstaunlich, wie viel sicherer ich mich jetzt dabei fühle, Networking auf hoher Ebene zu verstehen – einschließlich DNS und den darunterliegenden Dingen wie
ethtoolund Ethernet-Frames.Ich mag es, Dinge von Grund auf zu verstehen, und habe deshalb an der Uni Elektrotechnik statt Informatik gewählt; vielleicht sollte mich das also nicht überraschen.
Das Prinzip von DNS ist nicht so schwer, wenn man versteht, dass es rekursiv ist. Aber wenn man es mit Blick auf Sicherheit konfigurieren, die richtige Infrastruktur haben und jedes letzte Detail korrekt hinbekommen will, gibt es viel zu lernen. Wenn man BIND ausklammert, ist es nicht so schwer.