So leeren Sie den lokalen DNS-Cache in CentOS

20

Ich suche nach einer Möglichkeit, den lokalen DNS-Cache auf einem CentOS 6 zu leeren.

Auf dem System wird kein DNS-Server oder ähnliches ausgeführt, und ich möchte, dass jede DNS-Abfrage an den konfigurierten Nameserver gesendet wird, auch für die doppelten.

Das meiste, was ich online gefunden habe, soll ich tun service nscd restart, nachladen oder tun nscd -i hosts. Keiner scheint jedoch den Cache zu leeren.

Ich frage mich also, ob jemand eine Idee hat, wie ich das machen könnte. Gibt es eine Art Schalter im Kernel, den ich umlegen muss? Jede Art von Arbeit ist auch in Ordnung.

zee
quelle
Was tun Sie, um zu überprüfen, ob der Cache geleert wurde oder nicht?
John
ok es ist ein bisschen kompliziert, ich habe ein Programm auf meinem System, das auf Port 53 lauscht und die DNS-Abfragen auf bestimmte Weise weiterleitet, und auch einen http-Proxy, der localhost als 'DNS-Server' verwendet; bei der ersten abfrage (sprich wget -e 'http_proxy=localhost:3128' xxx.com) sehe ich, dass die abfrage korrekt weitergeleitet wird, aber alle nachfolgenden nicht. Wenn ich lange genug warte (Cache läuft ab), funktioniert es wieder.
zee
Außerdem habe ich den Proxy (Tintenfisch) so konfiguriert, dass kein Objekt zwischengespeichert wird. Ich nehme also an, dass das System die Antwort immer noch zwischenspeichert
siehe
1
nscd -i hosts -> funktioniert immer. Ich habe nscd dreimal hintereinander neu gestartet und wollte den Cache nicht leeren.
Danie
nscd scheint in CentOS 7 minimal keine Rolle zu spielen. Ich weiß, die Frage ruft CentOS 6 auf, aber der Titel ruft CentOS im Allgemeinen auf. Wie funktioniert CentOS 7?
duct_tape_coder

Antworten:

11

Es ist nicht Ihre lokale Box, die die DNS-Anfragen zwischenspeichert, sondern der DNS-Resolver, den Sie in Ihrem /etc/resolv.confWho-Caching verwenden.

So verhindern Sie, dass diese zwischengespeicherten Abfragen beantwortet werden:

  1. Ändern Sie den Resolver.

    $ dig @<resolve-ip> www.google.com

  2. Leeren Sie den DNS-Cache auf dem Resolver, wenn Sie auf den DNS-Server zugreifen können.

    $ sudo /etc/init.d/bind restart

pradeepchhetri
quelle
Hmm, aber ich habe dns_nameservers 127.0.0.1in der Proxy-Konfigurationsdatei festgelegt, und der Listener leitet Anfragen nur an vorkonfigurierte Nameserver weiter. Sollte es nicht so sein, dass die resolv.conf nicht einmal konsultiert wird?
zee
4
"bash: /etc/init.d/bind: Keine solche Datei oder kein solches Verzeichnis" Und die OP-Methode erhält "nscd.service konnte nicht neu gestartet werden: Unit nscd.service konnte nicht geladen werden: Keine solche Datei oder kein solches Verzeichnis." Ich denke, diese wurden verschoben / geändert. Warum können sie nicht einfach Dinge, die funktionieren, an Ort und Stelle lassen oder zumindest Aliase beibehalten? Schlimm genug, um OS-Spezialist werden zu müssen, um einfach eine Linux-Box zu benutzen. Schlimmer noch, wenn Sie das Betriebssystem mit jedem Release neu lernen müssen.
JosephK
3

Auch nach dem Aktualisieren oder Leeren des DNS-Caches auf dem Client-Computer, wenn dies nicht funktioniert, wird Ihr Server oder Client-Computer an einen NIS-Server gebunden. Wenn dies der Fall ist, ändern Sie "hosts: files nis dns" in "hosts: files dns nis" Eintrag in der Datei /etc/nsswitch.conf und Sie müssen auch die IP-Adresse in der Hostliste des NIS-Masterservers ändern.

Vilas Addagatla
quelle
Dies führte zu meiner Lösung. In / etc / hosts befand sich die zuvor statisch konfigurierte alte IP-Adresse. Etwas, das ich vor einiger Zeit getan hatte. Das Löschen dieser Zeile (oder das Ersetzen durch die neue IP-Adresse) löste das Problem und ermöglichte es mir, meinen Computer mit seinem Hostnamen zu pingen.
Paul
3

Ich bin mir fast sicher, dass es nicht das System ist, das die Antwort zwischenspeichert - dieser Teil (das Zwischenspeichern des Systems) wird nur vom nscdDämon behandelt. Durch Neustarten (oder vollständiges Anhalten) dieses Dämons wird das Zwischenspeichern von Antworten auf Nameservice-Anforderungen im Betriebssystem zurückgesetzt oder beseitigt.

Ich biete zwei Möglichkeiten an, obwohl der benutzerdefinierte Listener, den Sie auf Port 53 eingerichtet haben, das Wasser erheblich trübt:

  • A) Ihr System gibt Abfragen im Upstream aus, aber der unmittelbare Upstream-Namensauflöser speichert die Antwort zwischen, entweder basierend auf den Einstellungen oder der TTL des Datensatzes.
  • B) Ihr benutzerdefinierter Listener speichert die Antworten intern im Cache und übergibt sie direkt an das System, wenn er vor Ablauf der Cache-Zeit erneut gefragt wird.
John
quelle
Vielen Dank für die Eingabe, aber der Listener leitet nur die Abfrage und die Antwort weiter. Immerhin sind es nur 200 Codezeilen. Sollte also nicht der zweite Fall sein; außerdem druckt der Zuhörer alles aus, was er erhält, und ich bin sicher, dass er tatsächlich nichts bekommt: |
Zee