MoinQ:

実験5 BIND 9.2.3 より前の BIND をキャッシュに使って問題が発生するケース

実験4とほぼ同様であるが、キャッシュサーバが 9.2.2-P3 (2003年製)であった場合を試す (dig は 9.8.4-P1) -- tss 2013-11-03 09:50:44

以下の実験結果のような「キャッシュの NS + A のTTL がリセットされる現象」が BIND 9.2.3 において解消されたとされている。

最初、委譲は移行元の 172.16.17.1 に向けてある。

root@server3:/etc/namedb # dig www.bind.nom @192.168.255.1 +norec

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom @192.168.255.1 +norec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42362
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; AUTHORITY SECTION:
bind.nom.       600     IN      NS      ns.bind.nom.

;; ADDITIONAL SECTION:
ns.bind.nom.    300     IN      A       172.16.17.1

;; Query time: 0 msec
;; SERVER: 192.168.255.1#53(192.168.255.1)
;; WHEN: Sat Nov  2 14:13:19 2013
;; MSG SIZE  rcvd: 63

ここで再帰検索して結果がキャッシュされる。

root@server3:/etc/namedb # dig www.bind.nom 

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8587
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; ANSWER SECTION:
www.bind.nom.           60      IN      A       172.16.17.1

;; AUTHORITY SECTION:
bind.nom.       180     IN      NS      ns.bind.nom.

;; Query time: 1 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 14:13:25 2013
;; MSG SIZE  rcvd: 63

その後、委譲先を移行先のサーバ(172.16.1.1)へ切り替える。ただし、旧ゾーンサーバ (172.16.17.1) はそのまま運用を続ける。

root@server3:/etc/namedb # dig www.bind.nom @192.168.255.1 +norec

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom @192.168.255.1 +norec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52338
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; AUTHORITY SECTION:
bind.nom.       600     IN      NS      ns.bind.nom.

;; ADDITIONAL SECTION:
ns.bind.nom.    300     IN      A       172.16.1.1

;; Query time: 0 msec
;; SERVER: 192.168.255.1#53(192.168.255.1)
;; WHEN: Sat Nov  2 14:13:49 2013
;; MSG SIZE  rcvd: 63

キャッシュが切れるのを待つ。

root@server3:/etc/namedb # dig www.bind.nom

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17127
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; ANSWER SECTION:
www.bind.nom.           2       IN      A       172.16.17.1

;; AUTHORITY SECTION:
bind.nom.       122     IN      NS      ns.bind.nom.

;; Query time: 0 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 14:14:23 2013
;; MSG SIZE  rcvd: 63

www.bind.nom のキャッシュが切れても NS+A のキャッシュが旧ゾーンサーバ 172.16.17.1 を向いていて、古いゾーンの応答を得る。この際、NS+A の TTL も更新される。(このバージョン BIND 9.2.2-P3 では additional A は見えないが更新されているはずの動作をしている)

root@server3:/etc/namedb # dig www.bind.nom

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14541
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; ANSWER SECTION:
www.bind.nom.           60      IN      A       172.16.17.1

;; AUTHORITY SECTION:
bind.nom.       180     IN      NS      ns.bind.nom.

;; Query time: 1 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 14:14:26 2013
;; MSG SIZE  rcvd: 63

root@server3:/etc/namedb # dig www.bind.nom

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23566
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; ANSWER SECTION:
www.bind.nom.           2       IN      A       172.16.17.1

;; AUTHORITY SECTION:
bind.nom.       122     IN      NS      ns.bind.nom.

;; Query time: 0 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 14:15:24 2013
;; MSG SIZE  rcvd: 63

root@server3:/etc/namedb # dig www.bind.nom

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51772
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; ANSWER SECTION:
www.bind.nom.           60      IN      A       172.16.17.1

;; AUTHORITY SECTION:
bind.nom.       180     IN      NS      ns.bind.nom.

;; Query time: 0 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 14:15:26 2013
;; MSG SIZE  rcvd: 63

検索し続けると永遠に新しいゾーンサーバにはたどり着かず、「浸透しない」という発言につながるだろう。

補足

なお、このバージョンでは、NS+A のキャッシュが残っているうちに旧ゾーンサーバの設定を消すとしばらく SERVFAIL が続くことになる。(最近のバージョンのように上位から探索し直さない)

root@server3:/etc/namedb # dig www.bind.nom

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4770
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; ANSWER SECTION:
www.bind.nom.           1       IN      A       172.16.17.1

;; AUTHORITY SECTION:
bind.nom.       121     IN      NS      ns.bind.nom.

;; Query time: 0 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 18:02:33 2013
;; MSG SIZE  rcvd: 63

root@server3:/etc/namedb # dig www.bind.nom

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 21923
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; Query time: 1 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 18:02:35 2013
;; MSG SIZE  rcvd: 30

root@server3:/etc/namedb # dig www.bind.nom

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 33341
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; Query time: 0 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 18:06:21 2013
;; MSG SIZE  rcvd: 30

root@server3:/etc/namedb # dig www.bind.nom

; <<>> DiG 9.8.4-P1 <<>> www.bind.nom
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39600
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.bind.nom.                  IN      A

;; ANSWER SECTION:
www.bind.nom.           1800    IN      A       172.16.1.1

;; AUTHORITY SECTION:
bind.nom.       1800    IN      NS      ns.bind.nom.

;; Query time: 0 msec
;; SERVER: 172.16.33.1#53(172.16.33.1)
;; WHEN: Sat Nov  2 18:06:39 2013
;; MSG SIZE  rcvd: 63

約4分という時間はどこからくるのか。.nom からの委譲の TTL は 300秒なのだが。NS+A のキャッシュが一度だけ再利用される?

MoinQ: DNS/ゾーン/移転/観察/実験5 (last edited 2021-04-19 09:51:51 by ToshinoriMaeno)