1件のコメント

IPアドレスのキャッシュ

ホスト名、それに対応するIPアドレス。それがどのようにホスト上にキャッシュされるのかについて見てみます。なお、ここではNETBIOS名に関しては言及しません。ホスト名限定の話です。

キャッシュする様子を見てみる

まずは単純にホストに対してpingを実行する、というケースに対し、このときの動きをキャッシュを含めてみてみましょう。

まず、キャッシュを確認してみます。コマンドは「ipconfig /displaydns」です。

C:\Documents and Settings\Administrator>ipconfig /displaydns
 
Windows IP Configuration
 
         1.0.0.127.in-addr.arpa
         ----------------------------------------
         Record Name . . . . . : 1.0.0.127.in-addr.arpa.
         Record Type . . . . . : 12
         Time To Live  . . . . : 488354
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         PTR Record  . . . . . : localhost
 
 
         localhost
         ----------------------------------------
         Record Name . . . . . : localhost
         Record Type . . . . . : 1
         Time To Live  . . . . : 488354
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         A (Host) Record . . . : 127.0.0.1

キャッシュ上にはlocalhostとローカルループバックの逆引きのレコードしか登録されていません。

ここで「ping www.google.com」を実行してみます。

image

さて、この状態でもう一度キャッシュを覗いてみます。

C:\Documents and Settings\Administrator>ipconfig /displaydns
 
Windows IP Configuration
 
         1.0.0.127.in-addr.arpa
         ----------------------------------------
         Record Name . . . . . : 1.0.0.127.in-addr.arpa.
         Record Type . . . . . : 12
         Time To Live  . . . . : 486501
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         PTR Record  . . . . . : localhost
 
 
         www.google.com
         ----------------------------------------
         Record Name . . . . . : www.google.com
         Record Type . . . . . : 5
         Time To Live  . . . . : 67
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         CNAME Record  . . . . : www.l.google.com
 
 
         localhost
         ----------------------------------------
         Record Name . . . . . : localhost
         Record Type . . . . . : 1
         Time To Live  . . . . : 486501
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         A (Host) Record . . . : 127.0.0.1

www.google.comのレコードがキャッシュに追加されていることが確認できます。www.google.comというのはwww.l.google.comのCNAMEレコードであることが確認できますね。

ここで面白いのは「www.google.comはキャッシュに入っているけれどもwww.l.google.comの値はキャッシュに入っていない」ということです。

ためしに「ping www.l.google.com」を実行してみます。

image

その後、再度キャッシュを表示してみます。

C:\Documents and Settings\Administrator>ipconfig /displaydns
 
Windows IP Configuration
 
         1.0.0.127.in-addr.arpa
         ----------------------------------------
         Record Name . . . . . : 1.0.0.127.in-addr.arpa.
         Record Type . . . . . : 12
         Time To Live  . . . . : 484813
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         PTR Record  . . . . . : localhost
 
 
         www.google.com
         ----------------------------------------
         Record Name . . . . . : www.google.com
         Record Type . . . . . : 5
         Time To Live  . . . . : 166
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         CNAME Record  . . . . : www.l.google.com
 
 
         www.l.google.com
         ----------------------------------------
         Record Name . . . . . : www.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         A (Host) Record . . . : 66.249.89.99
 
 
         Record Name . . . . . : www.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         A (Host) Record . . . : 66.249.89.104
 
 
         Record Name . . . . . : www.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         A (Host) Record . . . : 66.249.89.147
 
 
         Record Name . . . . . : a.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Additional
         A (Host) Record . . . : 209.85.139.9
 
 
         Record Name . . . . . : b.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Additional
         A (Host) Record . . . : 74.125.45.9
 
 
         Record Name . . . . . : c.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Additional
         A (Host) Record . . . : 64.233.161.9
 
 
         Record Name . . . . . : d.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Additional
         A (Host) Record . . . : 66.249.93.9
 
 
         Record Name . . . . . : e.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Additional
         A (Host) Record . . . : 209.85.137.9
 
 
         Record Name . . . . . : f.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Additional
         A (Host) Record . . . : 72.14.235.9
 
 
         Record Name . . . . . : g.l.google.com
         Record Type . . . . . : 1
         Time To Live  . . . . : 174
         Data Length . . . . . : 4
         Section . . . . . . . : Additional
         A (Host) Record . . . : 74.125.95.9
 
 
         localhost
         ----------------------------------------
         Record Name . . . . . : localhost
         Record Type . . . . . : 1
         Time To Live  . . . . : 484813
         Data Length . . . . . : 4
         Section . . . . . . . : Answer
         A (Host) Record . . . : 127.0.0.1
 

すると、今度はwww.l.google.comのレコードのキャッシュも確認できましたね。このことから「対象がCNAMEレコードの場合関連するAレコードのキャッシュはローカルには保持しない」ということがわかります。

この記事はWindows XP SP3で動きを確認しながら書いているのですが、Windows 2000でも動きを確認したところWindows 2000の場合には関連するAレコードも一緒にキャッシュされていました。OSによっても動きが異なるようです。また、Windows 2000の場合には以下のような問題もあったようです。

  • DNS クライアント キャッシュの CNAME TTL の問題

キャッシュの保持期間

キャッシュという観点からすると、一番重要なのはTime To Live(TTL)です。これはキャッシュが有効である時間を秒で表しています。一番上の例でいくとwww.google.comのCNAMEレコードの保持期間は確認時点で残り67秒だったわけです。この時間は誰がどのようにコントロールしているのでしょうか?

キャッシュの保持期間をコントロールしているのはDNSサーバーです。DNSサーバーの管理者がレコードのTTLを明示的に指定しています。

ただし、ここには注意点があって、DNSはその構造上DNSサーバーに保持、キャッシュされているレコードもあるし、そこからさらにクライアントにキャッシュされるレコードもあるし、さらにタイミングも様々なので、完全にはコントロールはできないものです。

IPアドレスの変更が予定されているときにすべきこと

色々な理由により、サーバーの移設があり、IPアドレスが変更されることはよくあります。その際にDNS上のレコードも変更になります。そのときに一番重要なのはこのキャッシュの仕組みを理解したうえできちんと準備しておくことです。具体的には作業後にスムーズに切り替えが行われるように事前にTTLを短くしておくことが重要です。

TTLが仮に24時間に設定してあったとすると、実際に世界中のDNSサーバーや、それを利用しているクライアントのキャッシュ含めてすべて切り替わるのには丸2日程度はかかってしまいます。

旧IPアドレスと新IPアドレスの両方で通信が可能にできるシステムならゆっくり切り替えても問題ありませんが、そうでないばあいには「しばらく繋がらないけど、そのうち繋がりますので我慢してください。」というような目も当てられない状態になってしまいますので、気をつけましょう。

キャッシュを強制的に消去するには?

クライアント上のキャッシュは「ipconfig /flushdns」コマンドで強制的に消去できます。OSの再起動をしないといけないと思っている人がいますが、OSの再起動はかなり時間がかかってしまいますので、再起動せずに実行することができることは再起動せずに済ませましょう。

キャッシュの変更はサーバー自体でも、クライアントでも、必要ですのでIPアドレス変更作業を行う際には忘れずに行いましょう。

 

※ちょっとうまくかけなかった・・・。書き直し予定・・・。

子供3人。家族優先。都内SIer勤務。Windows系中心のインフラよりの何でも屋。脱原発。 Microsoft MVP for Cloud and Datacenter Management.

1件のコメント

  1. おまけ知識として、インターネット向けのDNSレコードで、短いTTLを恒常的な設定にすると、
    DNSキャッシュポイズニングを招きやすくなるので注意が必要そうだね。
    でも、よっぽどメジャーなサイトじゃないと、そんなの考慮しなくてもいいか。

コメントを残す

メールアドレスが公開されることはありません。