なぜ「DNSの浸透」は問題視されるのか (6)

   このエントリをはてなブックマークに登録    2011/10/27-1

((5)の続きです)

6. NSレコードが更新されない理由

さて、次は「いつまでたってもNSレコードが更新されない」という状況が発生する例を紹介します。

6.1. 旧DNS権威サーバが稼働し続けている場合

以下の例では、親のNSレコードを新DNS権威サーバに向けただけで、旧DNS権威サーバの設定が残ったままになっています。

このような状況で、ユーザが利用しているDNSキャッシュサーバに旧DNS権威サーバからのNSレコードのキャッシュが残っていて、そのキャッシュを元に新たな情報を取得しに行って、その新たな情報のAdditional情報として旧DNS権威サーバによる旧NSレコードが含まれていると、旧DNS権威サーバを常に参照し続けるDNSキャッシュサーバが誕生してしまいます。 DNSキャッシュサーバが旧NSレコードTTLが切れる前に、旧DNS権威サーバに問い合わせを続けてキャッシュが再度更新され、俗に言う"キャッシュが暖められる"限りは、新DNS権威サーバへの問い合わせを行われません。

この場合、設定としてマズいのは、旧DNS権威サーバのNSレコードが新DNS権威サーバに向いていないことと、自分とは関係がなくなったゾーンの情報を旧DNS権威サーバが提供し続けていることです。 要は、「jpドメインでのDNS引っ越しはJPRSさんにお願いだけすればいいや」と考えて、旧DNS権威サーバでの設定を全く行っていない点が問題です。

なお、このような「旧DNS権威サーバが古い情報を発信し続けることによる障害」が発生するかどうかは、実装依存な部分もあります。 どのような状況でどうやってDNSキャッシュサーバのNSレコードが上書きされるのかが実装依存となる部分があるためです(参考:権威サーバ引っ越し実験)。

6.2. ネガティブキャッシュでおニューなドメインの名前解決ができない

もう一つ「DNSが浸透していない」という発言が多く見られる事例が、新しく登録したドメイン名での名前解決が出来ない場合です。

ありがちなのが、「まだかなまだかな」と思いながらDNS権威サーバの設定や上位ゾーン(たとえば.JP)での委譲の設定がなされる前に、DNSキャッシュサーバを通じて名前解決を行ってしまい、「そんなものはない」というネガティブキャッシュがDNSキャッシュサーバにキャッシュされてしまうことです。 ネガティブキャッシュがDNSキャッシュサーバにキャッシュされてしまうと、TTL分の時間が経過して、それが消えるまでは「その名前解決ができない」状態が続きます。

ネガティブキャッシュのTTLは、名前解決を試みたドメインのSOAレコードの最後の項目が利用されます(もしくはSOA自身のTTL、どちらか短い方。RFC2308 section 3 or 5参照)。 たとえば、新しく自分が管理しているドメイン内に新たなホストを追加する場合には、自分のドメインで設定しているSOAレコードの最後の項目であるネガティブキャッシュTTLが利用されます。 全く新しいドメインを取得した場合は、そのドメインのSOAレコードが存在しないという状況になるので、「そのドメインが存在しない」という結果を返す上位ドメインで設定されたSOAレコードの値がTTLとして利用されます。

このように設定がなされる前にDNSキャッシュサーバにネガティブキャッシュが入ってしまうのは、確認作業にDNSキャッシュサーバを利用してしまっているためです。 このような問題に遭遇しないために、digなどのコマンドを利用して、DNSキャッシュサーバを利用せずに直接DNS権威サーバや委譲元DNS権威サーバである「親」と通信を行って、各設定が反映されていることを確認しましょう(参考:DNS設定の確認方法)。

上記図では、「geekpage.jp.」に関連しておニューなドメインを取得した場合でのネガティブキャッシュを例としているので、そのときに使えるdigコマンドとしては以下のようになものがあります。



「@」を利用してDNS権威サーバに直接問い合わせる方法
dig +norecurse @ns.example.jp. ns geekpage.jp.

+traceを利用して特定のFQDNを調べる方法
dig +trace newhostname.geekpage.jp.

+nssearchを使ってDNS権威サーバのSOAを確認する方法
dig +nssearch geekpage.jp.


6.3. 他にも色々な原因があり得ます

このような状況以外にも、「浸透が終わらない」という状況を作り出しているオペミスは有り得ます。 1週間も2週間も切り替わらない場合は、「浸透が遅い」のではなく、何らかの障害が発生していると考えた方が良さそうです。 途中で直ったとしても、それは「浸透した」のではなく、何らかのバランスによって保たれていた障害から抜けただけの可能性もあります。

最後に

「"DNSの浸透と言うな"というのは言葉狩りだ」という主張もあるとは思いますが、本来いつまでに何が発生しているべきなのかに関する大まかな情報を得られる筈なのに、「浸透」という「マイナスイオン」のような耳障りの良い単語で安心してしまっている技術者が多そうなので、あえて記事化してみました。

ここで紹介した以外にも、変更したDNSレコードに関する古いキャッシュが消えないという問題は発生します。 そのような状況下で、「DNSが浸透しないなぁ」と言いながら神頼みで待つよりも、「何かがおかしい」と不思議に思って何が発生しているのかを調べる方が良いのではないかと思う今日この頃です。

参考

   このエントリをはてなブックマークに登録