DNS の「プロパゲーション期間」の説明がアバウト過ぎる件について

DNS にはキャッシュの仕組みが組み込まれているので、レコードを変更してもキャッシュには古い情報が残っていてそちらが参照されてしまう場合があります。この新旧の情報が混在してしまう期間を「プロパゲーション期間」と呼ぶことを最近知りました。 ただし、この「プロパゲーション」という言葉を使って説明している文章を見かけたら眉に唾をつけた方が良いようです。 言葉がわからなかったので Web 検索してみたのですが、こちらのブログ記事に共感してしまいました。「通常プロパゲーション期間は1~2週間です」とはどういうことかと。

Web サーバの移転 (IP アドレスの異なる旧サーバから新サーバに切り替えること) を考えて見ましょう。

サーバ移転により変更が必要となってくる DNS レコードは A レコード、PTR レコードです。 実際のところ、新アドレスの PTR レコードと旧アドレスの PTR レコードは同時期に並存可能で、あらかじめ新アドレスのレコードを登録し、しばらく経ってから旧アドレスのレコードを削除すれば良いだけです。なのでプロパゲーションが問題になるのは A レコードの書き換えということになります。

A レコードの変更手順を確認しましょう。

  1. あらかじめ変更する A レコードの TTL を短く (ここでは 600 秒=10分とする) しておく。 この作業をいつまでに行う必要があるかは既 TTL の値による。例えば変更前の TTL が 86,400 秒ならば少なくとも 2. のアドレス変更の1日前までにこの作業をしなければならない。
  2. サーバを切り替えるために A レコードの IP アドレスを変更する。
  3. 新サーバの安定稼動を確認して TTL を元の値 (86,400 等) に戻す。切り戻しを考えなければ、これを 2. のアドレス変更と同時に行っても良い。

以上の手順で行えば理論的にはアドレス変更から 10分以内に新しい A レコードの値が参照されるようになるはずです。 ただし、厳密には 1. 2. はセカンダリサーバへの反映も考慮する必要があります。通知 (NOTIFY) 機能を使用していれば問題ないですが、そうでなければリフレッシュのタイミングを計算する必要があります。 

実際のところ世の中には TTL を無視するキャッシュが存在するようです。私は実地経験が少ないのでこの辺りは何とも言えないところですが、ブラウザやプロキシサーバ等の実装も関係していそうな気がします。少なくとも私の周囲の DNS キャッシュサーバはまともな動作をしているように見えます。

いずれにせよこのような手順を採れば、プロパゲーション期間が「1~2週間」とはならないはずです。 まあ、業者の立場としては面倒な事前作業やお客さんへの説明をすっ飛ばして、「プロパゲーション期間中なので1~2週間は我慢してください」と言って片付けてしまうのが楽でしょうけれど。バズワードの一種かも。

関連してオライリーの「DNS & BIND クックブック」という本を紹介しておきます。 やりたいことからその実現方法を引けるので超有名なバッタ本 (「DNS & BIND 第4版」) よりも実務的です。 本書の「レシピ 2.16 ホストを移動する」に先の手順が書いてあります。 入門用には勧めませんが、一通り DNS の知識はあるし「DNS & BIND」の旧版も持っているけれど、最新版を買うほど熱心ではない、という人にはちょうど良いと思います。

それは私なのですが…


関連記事
「DNS のキャッシュについてもう少し」