要点

  • RFC 8767 は、権威データを更新できない場合に、再帰リゾルバーが条件を満たす期限切れデータを利用することを認める。TTL がゼロのデータは対象にならない。
  • 継続性の代価として、ゾーン運用者が示した TTL の境界を越える判断が、障害中だけ再帰リゾルバーのタイマー、失敗判定、保持方針に移る。
  • EDE の Stale Answer はその判断を観測可能にするが、古いデータを認証せず、利用を正当化する承認にもならない。

分析

あるサービスが IP アドレスを変更し、古い A レコードの TTL が切れたとする。多くのリゾルバーは新しい値を取得する。しかし、ちょうどそのとき権威サーバー群に到達できなかったリゾルバーは、現在の状態を確認できない。古い宛先がまだ動いていれば、期限切れ回答は利用者から障害を取り除く。すでに廃止・再割り当て・隔離された宛先なら、同じ回答がゾーン運用者の意図に反して通信を戻してしまう。

TTL は本来、この不確実性に時間の境界を与える。RFC 1035 は、情報源を再び参照してキャッシュを破棄するまでレコードを保持できる期間として TTL を説明した。RFC 2181 は、それが最長期間であって、リゾルバーに最後まで保持する義務を課すものではないと明確にした。通常はゾーン側が TTL を公開し、再帰側は満了後の再利用を止める。

RFC 8767 は、更新不能という例外に限って境界を変更する。TTL 満了後、権威サーバーからデータを更新できなければ、再帰リゾルバーは期限切れレコードを未期限切れのように利用できる。ただし、最初から古いデータを返し、後で都合のよいときに更新すればよいという規則ではない。直近に誠実な更新試行が失敗していることが前提であり、stale 応答を返した後も、問い合わせ全体の制限時間までは現在データの取得を続ける。

TTL ゼロは例外の外に残る。そのレコードは進行中のトランザクションにしか使えず、将来の stale 回答用に保持できない。期限切れデータを返す場合、応答中の TTL はゼロより大きくしなければならず、RFC 8767 は 30 秒を推奨する。これは TTL ゼロを扱えない実装を避けるだけでなく、下流キャッシュが即座に再問い合わせを繰り返すのを抑える。

四つのタイマーは異なる権限を表す。クライアント応答タイマーは、利用者をどこまで待たせてから stale 回答へ切り替えるかを決め、例示値は約 1.8 秒である。問い合わせ解決タイマーは、現在の回答を得るために使う総作業時間を制限する。失敗再確認タイマーは、応答しない権威へ再度問い合わせる頻度を抑える。最大 stale タイマーは、満了後のレコードを候補として残せる期間を決め、文書は 1~3 日を提案例として示す。

これらの値は相互運用のために統一されていない。RFC 8767 は serve-stale を再帰リゾルバーのローカル処理と位置づける。そのため、同じ名前と同じ障害に対し、標準に適合する二つのリゾルバーが別の結果を返し得る。一方は古い回答で継続し、もう一方は失敗する。その差は実装差であると同時に、停止と陳腐化のどちらを引き受けるかという方針差である。

例外を終わらせるのは権威応答の意味である。AA ビットを持つ権威 NoError または NXDomain はデータを更新し、それ以前の状態を置き換える。その他の応答コードは通常、その名前に現在何が存在するかを主張しないため、更新失敗として扱われ、既存キャッシュを残す。SERVFAIL は古いアドレスが正しいという証拠ではない。現在の有用な回答を取得できなかったという事実にすぎない。

RFC 9520 の解決失敗キャッシュとは分けて考える必要がある。RFC 9520 は、同じ問い合わせが失敗中の上流作業を繰り返さないよう、解決失敗を少なくとも 1 秒、長くても 5 分キャッシュすることを求める。ここで保持するのは「解決できなかった」という状態である。Serve-stale が使うのは、以前取得した回答データである。前者は再試行の集中を抑え、後者は利用者に何を返すかを変える。

RFC 8914 は判断を識別する診断語彙を用意する。Extended DNS Error のコード 3 は Stale Answer、コード 19 は Stale NXDOMAIN Answer を示す。しかし EDE は、DNS トランザクション自体が保護されていない限り認証されない。さらに、診断情報は DNS プロトコル処理を変更してはならない。EDE はリゾルバーが選んだ経路を説明できるが、古い値が安全であることも、クライアントが同意したことも証明しない。

負担はレコードごとに異なる。古い A や AAAA は変わっていないサービスを支える一方、撤去済みのシステムへ利用者を戻すことがある。古い CNAME は解消した依存関係を復活させ得る。RFC 8767 は、署名が有効期間外になって DNSSEC 検証に失敗する可能性、古い NSEC/NSEC3 が新しい TLSA や DS の利用を遅らせる可能性、権威到達性を妨害できる攻撃者が旧データの寿命を延ばし得ることも挙げる。

ここまでが標準から確認できる範囲である。特定のリゾルバー事業者がどの値を採用し、どれだけ障害を回避し、どの被害を生んだかは、この事実パケットでは証明できない。確認できるのは制御連鎖だ。ゾーン運用者はデータと TTL を公開し、再帰リゾルバー運用者は失敗を分類してタイマーを設定し、クライアントが結果を受け取る。

出典