DNS委任とは、親ゾーンに公開されたNSレコードを通じて、サブドメインの権限を別の権威ネームサーバー群に委譲する階層的なメカニズムであり、組織やチーム間で管理責任を分散させることで、DNSネームスペースのスケーラビリティを実現します。 このプロセスには、対象のネームサーバー上に子ゾーンを作成し、親ゾーンに対応するNSレコードを追加し、ネームサーバーのホスト名が委任されたサブドメイン内に存在する場合は、必要に応じてグルーレコードを公開することが含まれます。 管理が不十分な委任は、不適切な委任、NSレコードセットの不一致、グルーレコードの欠落、DNSSECチェーンの破損など、DNS障害の一般的な原因となります。そのため、断続的なサービス停止やセキュリティリスクを防ぐためには、定期的な監査と整合性の監視が不可欠です。
DNS デリゲーションの仕組み
委任は、親ゾーンにポインタを配置することで機能します。このポインタは、リゾルバーに対して子ゾーンの権威サーバーがどこにあるかを示します。その後、子ゾーンは、委任ポイントより下位にあるすべての名前に対して応答を行います。
- 子ゾーンの作成:委任を受けた側は、自身の権威ネームサーバー上に sales.example.com などのサブドメイン用のゾーンを設定し、そのゾーンのレコードを読み込みます。
- 親ゾーンにNSレコードを追加する:親ゾーンの管理者は、委任ポイントに、子ゾーンの権威サーバーを指定するNSレコードを追加します。
- 必要に応じてグルーレコードを追加してください:ネームサーバーのホスト名が委任されたサブドメイン内にある場合、親ドメインもそのホスト名に対するアドレスレコード(グルーレコードと呼ばれる)を公開します。これにより、リゾルバーは循環ルックアップを行うことなくそのホスト名に到達できるようになります。
- リゾルバーはリファラルに従います:リゾルバーがサブドメイン内の名前について親サーバーにクエリを送信すると、親サーバーは回答の代わりに、NSレコードを含むリファラルを返します。
- 子サーバーの応答:リゾルバーは指定されたサーバーのいずれかにクエリを送信し、そのサーバーがサブドメインに対して権威ある応答を返します。
親ゾーンには、NSレコードとグルーレコード以外の子ゾーンのデータは保持されないため、子ゾーンはレコードを自由に変更できます。子ゾーンのNSレコードは親ゾーンのものと一致している必要があり、そうでないと解決結果に一貫性が失われる可能性があります。DNSSECが使用されている場合、親ゾーンはDSレコードも公開し、信頼の連鎖を子ゾーンに結びつけます。
DNS 委任に関する一般的な問題
親ゾーンには、子ゾーンに対して権威ある応答を行わないサーバーのNSレコードが記載されています。これは、プロバイダーの移行後やサーバーの運用終了後に多く見られます。リゾルバーは一部のクエリでSERVFAILやタイムアウトを返しますが、どの記載されたサーバーが選択されるかによって結果が異なるため、障害は断続的に発生しているように見えます。
親ゾーンのNSレコードが子ゾーン内のNSレコードと異なるのは、通常、一方だけが更新され、もう一方が更新されなかったためです。リゾルバによってキャッシュされるセットが異なるため、動作はさまざまであり、変更が反映されるまでに時間がかかります。
委任ゾーン内のネームサーバーが親ゾーンにグルーレコードを持たないか、あるいはグルーレコードに古いIPアドレスが登録されている場合、リゾルバーは子サーバーに到達できず、サーバーの番号変更後にサブドメイン全体の解決に失敗します。
キーのロールオーバーや別のプロバイダーへの移行後など、子ゾーンがもはや使用していないキーについて、親ゾーンには依然として DS レコードが残っている場合があります。検証を行うリゾルバーは、そのサブドメインに対して SERVFAIL を返しますが、検証を行わないリゾルバーは通常通り応答します。