要約

  • 多くの組織ゾーンに三台を勧めた規定は、少なくとも一台を地理的にもトポロジー的にも十分離すことと一体だった。
  • 到達できないアドレスをNSとして返すと、世界中のリゾルバーが試行、待機、再送を負担し、かえってゾーンの信頼性を下げる。
  • NS掲載、権威応答、SOA serial一致、転送完了は別々の証拠であり、最新データの一貫性やサービス全体の可用性を単独では保証しない。

台数が隠す共通障害

BCP 16となったRFC 2182は、複数サーバーの目的を「一台が利用不能または到達不能でも、ゾーン情報を広く提供すること」と置いた。従って、同じ部屋の同じLANに置かれた複数台は、単体故障には強くても、部屋、建物、電源、外部リンクの障害には一つの装置のように振る舞う。

地理的分散とネットワーク上の分散は別の条件である。遠隔地でも同じ上流経路に依存すれば、経路障害で同時に到達不能になる。異なる事業者名があっても、設備や制御系が共通なら独立性は成立しない。

三台という推奨値も、この設計から切り離せない。二台で足りる場合はあるが、一台の長期停止中は余裕がなくなる。通常は三台、より高い信頼性には四台か五台が考えられる。ただし、名前が増えたことは障害領域が増えたことを意味しない。

到達不能を発見する仕事は利用者側へ移る

NS名が返すアドレスは、それを受け取るリゾルバーから到達できなければならない。ファイアウォールの内側、断続的な回線、外部から使えない副アドレスは、掲載されても有効な予備系にならない。

リゾルバーは失敗して初めて到達不能を知る。問い合わせを送り、応答期限まで待ち、単なるパケット損失かもしれないため再試行する。その間にアプリケーションが諦めれば、使えない一つのアドレスがゾーン全体の障害に見える。別のリゾルバーも別の時刻に同じ探索を繰り返す。

原文には「結果がない場合はキャッシュされない」という記述がある。更新待ちの編集上の正誤表4631は、RFC 2308以後の負のキャッシュを踏まえ、実際の挙動と設定によってキャッシュされ得ると修正する。この歴史的補足があっても、到達不能な権威を公開する外部コストは残る。

Referralは他のリゾルバーへ渡り得るため、最初の観測点だけから到達できても不十分だった。RFC 2181のRRset規則上、都合の悪いアドレスだけ隠したり、そこだけ短いTTLを付けたりもできない。内部と外部で到達性が異なるなら、各側に整合したビューと名前を設計する必要がある。

追加した一台が監視対象も一つ増やす

多数のサーバーは応答を大きくし、DNSパケットのサイズ限界に近づける。さらに、設定、転送関係、ソフトウェア、管理者が増え、誤設定や故障が見逃される可能性も高まる。

そこでRFCは、NSに載るサーバーとstealth serverを区別した。外部回線が切れてもローカル利用者へ回答するため、サイト内に非公開の権威コピーを置ける。全台を世界へ広告すれば、共通リンクが落ちた際に外部リゾルバーが同じサイトの全台を無駄に試す。ローカルな有用性と公開すべき可用性は同じではない。

新しさは段階ごとに確認する

SecondaryはSOA serialを見て更新の要否を決める。Primaryは変更のたびにserialを増やす。誤って大き過ぎる値にしたあと、単純に小さく戻すと、大きな値を見たsecondaryは修正版を古いものとして無視し得る。

RFC 2182の修正手順は、RFC 1982で有効な増分を複数段階で進める。各段階で関係する全secondaryが新しい値を持ったことを確認してから、次へ進み、最終的に折り返しを越えて目標値へ達する。安全性を作るのは特定の数値ではなく、途中状態を観測する規律である。

NSは名前の広告を証明する。応答は一つのプロセスが答えたことを示す。SOAは一地点で見た版番号を示す。転送完了は転送処理の終了を示す。それだけでは、全レコードの同一性、全プロセスへのロード、物理的独立性、最終アプリケーションの到達性は証明できない。

セキュリティ節も範囲を広げなかった。文書はDNSの既存問題を解決すると主張せず、secondaryの侵害がドメイン内ホストを危険にし得ると警告した。可用性のための分散は、信頼できない権威を増やしてはならない。

RFC 2182が残したのは、一覧表より運用証拠を優先する考え方である。何台あるかだけでなく、何が同時に壊れるか、誰が各アドレスへ到達できるか、どの版が実際に提供されているかを問う。

出典

  1. RFC 2182 — Selection and Operation of Secondary DNS Servers
  2. RFC 2182情報ページ
  3. RFC 1982 — Serial Number Arithmetic
  4. RFC 2181 — Clarifications to the DNS Specification
  5. RFC 2308 — Negative Caching of DNS Queries
  6. RFC 2182正誤表