Ich habe zwei DNS-Server mit BIND9, einen Master und einen Slave. Wenn die Zonendatei auf dem Master aktualisiert wird, möchte ich, dass der Slave-Server sofort mit der Bereitstellung der geänderten Datensätze beginnt, aber BIND gibt mir ein wenig Ärger.
Die DNS-Zonenübertragung zwischen Master und Slave funktioniert bereits ordnungsgemäß. Ich kann mich beim Slave-Server anmelden und ausführen dig @dnsmaster myzone. AXFR
und er druckt den gesamten Inhalt der Zone aus. Damit dies funktioniert, ist der DNS-Master mit notify yes
und konfiguriert also-notify { dnsslave }
. Ebenso ist der Slave mit konfiguriert allow-transfer { dnsmaster }
.
Wenn dnsmaster aktualisiert wird, werde ich ausgeführt rndc reload
und es wird mir mitgeteilt, dass Benachrichtigungen gesendet werden. Dies wird auf dem Slave durch Überprüfen der Zonendateien in bestätigt /var/named/slavedata/
. Sie enthalten die neuesten Daten, die dem entsprechen, was der Master weiß.
Jetzt kommt der seltsame Teil.
Der Slave-Server stellt weiterhin alte, veraltete DNS-Einträge bereit und ignoriert vollständig die Tatsache, dass neue Daten auf der Festplatte verfügbar sind, nachdem sie vom Master benachrichtigt wurden. Ich verwende dig
, um die Ergebnisse mit diesem Befehl zu überprüfen : dig @slaveserver record.zone.tld
.
Ich dachte, BIND könnte einen In-Memory-Cache seiner autorisierenden Zonen behalten, also habe ich max-cache-size
und max-cache-ttl
auf 0 gesetzt, aber das hatte keine Auswirkung.
Ich habe versucht, diesen angeblichen Cache auf andere Weise zu leeren, indem ich Befehle wie rndc flush
und rndc reload
auf dem Slave-Server ausgeführt habe, aber es werden immer noch die alten veralteten Datensätze zurückgegeben.
Schließlich bemerkte ich, dass MINTTL
in der Zone 86400 (24 Stunden) eingestellt war, also änderte ich vorübergehend die MINTTL
auf 15 Sekunden und startete den Slave-Server neu. Keine Auswirkung - Der Slave würde erst nach dem Neustart des Dienstes aktualisierte DNS-Ergebnisse bereitstellen.
Was ist denn hier los? Was ist das erwartete Verhalten von BIND9 beim Empfang einer Benachrichtigung, dass eine Zone aktualisiert wird? Respektiert es immer TTL
und MINTTL
? Ich würde davon ausgehen, dass immer die neuesten verfügbaren Daten verwendet werden.
Am Ende meines Witzes denke ich darüber nach, eine Crontab einzurichten, um die BIND-Slaves stündlich neu zu starten, um zu vermeiden, dass veraltete Daten bereitgestellt werden. Gibt es etwas Besseres?
rndc reload
.Antworten:
Aus Ihrer Beschreibung kann ich Ihnen nicht genau sagen , was ist das Problem aber ich kann Ihnen mehrere Dinge ausschließen helfen.
Die Einstellungen für die Cache-Größe und die Cache-TTL gelten für zwischengespeicherte rekursive Abfragedaten und gelten (wie Sie bereits vermutet haben) nicht für autorisierende Daten. Ebenso ist rndc flush hier nicht anwendbar.
Vorgeschlagene Methode zur Fehlerbehebung:
Wenn dies nicht funktioniert, sollten Sie weitere Informationen veröffentlichen, einschließlich der Abschnitte named.conf sowohl vom Master als auch vom Slave und Protokolle von beiden Servern darüber, was nach dem Laden einer frisch bearbeiteten Zone auf dem Master geschieht.
quelle
Ich sah mich der gleichen Situation gegenüber. Meine Nachforschungen führten mich zu folgender Erkenntnis. Wenn Sie Ansichten verwenden, dient dig @ local machine nur dem, was in der localhost-Ansicht enthalten ist. Die localhost-Ansicht wird nur beim Neustart des genannten aktualisiert. Die neueste Zonendatei (vom Master übertragen) ist jedoch weiterhin auf dem Slave verfügbar und wird für alle Abfragen bereitgestellt, die von externen Quellen oder externen Ansichten stammen. Sie müssen also Vorkehrungen treffen, damit Ihre lokale Host-Ansicht aktualisiert wird.
quelle
in-view
ob eine Zone in allen Ansichten identisch sein soll.Vergessen Sie nicht, die Serien-ID aus den Zonendateien zu erhöhen, wenn Sie Änderungen in Master Server vornehmen, bevor Sie den Namen neu laden. Andernfalls werden die Zonendateien nicht auf Slave Server repliziert.
quelle