Aktualisierungen einer dynamischen BIND-Zone, die von verzögerten Ansichten gemeinsam genutzt wird

8

Hier ist das Schnelle und Schmutzige: Unter BIND9 mit einer dynamischen Zone, die von Ansichten gemeinsam genutzt wird, funktioniert das Aktualisieren / Erstellen / Löschen eines Datensatzes einwandfrei, wenn ich diesen Datensatz von einem Client abfrage, der in dieselbe Ansicht fällt wie das nsupdate von.

Wenn Sie aus einer Ansicht abfragen , die nicht mit der Ansicht übereinstimmt, die ich für nsupdate verwendet habe, wird NXDOMAIN ausgelöst (wenn ein neuer Datensatz hinzugefügt wird) oder es werden alte Datensatzinformationen im Falle einer Änderung / Aktualisierung bis zu einer beliebigen Zeitspanne angezeigt (z. B. 15) Minuten) vergeht, oder ich tue es gewaltsam $ rndc freeze && rndc thaw. $ rndc syncscheint überhaupt nichts zu tun, um das Problem zu beheben - ich hatte gehofft, dass es sich nur um eine Journaldateisache handelt, da dokumentiert ist, dass das Löschen des Journals etwa 15 Minuten dauert.

Wenn das nicht klar ist, finden Sie hier einen Pseudocode, um uns den Einstieg zu erleichtern:

BIND-Ansichten

view "cdn-redir" {
   match-clients { 10.1.1.0/24; 10.1.2.0/24; };
   include "cdn-zone.db";
   include "dynamic-zone.db";
};

view "default" {
   match-clients { any; };
   include "dynamic-zone.db";
};

Beispiel Befehlszeile

user@ns:~$ nsupdate -k rndc.key
> server localhost
> zone example.com.
> update add foohost.example.com. 600 A 10.5.6.7
> send
> quit

user@ns:~$ dig foohost.example.com (resolv.conf points to 127.0.0.1)
  [ responds with correct answer 10.5.6.7 ]

An anderer Stelle fällt ein Host in dieselbe Ansicht wie das nsupdate

[email protected]:~$ foohost.example.com (resolv.conf points to above nameserver)
  [ responds with correct answer 10.5.6.7 ]

An anderer Stelle fällt der Host in eine andere Ansicht als das nsupdate

[email protected]:~$ dig foohost.example.com (resolv.conf points to above nameserver)
  [ responds with NXDOMAIN even though I'm asking the same server ]

Wenn ich geduldig bin, wird sich das Problem zu diesem Zeitpunkt von selbst lösen (vielleicht 15 Minuten), aber ich habe häufig nicht den Luxus der Geduld, so dass ich gezwungen bin, $ rndc freeze && rndc thawauf dem Nameserver das Problem zwangsweise zu beheben.

Auf der Kehrseite

Auf der perfekt umgekehrten Seite kehrt sich das Problem um, wenn ich das nsupdate für den Server von einer Adresse aus durchführe, die in die Ansicht "cdn-redir" fällt. Nachfolgende Anfragen von Clients „CDN-redir“ erhalten die korrekte Aufzeichnung unmittelbar nach nsupdate passend ohne mit „rndc Frost / Tau - “ Hantieren, aber von Adressen abfragt , die außerhalb der Sicht von „CDN-redir“ fallen nun die Verzögerung / rndc silliness haben.

Meine letzte Frage

Wenn es so einfach wie 42 wäre, würde ich es mit offenen Armen nehmen ...

Ich möchte vermeiden, dass ich "rndc freeze && rndc thaw" muss, aus Angst, ein dynamisches Update vom DHCP-Server zu verpassen. Weiß jemand, wie die aktualisierten Datensätze effektiver / effizienter zwischen Ansichten synchronisiert werden können, oder kann er Aufschluss darüber geben, wo ich möglicherweise falsch liege?

Edit: BIND 9.9.5 / Ubuntu 14.04, aber es ist in früheren Versionen von Ubuntu und BIND passiert.

Vielen Dank an alle!

Wie von Andrew B angefordert , ist hier die redigierte (und teilweise) Zone:

$ORIGIN .
$TTL 3600
example.com     IN SOA ns1.example.com. HOSTMASTER.example.com. (
                       2009025039 ; serial
                       900 ; refresh 15
                       600 ; retry 10
                       86400 ; expire 1 day
                       900 ; minimum 15 min
                )
                NS     ns1.example.com.
$ORIGIN example.com.
$TTL 30
AEGIS           A   10.2.1.60
                TXT "31bdb9b3dec929e051f778dda5abd0dfc7"
$TTL 86400
ts-router       A 10.1.1.1 
                A 10.1.2.1
                A 10.1.3.1
                A 10.1.4.1
                A 10.1.5.1
                A 10.1.6.1
                A 10.1.7.1
                A 10.1.8.1
                A 10.2.1.1
                A 10.2.2.1
                A 10.2.3.1
ts-server       A 10.2.1.20
ts-squid0       A 10.2.2.20
ts-squid1       A 10.2.2.21
$TTL 600
tssw4           A 10.2.3.4
tssw5           A 10.2.3.5
tssw6           A 10.2.3.6
tssw7           A 10.2.3.7
; wash rinse repeat for more hosts
$TTL 30
wintermute      A     10.2.1.61
                TXT   "003f141e5bcd3fc86954ac559e8a55700"
enragedSquirrel
quelle
Könnten Sie überredet werden, den Inhalt von dynamic-zone.db zu teilen? Verschleiern Sie die Domänen, wenn Sie müssen, aber ich würde gerne die Zonenoptionen sehen.
Andrew B
Wie Sie angefordert haben ...
enragedSquirrel
Eigentlich wollte ich die Include-Datei, nicht den Inhalt der Zonendatei. Ich wollte die zoneErklärung sehen, weil meine Gedanken in eine ähnliche Richtung gingen wie die von Håkan.
Andrew B
In Bezug auf: user @ ns: ~ $ nsupdate -k rndc.key> server localhost> zone example.com. > Update hinzufügen foohost.example.com. 600 A 10.5.6.7 Möglicherweise möchten Sie wissen, dass die Verwendung von serveranstelle von local external-ip-addressden MNAME der Zone (in der SOA der Zone) konsultiert und Sie möglicherweise zu einem anderen Nameserver führt, um Ihr DNS-Update durchzuführen (insbesondere, wenn Sie einen versteckten Master / öffentlichen Slave haben) oder Stealth-Master-Netzwerktopologie).
John Greene

Antworten:

7

Unterschiedliche Ansichten werden separat ausgeführt. Dies ist im Wesentlichen ein Vorteil gegenüber der Ausführung separater Instanzen von Named. Wenn es Zonen mit demselben Namen in verschiedenen Ansichten gibt, ist dies nur ein Zufall. Es handelt sich immer noch um völlig separate Zonen, die nicht mehr miteinander verbunden sind als alle anderen Zonen.

Wenn mehrere separate Zonen dieselbe Zonendatei verwenden, funktioniert dies nicht in Situationen, in denen bind den Zoneninhalt selbst aktualisiert (Slave-Zonen, Zonen mit dynamischen Aktualisierungen usw.). Ich bin mir nicht sicher, ob überhaupt die Gefahr besteht, dass die Zonendatei selbst beschädigt wird.

Möglicherweise können Sie so etwas wie das festlegen, was Sie tun möchten, indem Sie die Zone in einer Ansicht als Slave für die Zone mit demselben Namen in der anderen Ansicht festlegen. Dies wird eindeutig eine etwas komplizierte Konfiguration sein, aber die Verwendung von TSIG-Schlüsseln für Match-Clients sowie die Benachrichtigung / Übertragung sollte meiner Meinung nach machbar sein.

Bearbeiten: ISC hat einen KB-Artikel für dieses Szenario veröffentlicht. Wie kann ich eine dynamische Zone für mehrere Ansichten freigeben? Dies deutet auf die oben erwähnte Konfiguration hin.

Dies ist ihr Konfigurationsbeispiel mit etwas verbesserter Formatierung:

key "external" {
    algorithm hmac-md5;
    secret "xxxxxxxx";
};

key "mykey" {
    algorithm hmac-md5;
    secret "yyyyyyyy";
};

view "internal" {
    match-clients { !key external; 10.0.1/24; };

    server 10.0.1.1 {
        /* Deliver notify messages to external view. */
        keys { external; };
    };

    zone "example.com" {
        type master;
        file "internal/example.db";
        allow-update { key mykey; };
        also-notify { 10.0.1.1; };
    };
};

view "external" {
    match-clients { key external; any; };

    zone "example.com" {
        type slave;
        file "external/example.db";
        masters { 10.0.1.1; };
        transfer-source { 10.0.1.1; };
        // allow-update-forwarding { any; };
        // allow-notify { ... };
    };
};
Håkan Lindqvist
quelle
Im Anschluss daran hat mich der KB-Artikel von ISC, auf den Sie verweisen, und ein anderer, der für Versionen neuer als 9.9 über den oben genannten Link zum KB-Artikel spezifisch ist (Registrierung erforderlich), zum Laufen gebracht. Danke Håkan Lindqvist!
enragedSquirrel
Ich musste transfer-source 10.0.1.1;(ohne die geschweiften Klammern) mit Binden 9.9.5 verwenden.
Calimo
1

Da ich ähnliche Probleme mit Ansichten hatte, beschloss ich, sie zu entfernen und die Autorisierung stattdessen in die Zonen zu verschieben.

Sie können die Ansichten in Fragen durch einfache Includes beider Zonendateien ersetzen, die aktuell freigegebenen Zonen unberührt lassen und der Definition "dynamic-zone.db" die Erlaubnis-Abfrage {} hinzufügen, wie:

    zone "dynamic.zone" {
            allow-query { 10.1.1.0/24; 10.1.2.0/24; };
            type master;
            file "/etc/bind/zones/master/dynamic.zone";
            update-policy { .... };
    };

Auf diese Weise erreichen Sie Ihr vermutetes Ziel, dynamic.zone nur von bestimmten Netzwerken aus zugänglich zu machen und andere Zonen öffentlich zu machen.

tomas
quelle