ゾーンファイルキャッシュとDNSキャッシュをバインドする

ゾーンファイルキャッシュとDNSキャッシュをバインドする

私の研究室には、bind9 を実行しているネーム サーバーが 2 つあります。ServerA
には「example.com」のゾーン ファイルがあり、
ServerB には「example.com」のサブゾーンである「sub.example.com」のゾーン ファイルがあります。ServerA
のゾーン ファイルには、サブゾーンに関する 2 つの NS レコードと、次のような 2 つのグルー レコードがあります。

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

ServerB のゾーン ファイルでは、NS レコードは次のようになります。

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

ServerA のゾーン ファイル内の dns2.sub の A レコードが間違っています (これは意図的に行いました)。3.3.3.3 である必要があります。2
つのネーム サーバーを開始した後、ServerA はゾーン ファイルをキャッシュにロードします (このキャッシュに名前を付ける方法がわからないため、ここでは「ゾーン ファイル キャッシュ」と呼びます)。ServerB も同様にロードします。

ステップ 1: 「dig @ServerA +norecurse sub.example.com」を実行します。

; <<>> 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

明らかに、RR はゾーン ファイル キャッシュに従って返されます。

ステップ2: 「dig @ServerA +recurse sub.example.com」を実行します。

; <<>> 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

ServerA のキャッシュをダンプした後、次の結果が得られました。

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

ステップ3: 「dig @ServerA +recurse c1.sub.example.com」を実行します。c1.sub.example.com は、アドレス 4.4.4.4 を持つ sub.example.com 内のホストの 1 つです。

; <<>> 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

本当に困惑する点がいくつかあります。1、3
つの手順をすべて実行した後、ServerA のキャッシュに、sub.example.com ゾーンのネーム サーバー dns2 に関する 2 つのリソース レコードがあります。1 つ目はゾーン ファイル キャッシュの「dns2.sub.exmample.com. 3.3.3.3」で、もう 1 つは ServerB から取得した DNS キャッシュの「dns2.sub.exmample.com. 2.2.2.2」です。通常の DNS クライアントとして、どちらを取得すればよいでしょうか。「DNS キャッシュ」の DNS リソース レコードは「ゾーン ファイル キャッシュ」のレコードよりも優先されますか。それともランダムですか。2
、「AUTHORITY SECTION」とはどういう意味ですか。私の意見では、2.2.2.2 は信頼できる回答ではないのですが、なぜ dig は 2.2.2.2 を「AUTHORITY」として扱うのでしょうか。3
、DNS クライアントは取得したすべての回答をキャッシュしますか、それとも「信頼できる」回答のみをキャッシュしますか。4
、DNS リゾルバーはいつ NS レコードを照会しますか。ステップ 2 の後、ServerA のキャッシュに NS レコードがないのはなぜですか?

関連情報