Bind-Zonendatei-Cache und DNS-Cache

Bind-Zonendatei-Cache und DNS-Cache

In meinem Labor gibt es zwei Nameserver, auf denen bind9 läuft:
ServerA hat eine Zonendatei für „example.com“;
ServerB hat eine Zonendatei für „sub.example.com“, die eine Unterzone von „example.com“ ist.
In der Zonendatei von ServerA gibt es zwei NS-Einträge über die Unterzone und zwei Glue-Einträge wie unten:

sub IN NS dns1.sub
    IN NS dns2.sub
dns1.sub IN A 1.1.1.1
dns2.sub IN A 2.2.2.2

In der Zonendatei von ServerB sind die NS-Einträge wie folgt:

@ IN NS dns1
  IN NS dns2
dns1 IN A 1.1.1.1
dns2 IN A 3.3.3.3

Der A-Eintrag von dns2.sub in der Zonendatei von ServerA ist falsch (ich habe das mit Absicht gemacht), er sollte 3.3.3.3 sein.
Nach dem Starten der beiden Nameserver lädt ServerA seine Zonendatei in den Cache (ich weiß nicht, wie ich diesen Cache nennen soll, hier nenne ich ihn „Zonendatei-Cache“) und ServerB tut dies ebenfalls.

Schritt 1: Ich führe „dig @ServerA +norecurse sub.example.com“ aus:

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> @ServerA +norecurse sub.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64332
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 4

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sub.exmample.com.            IN      A

;; AUTHORITY SECTION:
sub.exmample.com.     60      IN      NS      dns1.sub.exmample.com.
sub.exmample.com.     60      IN      NS      dns2.sub.exmample.com.

;; ADDITIONAL SECTION:
dns1.sub.exmample.com. 60     IN      A       1.1.1.1
dns2.sub.exmample.com. 60     IN      A       2.2.2.2

;; Query time: 1 msec
;; SERVER: 10.82.12.69#53(10.82.12.69)
;; WHEN: 二 5月 28 14:55:50 CST 2019
;; MSG SIZE  rcvd: 145

offensichtlich wird der RR gemäß dem Zonendatei-Cache zurückgegeben.

Schritt 2: Ich führe „dig @ServerA +recurse sub.example.com“ aus:

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> @ServerA +recurse sub.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43819
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sub.exmample.com.            IN      A

;; AUTHORITY SECTION:
sub.exmample.com.     30      IN      SOA     dns1.sub.exmample.com. mail.sub.exmample.com. 2019051501 60 60 60 60

;; Query time: 803 msec
;; SERVER: 10.82.12.69#53(10.82.12.69)
;; WHEN: 二 5月 28 15:00:05 CST 2019
;; MSG SIZE  rcvd: 100

Nachdem ich den Cache von ServerA geleert hatte, erhielt ich Folgendes:

sub.exmample.com.     26      \-A     ;-$NXRRSET
; sub.exmample.com. SOA dns1.sub.exmample.com. mail.sub.exmample.com. 2019051501 60 60 60 60

Schritt 3: Ich führe „dig @ServerA +recurse c1.sub.example.com“ aus: c1.sub.example.com ist einer der Hosts in sub.example.com mit der Adresse 4.4.4.4

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> @ServerA +recurse c1.sub.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15260
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;c1.sub.example.com.         IN      A

;; ANSWER SECTION:
c1.sub.example.com.  30      IN      A       4.4.4.4

;; AUTHORITY SECTION:
sub.example.com.     30      IN      NS      dns1.sub.exmample.com.
sub.example.com.     30      IN      NS      dns2.sub.exmample.com.


;; ADDITIONAL SECTION:
dns1.sub.exmample.com. 30     IN      A       1.1.1.1
dns2.sub.exmample.com. 30     IN      A       3.3.3.3


;; Query time: 13 msec
;; SERVER: 10.82.12.69#53(10.82.12.69)
;; WHEN: 二 5月 28 15:05:59 CST 2019
;; MSG SIZE  rcvd: 171

Einige Punkte bereiten mir wirklich Rätsel:
1. Nach der Ausführung aller drei Schritte gibt es im Cache von ServerA zwei Ressourceneinträge zum Nameserver DNS2 der Zone sub.example.com: Der erste ist „dns2.sub.exmample.com. 3.3.3.3“ im Zonendatei-Cache, der andere ist „dns2.sub.exmample.com. 2.2.2.2“ im DNS-Cache, den er von ServerB erhalten hat. Welchen bekomme ich als normaler DNS-Client? Haben DNS-Ressourceneinträge im „DNS-Cache“ Vorrang vor Einträgen im „Zonendatei-Cache“? Oder zufällig?
2. Was bedeutet der „AUTHORITY SECTION“? Meiner Meinung nach ist 2.2.2.2 nicht die autoritative Antwort. Warum behandelt Dig 2.2.2.2 als „AUTHORITY“?
3. Ein DNS-Client speichert alle Antworten, die er erhält, oder nur die „autoritativen“ Antworten?
4. Wann fragt ein DNS-Resolver die NS-Einträge ab? Warum sind nach Schritt 2 keine NS-Einträge im Cache von ServerA vorhanden?

verwandte Informationen