
Ich habe eine Bind-Version wie unten gezeigt
9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6.1.2
Ich habe zwei domänenspezifische Weiterleitungen, nämlich test.example.com und internal-test.example.cloud.com
Der lokale DNS-Client oder Resolver, der einen bestimmten CNAME in der Domäne „test.example.com“ auflösen muss, wird von meinem lokalen DNS-Server an die konfigurierten Weiterleitungen weitergeleitet und ihre Antworten werden ebenfalls zwischengespeichert. Alles funktioniert prima, kein Problem. Meine Frage ist jedoch, dass der externe DNS-Server für die Fordwared-Abfrage mit einem TTL-Wert von 60 antwortet. Mein interner DNS-Server speichert diese Antwort also nur für 60 Sekunden zwischen. Gibt es eine Möglichkeit, die TTL von meinem internen DNS-Server für diese bestimmte Domäne zu überschreiben??
Und die /etc/named.conf sieht wie folgt aus
options {
directory "/var/named";
allow-transfer{"none";};
allow-query {localhost; any;};
dump-file "/var/log/named_dump.db";
max-cache-ttl 300;
};
zone "test.example.com" IN {
type forward;
forwarders {11.1.2.17; 11.1.3.59;};
forward only;
};
zone "internal-test.example.cloud.com" IN {
type forward;
forwarders {11.1.2.17; 11.1.3.59;};
forward only;
};
zone "domain.local" in {
type master;
file "domain.local";
};
[root@dchockal ~]# dig test.example.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6.1.2 <<>> test.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31197
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;test.example.com. IN A
;; ANSWER SECTION:
test.example.com. 60 IN CNAME internal-test.example.cloud.com.
internal-test.example.cloud.com. 60 IN A 121.1.2.22
internal-test.example.cloud.com. 60 IN A 121.1.2.23
internal-test.example.cloud.com. 60 IN A 121.1.4.24
internal-test.example.cloud.com. 60 IN A 121.1.4.25
;; Query time: 133 msec
;; SERVER: 11.4.152.28#53(11.4.152.28)
;; WHEN: Thu Dec 15 15:31:22 2016
;; MSG SIZE rcvd: 175
Antwort1
BIND kann das nicht und es wird nicht als gute Praxis angesehen. Aber vielleicht können Sie auf BIND 9.10.4 aktualisieren? In diesem Fall könnten Sie die prefetch
Option - verwenden. Dies würde BIND zwingen, Cache-Daten auf häufig verwendeten Domänen kurz vor Ablauf ihrer TTL zu erneuern (kann wahrscheinlich für bestimmte Zonen verwendet werden, aber ich kann das nicht testen, da diese Version von BIND noch nicht auf Raspbian verfügbar ist). Mehr zu dieser Option finden Sie hier:
Zum Beispiel,
options {
...
prefetch 2 9;
};
würde eine Cache-Aktualisierung für jede Domäne erzwingen, die sich aktuell im Cache befindet, innerhalb der letzten 2 Sekunden ihrer TTL abgefragt wurde und im Allgemeinen eine TTL von mehr als 9 Sekunden hat.
Übrigens: Wenn Sie ein Update durchführen, achten Sie darauf, dass es auf BIND 9.10.4 passt. Der prefetch
-Mechanismus wurde in 9.10 eingeführt, allerdings gab es einen hässlichen Bug, der erst ab 9.10.4 behoben wurde:
https://kb.isc.org/article/AA-01315/0/prefetch-performance-in-BIND-9.10.html
Antwort2
Ich glaube nicht, dass BIND diese Funktionalität hat – nur TTL-Verringerungen ( cache-max-ttl
), keine Erhöhungen ( cache-min-ttl
scheint bei meinem BIND nicht zu funktionieren, aber Sie könnten es mal ausprobieren und sehen, ob es bei Ihrer Version funktioniert). Aber wir könnten unsere eigene autoritative Domäne erstellen. Danach könnten wir in dieser Domäne einen CNAME-Eintrag für die externe Domäne erstellen.
test.mydomain.com CNAME test.example.com.
Anschließend wird die Abfrage für test.mydomain.com
in die IP-Adresse von aufgelöst test.example.com
und die TTL kann nach Wunsch konfiguriert werden.
Theoretisch könnten wir eine Zone neu schreiben, die BIND zwischenspeichert, sie dann als lokale Zonendatei erstellen, die TTL festlegen und BIND neu starten; aber das ist ein furchtbarer Hack.
Die Software dnsmasq
verfügt über eine Option, --min-cache-ttl=<time>
wobei time
kleiner oder gleich 3600 Sekunden ist. Das Handbuch enthält eine Warnung.
--min-cache-ttl=<time>
Extend short TTL values to the time given when caching them. Note that
artificially extending TTL values is in general a bad idea, do not do it
unless you have a good reason, and understand what you are doing. Dnsmasq
limits the value of this option to one hour, unless recompiled.
Ihre Frage liest sich, als wüssten Sie, was Sie tun. Unbound verfügt ebenfalls über diese Funktion.
cache-min-ttl: <seconds>
Time to live minimum for RRsets and messages in the cache. Default is 0.
If the minimum kicks in, the data is cached for longer than the domain owner
intended, and thus less queries are made to look up the data. Zero makes sure the
data in the cache is as the domain owner intended, higher values, especially more
than an hour or so, can lead to trouble as the data in the cache does not match
up with the actual data any more.
Ersetzen Sie BIND möglicherweise durch Unbound oder dnsmasq, oder verwenden Sie einen davon als Weiterleitung zu BIND.