要約
- NXDOMAINは名前そのものの不在、NODATAは存在し得る名前に要求型がないことを示す。前者は名前とクラス、後者は名前・型・クラスで記憶する。
- RFC 2308は権威ある否定にゾーンのSOAを付ける。SOAのTTLと
MINIMUMの小さい方が負のTTLとなり、キャッシュで経過した分だけ減り、ゼロで再利用を終える。 - SOAを欠く否定はキャッシュすべきでない。転送ループの各サーバーが短い期限を新しく与えれば、エラー全体は永久に循環できるからだ。
- DNSSECはNSEC/NSEC3による認証済み否定と範囲からの合成を可能にした。署名が保証するのはDNS上の出所と完全性であり、制度的な正しさや永遠の不在ではない。
失敗した質問ほど繰り返される
正しい応答には保存できるリソースレコードがある。存在しないサービス、入力ミス、検索サフィックスによる候補、未配備の探索名には、それがない。記憶できなければ、同じ失敗が階層を何度も上る。
ただしタイムアウトを不在として保存してはならない。SERVFAILは処理不能であり、名前の不存在ではない。空のAnswerは委任を示す場合もある。再利用できる否定には、その名前空間について話せる権威、何を否定したかという範囲、いつまで信頼できるかという期限が必要になる。
1987年のRFC 1034は負応答のキャッシュを任意機能として記述した。権威あるName ErrorにTTLを付け、繰り返しを抑えられる。所有者が更新速度とキャッシュ効率の均衡を時間で表すという、DNS全体の設計に沿うものだった。
しかし、保存した否定を別のリゾルバーへ同じ有用性で渡す仕組みは不十分だった。ローカルな記憶はできても、その記憶が移動するときに同じ年齢を保てなかった。
「名前がない」と「型がない」
NXDOMAINはName Errorの応答コードで、有効な問い合わせ名が存在しないと述べる。CNAMEの連鎖がある場合、否定対象は最初の別名ではなく最後の正規名になり得る。キャッシュキーは名前とクラスである。存在しない名前に別の型を尋ねても結果は変わらない。
NODATAは専用のRCODEではない。NOERRORのまま要求型の答えがなく、AuthorityのSOAなどから委任ではないと判断する。名前は存在し、MXやTXTを持ちながらAだけを持たないことがある。
したがってNODATAは名前、型、クラスで記憶する。Aがないという情報をNXDOMAINとして扱えば、実在するMXまで消してしまう。負キャッシュの精度は、否定の範囲を縮めたまま保存できるかにかかっている。
SOAが「いいえ」の時計になる
1998年3月に公表されたRFC 2308は、当時CSIROに所属していたMark Andrewsが執筆した。これにより、オーストラリアの公的研究機関が、このDNS運用規則の文書上の系譜に明確に位置づけられる。IETFは、この契約と後のDNSSEC改訂を共有仕様にした標準化の場を提供した。両機関の役割は異なる。CSIROをここで関連づける根拠は、決定的な仕様に記された著者所属であり、IETFのプロセスはその文書をインターネット共通の契約へ変えた。
権威サーバーがNXDOMAINまたはNODATAを返すとき、対象を含むゾーンのSOAをAuthorityに含める。SOAは、どのゾーンが不在を述べたかと、その否定を保持できる時間を伝える。負のTTLはSOA自身のTTLとSOA MINIMUMの小さい方である。
キャッシュはSOAと否定を一緒に保存する。別のクライアントへ返すとき、保存中に経過した時間をTTLから引く。ゼロになった否定は使わず、改めて問い合わせる。これは永久の判決ではなく、「この範囲について、このゾーンは最近こう答えた」という期限付きの証言である。
MINIMUMは実装の歴史で複数の意味を負っていた。RFC 1035の全般的な下限、ゾーンファイルで省略したTTLの既定値、負応答の寿命である。RFC 2308は一般下限を廃し、既定値には$TTLを導入し、負のTTLへの入力という意味を残した。
各ノードの短命が全体の不死をつくる
DNSの名前空間は木でも、問い合わせグラフはループを作れる。二つのサーバーが互いをフォワーダーに設定すればよい。不完全な委任でも同種の循環が起きる。
SOAのない否定を各サーバーがローカルに十分快短く保存しても、次のサーバーが受け取るたびに新しい寿命を与えれば、否定は若返り続ける。短いTTLを守るノードだけで、終わらないエラーが成立する。
RFC 2308がSOAのない負応答をキャッシュしないよう求める理由である。SOAとともに減るTTLなら、管理境界を越えても既に消費した時間を取り戻さない。伝送で保存されない制限は、分散システム全体の制限にならない。
動いていた実装から共通規則へ
RFC 2308の歴史付録は、1987年末のCHIVESを紹介する。検索パスが多くの失敗問い合わせを作り、ARPANETの輻輳期にはそれを避ける価値が大きかった。CHIVESを使う少数の機械で応答時間が改善したという記述であり、全インターネットの測定ではない。
1993年のBIND 4.9.2 ALPHAでは、10分間の負TTL、NXDOMAINとNOERROR_NODATAの区別、後にはSOAの保持が試みられた。標準は突然一人が発明した完成品ではない。クエリーキー、持ち運べる証拠、減算される期限という運用上の学習を共通化した。
不在を速く答えると、出現が遅くなる
負キャッシュはパケットと権威サーバーの負荷を減らし、失敗をすぐ返す。しかし運用者が新しい名前を追加したり、以前なかった型を足したりしても、旧い否定を持つリゾルバーは期限まで「ない」と答える。
否定を受け取った時刻はキャッシュごとに異なり、独自の最大TTLを設ける実装もある。回復は一斉の瞬間ではなく、異なる年齢を持つキャッシュの分布で進む。RFC 2308は一〜三時間を実用的な既定値とし、一日を超える値を問題視している。
下流の動作も結果を変える。偽のNXDOMAINならメールが即座に返送され得る一方、誤ったアドレスならキューに残り、修復を待てる場合がある。一時障害を不存在に変換することは、復旧可能な事故を不可逆な業務判断へ変える。
一つの署名済み否定が範囲を覆う
DNSSECのNSECは、存在する名前を正規順序で結び、所有者にある型を示す。RFC 4035の検証規則と組み合わせれば、ある区間に名前がないことや、実在名に型がないことを認証できる。
NSECはゾーン列挙を容易にする。RFC 5155のNSEC3は所有者名をハッシュ化し、Opt-Outを導入した。Opt-Out区間は、その中の未署名委任すべてについて存在・不存在を証明しない。この証拠の穴を確定的な否定へ拡張してはならない。
RFC 8020は、NXDOMAINのノードより下のサブツリーも存在しないという解釈をキャッシュに適用した。NODATAはカットではない。型を一つ欠く名前にも別型や子孫があり得る。
RFC 8198は、検証済みNSEC/NSEC3が十分なら、範囲内の別問い合わせへ負応答を合成するよう検証リゾルバーに認めた。権威問い合わせ、遅延、情報漏えいは減る。同時に、範囲内へ追加した名前は負証拠のTTLまで利用できない。
署名が示すのはDNSの信頼鎖における出所と完全性である。正しい鍵で署名された破壊的変更は検証に成功する。だが、それは組織が消えたこと、名前への権利がないこと、否定が制度的に正しいことを証明しない。
出典と証拠の限界
- https://www.rfc-editor.org/rfc/rfc1034.html
- https://www.rfc-editor.org/rfc/rfc1035.html
- https://www.rfc-editor.org/rfc/rfc2181.html
- https://www.rfc-editor.org/rfc/rfc2308.html
- https://www.rfc-editor.org/rfc/rfc4034.html
- https://www.rfc-editor.org/rfc/rfc4035.html
- https://www.rfc-editor.org/rfc/rfc5155.html
- https://www.rfc-editor.org/rfc/rfc8020.html
- https://www.rfc-editor.org/rfc/rfc8198.html
これらは設計、要件、限定された実装史を示す資料であり、普及率の完全な調査ではない。DNSSEC否定、NXDOMAINカット、積極的な合成を1987年や1998年の実装へ遡って帰属させない。
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
