Ich hatte kürzlich ein Problem, bei dem ein Remotedienst, der die IP-Adresse für meinen Server anforderte (mit einem gehosteten DNS-Anbieter), antwortete mit:
DNS problem: SERVFAIL looking up A for mysql.xavamedia.nl
(Update: Der hier erwähnte Remote-Dienst ist Let's Encrypt. Ich habe einen Fehler gegen den Issue-Tracker gemeldet , der mich auf diesen Weg geführt hat.)
Beim Testen in meinem lokalen Netzwerk konnte ich feststellen, dass ich manchmal eine leere DNS-Antwort vom gehosteten DNS-Server erhalte. Anscheinend ist dies zeitweise, da es nur passiert, wenn sich die DNS-Einträge nicht im Cache befinden, und es nur dann ein Problem ist, wenn der DNS-Server wirklich ausgelastet ist.
Hier ist eine Wireshark-Beschreibung einer leeren Antwortnachricht:
Da die meisten DNS-Abfragen und -Antworten über UDP gesendet werden, wartet ein lokaler Resolver natürlich nur eine Weile auf die Antwort und gibt dann auf. Ich frage mich jetzt, ob es Richtlinien für DNS-Antwortzeiten gibt. Mein DNS-Hoster zuckte die Achseln und sagte, mein lokaler Resolver habe die leere Antwort zu früh gesendet. Ich hatte dieses Problem noch nie zuvor, bin aber überrascht über den Fehlermodus - eine leere DNS-Antwort ohne Fehlercode.
Kennt jemand einige Richtlinien, wie dies funktionieren soll und wann / wie ich nachweisen kann, dass mein DNS-Hosting etwas falsch macht?
dig
/nslookup
oder eine Wireshark-Dissektion sehen. (tcpdump
wird nicht gut genug sein) Wenn Sie verwendennslookup
, führen Sieset debug
zuerst aus.Antworten:
Die leere Antwort, die Sie betrachten, ist ein synthetischer Zustand, der als bekannt ist
NODATA
.NODATA
undNXDOMAIN
beide zeigen an, dass der Name nicht existiert, aber auchNXDOMAIN
für alle Namen unter dem angegebenen Datensatz gilt.NODATA
weist darauf hin, dass entweder dieser Name mit Datensätzen eines nicht angeforderten Typs verknüpft ist oder dass sich andere Datensätze unter dem befinden, was Sie anfordern. (dhexample.test.xavamedia.nl.
)Ihr Mitnehmen von
NODATA
undNXDOMAIN
ist in diesem Zusammenhang praktisch dasselbe: Der Datensatz des angeforderten Namens und Typs war nicht vorhanden. Ein maßgeblicher Name - Server wurde für die gewünschte Domain erreicht, und es antwortete Angabe zurück , dass ein Datensatz mit diesem Namen und Typ nicht existierte. Dies ist kein Kommunikationsfehler. Der autorisierende Server sagte, dass er die Daten nicht hatte. Höchstwahrscheinlich hat der Server, mit dem Sie gesprochen haben, diese Anforderung bereits verarbeitet und das Fehlen dieses Datensatzes innerhalb der letzten vier Stunden zwischengespeichert. (14400 Sekunden ist das negative Cache-Intervall, das im SOA-Datensatz für definiert ist.xavamedia.nl.
)Weder
NXDOMAIN
nochNODATA
für sich allein führt in dieser Instanz zu einer Zeitüberschreitung, aber Ihre Resolver-Bibliothek wird wahrscheinlich von hier aus zum Anhängen des DNS-Suchsuffix übergehen, was wiederum eine Zeitüberschreitung für die autorisierenden DNS-Server der Suchdomäne auslösen kann.Es sollte beachtet werden, dass nichts davon erklärt, warum Sie
SERVFAIL
beim Nachschlagen auf eine Antwort gestoßen sindmysql.xavamedia.nl.
. Dies weist auf ein Problem hin, bei dem der rekursive Server die Antwort von den autorisierenden Servern erhält. Entweder antwortete der autorisierende Server mitSERVFAIL
, der rekursive Server konnte keinen der autorisierenden Server erreichen, oder der rekursive Server stellte fest, dass die zurückgegebenen Daten ungültig waren. Nichts davon kann mit den von Ihnen angegebenen Informationen nachgewiesen werden.quelle
NODATA
in Ihrer Paketerfassung ist der Beweis. Die relevante Frage lautet: "Warum hat ein autorisierender Server geantwortet und gesagt, dass kein solcher Datensatz vorhanden ist?" . Leider ist es schwierig, Druck auszuüben, es sei denn, Sie können dies durch direkte Suche nach den autorisierenden Servern beweisen (wodurch die Möglichkeit beseitigt wird, die Betreiber der rekursiven Server zu zucken und zu beschuldigen), wobei zu berücksichtigen ist, dass sich nur einer der drei gelegentlich schlecht verhält.NODATA
bedeutet, dass der Name zwar vorhanden ist, jedoch kein Datensatz des angeforderten Typs vorhanden ist. ZB fragen Sie nachA
Aufzeichnung, aber es hat nurMX
Aufzeichnung. Dies kann auch vorkommen, wenn der Name für einen Zwischenknoten in der DNS-Hierarchie steht und keine eigenen Datensätze enthält.NXDOMAIN
bedeutet, dass der Name nicht existiert,NODATA
bedeutet , dass der Name existiert, der angeforderte Datensatztyp jedoch nicht.Ich kenne keine spezifischen Richtlinien außer den in Abschnitt "6.1.3.3 Effiziente Ressourcennutzung" von RFC 1123 http://tools.ietf.org/rfcmarkup?rfc=1123#page-77 definierten
Dort wird ein Timeout-Wert von "nicht weniger als 5 Sekunden" angegeben. Der RFC gibt außerdem an, dass temporäre Fehler zwischengespeichert werden sollten. Dies dient dazu, eine übermäßige Anzahl von DNS-Anforderungen zu verhindern, wenn Clients gegen Abschnitt 2.2 des RFC verstoßen. In diesem Abschnitt heißt es, dass Clients bei weichen Fehlern zwischen den Wiederholungsversuchen eine "angemessene" Zeit warten sollten.
Es gibt auch einen Stackoverflow-Thread zu diesem Thema, der jedoch nur einige reale Beobachtungen enthält. /programming/3036054/ideal-timeout-period-for-dns-lookup
Das ist alles, was ich zu diesem Thema sagen kann. Wenn jemand anderes mehr hinzuzufügen hat, wäre ich auch interessiert.
quelle