fragen stichworte

Mit AAAA-Anforderung verbundene Verzögerung

Ich habe ein eigenständiges, isoliertes Netzwerk, auf dem gemischte Windows- und Linux-Systeme ausgeführt werden, wobei ein Windows 2008 R2-Server AD-Aufgaben und DNS ausführt.

Ich sehe Verzögerungen von 5 Sekunden, wenn getaddrinfo unter Linux verwendet wird Systeme.

In Wireshark sehe ich (C-> S bedeutet Client an DNS-Server):

t=0.000   C->S Query A     foo.example.com    ID=0x1111
t=0.000   C->S Query AAAA  foo.example.com    ID=0x2222
t=0.004   S->C Response to 0x2222, No error
          (Query is echoed)
          Authoritative nameservers:
             example.com: type SOA, class IN, mname svr01.example.com
               Name: example.com
               Type: SOA
               Class: IN
               TTL: 1 hour
               Primary name server: svr01.example.com
               Refresh interval: 15 minutes
               Retry interval: 10 minutes
               Expiration limit: 1 day
               Minimum TTL: 1 hour

[5 second delay]

t=5.004   C->S Query A     foo.example.com    ID=0x1111
t=5.005   S->C Query response A  192.168.1.17'

Wenn ich dieselbe Anfrage noch einmal stelle, sehe ich wie erwartet keine Verzögerung:

t=0.000   C->S Query A     foo.example.com    ID=0x3333
t=0.000   C->S Query AAAA  foo.example.com    ID=0x4444
t=0.001   S->C Query response A  192.168.1.17'

Ich kann einige Zeit lang sofort Antworten erhalten. Nach einer Weile (noch experimentieren) kehrt die Verzögerung zurück.

Was ist hier los? Wenn ich gethostbyname() (was nur IPv4 tut) oder nslookup foo.example.com verwende, gibt es keine Verzögerung.

Zusätzliche Informationen:

  • IPv6 ist auf den Server-NICs deaktiviert

Update:

Diese Antwort auf Ask Ubuntu schlug vor,

hinzuzufügen
options single-request

bis /etc/resolv.conf. Dies schien das Problem für mich zu beheben.

Ich bin jedoch immer noch neugierig:

  • Was der SOA-Datensatz tatsächlich bedeutet
  • Warum reagiert der Server nicht beim ersten Mal auf die A-Abfrage
  • ?

antworten

Ihr DNS-Server scheint fehlerhaft zu sein. Zwei Anforderungen werden an den DNS-Server gesendet, es wird jedoch nur eine einzige Antwort gesendet. Der Client tut, was Clients in diesem Fall tun sollen, er wartet kurz und sendet dann die Anfrage erneut.

Eine anfängliche Verzögerung von 5 Sekunden kann für eine nicht interaktive Verwendung sinnvoll sein. Aber für die interaktive Nutzung würde ich das viel zu hoch halten.

Die richtige Lösung wäre, den DNS-Server auf eine Version ohne den Fehler zu aktualisieren oder den Hersteller zu kontaktieren, wenn noch keine Lösung veröffentlicht wurde. Alles andere ist ein Workaround.

Mit man resolv.conf auf einem Ubuntu-System wird erklärt, was die Optionen single-request und single-request-reopen tun. Dies sind zwei verschiedene Varianten einer Problemumgehung für einen bekannten Fehler in bestimmten DNS-Servern. Der Nachteil dieser Optionen ist, dass die Namensauflösung um etwa den Faktor zwei verlangsamt wird. Da der Fehler die Namensauflösung um den Faktor 1000 zu verlangsamen scheint, können Sie die Problemumgehung dennoch besser nutzen.

Wenn Sie einen nicht vorhandenen Datensatz anfordern, erhalten Sie möglicherweise stattdessen eine Antwort mit einem SOA-Datensatz. Der Grund für das Senden nicht nur eines Fehlercodes, sondern auch eines SOA-Datensatzes ist, dass der SOA-Datensatz Informationen enthält, mit denen das negative Ergebnis zwischengespeichert werden kann.

Die korrekte Methode zum Interpretieren der Paketerfassung ist, dass Antwortpakete für sowohl als auch für die A - und AAAA -Antwortantwort fallen gelassen werden.

Der SOA -Datensatz scheint Sie zu verwirren und ist eine Überlegung wert:

  • Der SOA -Datensatz befindet sich tatsächlich im Autoritätsabschnitt, nicht im Antwortabschnitt.
  • NXDOMAIN bedeutet "es gibt keine Datensätze, die diesen Namen haben". Wenn es andere Datensätze mit demselben Namen, jedoch unterschiedlichen Typen gibt, wird die Antwort NOERROR mit null Datensätzen im Antwortabschnitt angezeigt.
  • Was Sie sehen, ist eine Antwort NOERROR mit null Antworten und einem Autoritätsteil, der Ihnen mitteilt, aus welcher Zone diese Antwort stammt. Sie können die SOA -Komponente vollständig ignorieren. Diese Antwort sagt Ihnen, dass es keinen AAAA -Datensatz gibt.

Nachdem wir nun festgestellt haben, dass die Antwort AAAA ein korrekt formatiertes Paket ist und was Sie in diesem Szenario sehen sollten, ändert sich der Kontext dessen, was Sie suchen bei ganz. Sie sehen Fälle, in denen A Datensatzantworten verloren gehen, zusätzlich zu AAAA Antworten. Ihre Forschung legt nahe, dass AAAA -Antworten häufiger, jedoch nicht ausschließlich, verloren gehen.

Aufgrund der gelieferten Informationen können wir nicht erklären, was hier vor sich geht. Sie müssen Paketerfassungen auf den DNS-Servern selbst einrichten und die folgenden Faktoren angeben:

  1. Kommen die mit den fehlenden Antworten verknüpften Abfragen tatsächlich beim DNS-Server an?
  2. Wenn die Abfragen beim DNS-Server ankommen, werden tatsächlich Antworten gesendet?
  3. Wenn der Server keine Antworten sendet, muss Ihr DNS-Server diese Informationen von einem anderen DNS-Server erhalten, dessen Antwort lange dauert? (Zeitüberschreitung beim ersten Versuch, aber die Abfrage im Zwischenspeicher für den zweiten Versuch.) Sehen Sie, dass die Abfrage so stark genug ist, dass Ihre Socketwarteschlange überläuft?
  4. Wenn der Server die Antworten sendet, welche Geräte zwischen dem Server und dem Client könnten die Pakete verlieren? Hat einer Ihrer DNS-Server ein Routing-Problem im Vergleich zu den anderen? Scheint es so, als würden Pakete von allen DNS-Servern verloren gehen, was auf ein Netzwerkproblem zwischen Client und Server hinweist?

Wie Sie sehen, gibt es hier eine Menge Dinge, die sich abspielen könnten. Sie müssen sich auf das Problem beschränken, um die Möglichkeiten auszuschließen. Ich entschuldige mich dafür, dass diese Antwort nicht abschließend ist, aber dies war weitaus mehr, als in wenigen Kommentaren behandelt werden könnte. Fühlen Sie sich frei, Ihre Frage zu aktualisieren.