Domain IP Lookup

Die Einträge, die Ihnen in fast jeder Zone begegnen

AHostname zu einer IPv4-Adresse
AAAAHostname zu einer IPv6-Adresse
CNAMEHostname zu einem anderen Hostnamen
MXDomain zu ihren Mailservern, nach Priorität
TXTDomain zu beliebigem Text – SPF, DKIM, Verifizierung
NSDomain zu den Nameservern, die für sie antworten
DNS-Grundlagen

Aufbau einer DNS-Nachricht: Header, Flags und Wire-Format

5 Min. Lesezeit

Jeder DNS-Lookup, vom Browser, der eine Adresse erfragt, bis zum Resolver, der einer Delegierung folgt, ist eine kurze Binärnachricht in einem gemeinsamen Format. Die Bytes bekommen Sie selten zu sehen, doch Tools wie dig geben die Header-Felder als Text aus, und wenn Sie wissen, was sie bedeuten, wird aus dieser Ausgabe kein Rauschen mehr, sondern ein Beleg. Das Format ist seit 1987 in RFC 1035 spezifiziert, eine Verfeinerung von RFC 883 aus dem Jahr 1983, und wurde seither erweitert, nicht ersetzt.

Der 12-Byte-Header

Jede Nachricht beginnt mit denselben 12 Bytes: einer 16-Bit-ID, einem 16-Bit-Wort mit Flags und Codes und vier 16-Bit-Zählern.

FeldGrößeBedeutung
ID16 BitVom Client gewählt und in die Antwort kopiert, damit der Client Antworten den Fragen zuordnen kann
QR1 Bit0 für eine Abfrage, 1 für eine Antwort
Opcode4 BitDie Art der Anfrage; 0 ist eine Standardabfrage
AA1 BitAuthoritative Answer: Der antwortende Server ist ein autoritativer Server für den Namen in der Frage
TC1 BitTruncated: Die Nachricht war länger, als der Transport erlaubt
RD1 BitRecursion Desired: Der Client bittet den Server, den gesamten Lookup zu übernehmen
RA1 BitRecursion Available: Der Server bietet diesen Dienst an
Z3 BitIn RFC 1035 reserviert; DNSSEC belegte später zwei dieser Bits mit AD und CD (RFC 2535, in RFC 4035 erneut festgehalten)
RCODE4 BitAntwortcode: das Ergebnis der Abfrage
QDCOUNT, ANCOUNT, NSCOUNT, ARCOUNTje 16 BitWie viele Einträge der Question-, Answer-, Authority- und Additional-Abschnitt enthalten

Nach dem Header folgen die vier Abschnitte, in dieser Reihenfolge. Der Question-Abschnitt gibt wieder, was gefragt wurde, der Answer-Abschnitt enthält die Records, die darauf antworten, der Authority-Abschnitt verweist auf die für die Zone zuständigen Nameserver, und der Additional-Abschnitt enthält zusätzliche Records, von denen der Server erwartet, dass der Client sie als Nächstes braucht, etwa die Adressen dieser Nameserver.

Mit AA ist Vorsicht geboten. Ein rekursiver Resolver, der aus seinem Cache antwortet, ist für diese Daten keine Autorität und setzt das Flag nicht. Im ursprünglichen Entwurf kennzeichnet ein Server eine Antwort als autoritativ, wenn er aus Zonendaten antwortet, die er selbst hält, im Gegensatz zu gecachten Daten (Mockapetris und Dunlap, 1988). Ein aa in einer Antwort eines der eigenen Nameserver einer Zone ist der Normalfall, außer bei einem Referral an eine untergeordnete Zone: Dieses trägt es auch von einem autoritativen Server nicht.

Die Header-Zeile von dig lesen

dig gibt den Header in zwei Zeilen aus. Eine typische Antwort sieht so aus:

Der Header, wie dig ihn ausgibt
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6891
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

opcode und status sind die Felder Opcode und RCODE. Die Zeile flags listet die gesetzten Bits auf, hier qr, rd und ra; zusammen bedeuten sie: eine Antwort auf eine Abfrage, die Rekursion verlangte, von einem Server, der sie anbietet. Die vier Zähler sind die Größen der Abschnitte. Das ADDITIONAL: 1 ist meist der EDNS-Pseudo-Record des Servers, der zurückgegeben wird, weil dig in seiner Abfrage einen mitschickt; es ist keine zusätzliche Adresse.

Der Status lässt sich am schnellsten lesen. RFC 1035 definiert sechs Antwortcodes.

CodeNameBedeutung
0NOERRORDie Abfrage wurde ohne Fehler verarbeitet
1FORMERRDer Server konnte die Abfrage nicht interpretieren
2SERVFAILDer Server ist bei der Verarbeitung der Abfrage gescheitert
3NXDOMAINDer Name existiert nicht; RFC 1035 nennt dies Name Error und definiert es für autoritative Server
4NOTIMPDer Server unterstützt diese Art von Abfrage nicht
5REFUSEDDer Server lehnt die Antwort aus Richtliniengründen ab

Ein häufiges Ergebnis hat keinen eigenen Code. Ein Name, der existiert, aber keinen Record des abgefragten Typs hat, liefert NOERROR ohne Records dieses Typs im Answer-Abschnitt (ein CNAME kann dennoch erscheinen), was RFC 2308 als NODATA bezeichnet. Der Unterschied ist bei der Fehlersuche wichtig; was jeweils zu tun ist, steht in NXDOMAIN erklärt und DNS-Timeout oder SERVFAIL.

Eine Abfrage, Byte für Byte

Dies ist eine vollständige Abfrage nach dem A-Record von example.com in ihrer klassischen Form, ohne EDNS, so wie ein Client sie mit angeforderter Rekursion senden würde. Sie ist 29 Bytes lang.

Eine DNS-Abfrage für example.com, Typ A, hexadezimal
1a 2b 01 00 00 01 00 00 00 00 00 00 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01
BytesBedeutung
1a 2bID: ein vom Client gewählter beliebiger Wert
01 00Flags: nur RD ist gesetzt
00 01QDCOUNT: eine Frage
00 00 00 00 00 00ANCOUNT, NSCOUNT und ARCOUNT: in einer Abfrage alle null
07 65 78 61 6d 70 6c 65Ein Label der Länge 7, dann die ASCII-Buchstaben von „example“
03 63 6f 6dEin Label der Länge 3, dann „com“
00Das Root-Label der Länge null, das den Namen abschließt
00 01QTYPE 1: der A-Record
00 01QCLASS 1: die Internet-Klasse

Dieselben Bytes laufen auch durch verschlüsselte Transporte. Bei DNS over HTTPS (RFC 8484) etwa wandert dieselbe Nachricht entweder als roher Body eines HTTP-POST oder, bei einer GET-Anfrage, base64url-kodiert in einem dns-Parameter, und Clients wird empfohlen, die ID auf 0 zu setzen; siehe DNS over HTTPS und DNS over TLS erklärt.

Namen, Grenzen und Kompression

Ein Name ist eine Folge von Labels, denen jeweils ihre Länge vorangestellt ist und die mit einem Nullbyte enden. RFC 1035 begrenzt ein Label auf 63 Oktette und einen ganzen Namen auf 255. Da das Längenbyte eines Labels nie größer als 63 ist, sind seine obersten zwei Bits immer null, und das schuf Raum für die Kompression: Sind die obersten zwei Bits beide eins, bilden dieses und das nächste Byte einen Zeiger, und die übrigen 14 Bits geben einen Offset vom Nachrichtenanfang an. In einer Antwort besteht der Name der Antwort sehr häufig aus den zwei Bytes c0 0c, einem Zeiger auf Offset 12, wo gleich nach dem Header der Name der Frage beginnt. Jedes DNS-Programm muss Zeiger in empfangenen Nachrichten verstehen, darf aber darauf verzichten, sie selbst zu erzeugen.

Warum 512 Bytes wichtig waren und was sie ablöste

RFC 1035 beschränkt UDP-Nachrichten auf 512 Bytes, ohne die IP- und UDP-Header. Eine längere Nachricht wird abgeschnitten und das TC-Bit gesetzt, was den Client anweist, es über TCP erneut zu versuchen. Die ursprünglichen Entwickler werteten die Datagrammgrenze als Erfolg und nicht als Problem: Die Leistung war deutlich besser als bei TCP-Verbindungen, und Betriebssystemressourcen wurden nicht gebunden, auch wenn die Entscheidung sorgfältige Strategien für die erneute Übertragung erforderte (Mockapetris und Dunlap, 1988).

Als die Antworten mit IPv6 und DNSSEC wuchsen, wurde die Grenze eng. EDNS(0), definiert in RFC 6891, lässt einen Client in einem OPT-Pseudo-Record eine größere UDP-Nutzlastgröße ankündigen. Der RFC schlägt 4096 Oktette als Ausgangspunkt vor und, falls das scheitert, einen Rückfall auf einen Bereich um 1280 bis 1410 Bytes. Seit RFC 7766 im Jahr 2016 ist die Unterstützung von TCP ein verpflichtender Bestandteil einer vollständigen DNS-Implementierung. Größere UDP-Antworten haben außerdem ihren Preis bei der Sicherheit, denn sie machen Reflection-Angriffe lohnender; DNS-Amplification-Angriffe und offene Resolver behandelt das.

Kernaussage

Lesen Sie zuerst den Header: QR sagt, ob es eine Abfrage oder eine Antwort ist, RCODE sagt, was passiert ist, AA sagt, ob die Antwort von einer Autorität stammt, und TC sagt, dass es über TCP erneut versucht werden soll.

Quellen und weiterführende Literatur

Möchten Sie die öffentlichen DNS-Adressen einer Domain prüfen? Nutzen Sie das Tool Domain IP Lookup.

Häufig gestellte Fragen

Weiterführende Artikel

Eine rekursive DNS-Abfrage, Schritt für Schritt

Browser

fragt example.com an

Resolver

Ihr ISP / 1.1.1.1

Root + TLD

wer betreibt .com?

Autoritativ

die echte Antwort

Jeder Schritt in dieser Kette ist selbst eine DNS-Abfrage und wird danach zwischengespeichert

DNS-Grundlagen

So funktioniert DNS: Vom Domainnamen zur IP-Adresse

Das Telefonbuch des Internets, von Anfang bis Ende nachverfolgt: Was in den wenigen Millisekunden zwischen der Eingabe einer Domain und dem ersten Paket beim Server geschieht.

3 Min. Lesezeit

Vier Ergebnisse, vier verschiedene nächste Schritte

NXDOMAINDer Name existiert nicht – Wiederholen lohnt nie
TIMEOUTKeine Antwort rechtzeitig – oft vorübergehend
SERVFAILServer konnte nicht verarbeiten – manchmal vorübergehend
REFUSEDPer Richtlinie abgelehnt – selten ein Fehler, selten vorübergehend
Fehlersuche

DNS-Timeout oder SERVFAIL: Der Unterschied

Beides wirkt wie ein fehlgeschlagener Lookup, doch Timeout und SERVFAIL deuten auf verschiedene Ursachen hin und erfordern andere nächste Schritte.

3 Min. Lesezeit

Die Einträge, die Ihnen in fast jeder Zone begegnen

AHostname zu einer IPv4-Adresse
AAAAHostname zu einer IPv6-Adresse
CNAMEHostname zu einem anderen Hostnamen
MXDomain zu ihren Mailservern, nach Priorität
TXTDomain zu beliebigem Text – SPF, DKIM, Verifizierung
NSDomain zu den Nameservern, die für sie antworten
DNS-Grundlagen

DNS-Record-Typen erklärt: Das vollständige Nachschlagewerk

Eine Referenzseite zu jedem Record-Typ, den man kennen sollte: was er tut, wie er aussieht und welchen Fehler man damit macht.

4 Min. Lesezeit