DNSのエイジングとスカベンジングは、Windows ServerのDNSサーバー機能として連携して、ゾーンデータから古い動的リソースレコードを見つけて時間をかけて除去します。 古いレコードとは、クライアントが自動的に登録したものの、クライアントがいなくなった後もゾーン内に残るレコードのことです。
動的更新では、例えばコンピュータがネットワークに参加した際に、リソースレコードが自動的にゾーンに追加されます。 しかし、これらの記録を消すのは管理者か、経年化や回収プロセスだけです。 クリーンアップがなければ、古い記録が蓄積され、名前の解決に問題が生じます。
Active Directoryに統合されたゾーンにもエイジングやスカベンジングが適用されます。 Active Directory Domain Services(AD DS)はマルチマスターレプリケーションを用いて、レコードの追加、タイムスタンプの更新、削除データをそのレプリケーション範囲内のDNSサーバーに伝播させます。 レプリケーション自体は古い記録を除去しないので、それらを特定・除去するには経年処理やスカベンジングが必要です。
この記事では、経年化やスカベンジングがレコードが古くなっているかどうかを判断するための用語、間隔、レコードライフサイクルについて説明します。 これらの仕組みを理解することで、まだ使われているレコードを削除せずに自信を持って機能を有効化できます。
なぜ古くなったレコードが問題になるのか
動的更新では、ネットワーク上のコンピュータが起動すると自動的にリソースレコードがゾーンに追加されますが、コンピュータが離れると必ずしも削除されるわけではありません。 例えば、コンピュータが起動時にホスト(A)リソースレコードを登録し、その後ネットワークから不適切に切断された場合、ホスト(A)リソースレコードは削除されない場合があります。 モバイルユーザーやコンピュータがいるネットワークでは、このような状況が頻繁に発生します。
管理されない場合、ゾーンデータ内の古いリソースレコードは以下の問題を引き起こす可能性があります。
- 古いリソースレコードを持つDNSサーバーは、古い情報を使ってクライアントの問い合わせに答えることがあり、その結果、クライアントがネットワーク上で名前解決の問題を経験することもあります。
- 多くの古いリソースレコードはサーバーディスクの容量を占有し、長いゾーン転送を引き起こすことがあります。
- 古いリソースレコードの蓄積は、DNSサーバーのパフォーマンスや応答性を低下させる可能性があります。
Warning
デフォルトでは、DNS Serverサービスでは老化やスカベンジングが無効になっています。 すべてのパラメータを完全に理解してから有効にしてください。 誤設定は正当な記録を削除し、ユーザーがDNSレコードを解決できなくなることがあります。
老化とスカベンジングは独立したメカニズムです
老化とスカベンジングは、独立しながらも補完的なメカニズムです。 古い記録の自動クリーンアップを行うには、両方を有効にする必要があります。
加齢が何をもたらすか
エイジングは、受信する動的更新がDNSレコードのタイムスタンプを更新できるかどうかを決定します。 Agingは、タイムスタンプ更新が対象かどうかを判断するためにノーリフレッシュ間隔を使用します。 動的リフレッシュがレコードのタイムスタンプとノーリフレッシュ間隔より早く届く場合、サーバーはそれを破棄します。
DNSサーバーはタイムスタンプで2種類のレコードを区別します。
- 動的レコード(タイムスタンプがゼロではない):動的更新によって追加されたレコード。 タイムスタンプは、最後に許可された更新または更新の日付と時間を表します。
- 静的レコード(タイムスタンプはゼロ):手動またはテキストベースのゾーンファイルから追加されるレコード。 サーバーはこれらのレコードにタイムスタンプをゼロに割り当てるため、後で動的更新を許可しない限りスカベンジングの対象になりません。その時点でサーバーは次の更新時にタイムスタンプを割り当てることができます。
スカベンジングの効果
スカベンジングは古くなったレコードを消します。 タイムスタンプがゼロでないレコードのみを考慮し、動的レコードのみをスカベンジできます。 スカベンジングは任意ですが、有効にすると自動かつ定期的に実行されます。
スカベンジングはリソースレコードを調べ、古くなったと特定したレコードを削除します。 各レコードにエージング処理が割り当てる経過時間に基づいて、古い状態を判定します。
レコードをスカベンジングするための条件
スカベンジングは、以下の4つの条件すべてを満たした場合にのみレコードを除去します。
- スカベンジングはDNSサーバー(サーバーレベルの設定)で有効になっています。
- レコードが存在するDNSゾーンでエイジングが有効化されます。
- リソースレコードは対象となります(タイムスタンプがゼロでない)。
- レコードタイムスタンプとノーリフレッシュ間隔、さらにリフレッシュ間隔が現在のサーバー時間より早いです。
年齢を重ねても記録は消えません。タイムスタンプだけを追跡します。 スカベンジングは、エイジングが無効になっても自動的にスケジュール通りに実行されますが、エイジングが無効になっているゾーンはスキップし、そのゾーン内のレコードには一切対応しません。タイムスタンプが古くしたと示すレコードであってもです。 特定のゾーンで古い記録を自動的に清掃するには、エイジングとスカベンジの両方を有効にする必要があります。
用語と間隔
老化やスカベンジングについて話す際には、以下の用語が適用されます。
| 任期 | 定義 |
|---|---|
| 現在のサーバー時間 | DNSサーバー上の現在の日付と時間。 すべての老化計算の基準点として機能します。 |
| 更新なしの間隔 | サーバーがレコードのタイムスタンプを設定した後、サーバーがタイムスタンプの更新を受け入れない期間です。 この期間は不要なレプリケーショントラフィックを削減します。 サーバーは同じデータリフレッシュを成功と認識しますが、データベースの書き込みは行われず、タイムスタンプも変わりません。 サーバーはレコードデータを変更する更新を書き込みます。 既定値は 7 日です。 |
| 更新間隔 | ノーリフレッシュ間隔の後、サーバーがリフレッシュを受け入れる期間。 この期間が終わる前に記録が更新されなければ、その記録は古臭くなります。 既定値は 7 日です。 |
| レコードの更新 | ホスト名とIPアドレスは変更せず、タイムスタンプだけを修正する動的更新です。 サーバーはノーリフレッシュ間隔中にリフレッシュをブロックします。 |
| 記録更新 | 新しいIPアドレスなど、レコードデータが変化する動的な更新です。 サーバーは更新を受け入れ、更新なしの期間中でもタイムスタンプをリセットします。 |
| 回収期間 | DNSサーバー上の自動スカベンジ操作の間の間隔。 デフォルトは7日間で、最低1時間です。 DNSサービスが再起動するとリセットされます。 |
| スカベンジングの時間だ | ゾーンごとの値で、ゾーンが初めてスカベンジング対象となる時期を示します。 数式については、スカベンジングを開始できるタイミングを参照してください。 |
| リソースレコードのタイムスタンプ | 経過時間処理によって、あるいは管理者が手動で、最も近い時間単位でレコードに付与された日付と時刻の値。 スカベンジングはレコードが古くなったかどうかを判断するために使います。 |
| 回収サーバー | オプションの高度なゾーンパラメータで、どのDNSサーバーのIPアドレスがゾーンをスカベンジできるかを設定します。 デフォルトでは、そのゾーンをホストするすべてのDNSサーバーがスカベンジ可能です。 |
| dnsNode | Active Directoryに統合されたゾーン内のDNS名を表すActive Directoryオブジェクト。
dnsNodeは同じホスト名に対して1つ以上のDNSレコードを含めることができます。 例えば、 dnsNode オブジェクトは server1.contoso.com という名前のホストを表し、A、AAAA、またはその他のレコードタイプを含むことができます。 |
| DNSレコード | DNSレコードデータはA、AAAA、CNAME、MX、PTRなどの dnsNode オブジェクト内に格納されます。 Active Directory統合ゾーンは、レコードデータ、タイムスタンプ、経年情報をdnsNodeオブジェクトの属性として保存します。 |
| dnsTombstoned | スカベンジング、管理者、または認可された動的更新後にdnsNodeが論理的に削除されたとマークするActive Directory属性は、その最後のレコードを削除します。 DNSサーバーサービスが属性を設定し、AD DSは墓碑化されたオブジェクトを複製してから永久に削除します。 |
| Active Directory レプリケーション スコープ | どのDNSサーバーがAD DSレプリケーションを通じてActive Directory統合ゾーンを受け取るかを定義する設定です。 ゾーンはドメインまたはフォレスト内のドメインコントローラー上で動作するすべてのDNSサーバー、またはWindows 2000互換性のためにドメイン内のすべてのドメインコントローラーに複製できます。 |
| ディレクトリのポーリング間隔 | DNSサーバーサービスがActive Directoryに他のドメインコントローラーの変更をポーリングする間隔です。 ポーリングにより、DNS サーバーは Active Directory を通じてレプリケートされた更新を検出して読み込むことができます。 |
古いレコードの計算
以下の条件が成り立つ場合、レコードはスカベンジングによって古い記録となり、削除の対象となります。
タイムスタンプの記録 + ノーリフレッシュ間隔 + 現在のサーバー時間 < 更新間隔
デフォルト設定(7日加7日)では、14日以内に更新されなかった記録は古くなってしまいます。 実際の削除は次のスカベンジングサイクルの実行時間に依存しているため、古いレコードはノーリフレッシュ間隔とリフレッシュ間隔、スカベンジング期間(すべてのデフォルトで最大21日)まで持続することもあります。
老化とスカベンジングの仕組み
このプロセスを理解するために、サーバーやゾーン上でエイジングやスカベンジングが有効化されている単一のリソースレコードの寿命と段階を考慮してください。
レコードのライフサイクル
以下の手順は、老化やスカベンジングが有効化されたDNSサーバーおよびゾーン上で動的に登録されたレコードの全寿命について説明します。
レコードが作成された。
host-a.example.contoso.comのようなホストは、ホスト(A)リソースレコードをDNSサーバーに登録します。 サーバーは、レコードに現在のサーバー時刻を、最も近い時間単位で記録します。この記録は更新なしで生き続けます。 登録直後にノーリフレッシュ間隔が始まります。 この期間中、サーバーはレコードのリフレッシュ試行を抑制し、Active Directoryのレプリケーショントラフィックを減少させます。 サーバーは新しいIPアドレスなどのレコードデータを変更する更新も受け付けており、更新ごとにレコードのタイムスタンプがリセットされます。
リフレッシュウィンドウが開きます。 ノーリフレッシュ間隔が終了すると、リフレッシュ間隔が始まり、サーバーはリフレッシュを受け入れます。 サーバーがリフレッシュを処理するとタイムスタンプをリセットし、ノーリフレッシュ間隔が再び始まります。
記録は陳腐化します。 リフレッシュ期間中にレコードが更新されなければ、レコードは古い状態になります。 記録は次のスカベンジングサイクルが始まるまでそのゾーンに留まります。
レコードは回収されています。 スカベンジング中、サーバーはゾーン内のすべての記録を確認します。 各レコードに対して、サーバーは現在のサーバー時間を以下の合計と比較します。
タイムスタンプの記録 + ノーリフレッシュ間隔 + リフレッシュ間隔
- 合計が現在のサーバー時間より大きい場合、サーバーは何のアクションも取らず、レコードはゾーン内で老化し続けます。
- もし合計が現在のサーバー時間より小さい場合、サーバーはサーバーメモリのゾーンデータからレコードを削除します。 ディレクトリ統合ゾーンの場合、サーバーは削除をAD DSに書き込み、DS はそれをゾーンをホストする他のDNSサーバーに複製してレコードのコピーを削除します。
以下の図は、リソースレコードのライフサイクルをノーリフレッシュ間隔、リフレッシュ間隔、ステイル状態、スカベンジングを通じて示しています。
スカベンジングが始まるタイミング
現在のサーバー時刻がそのゾーンのスカベンジング開始時刻を過ぎると、そのゾーンでスカベンジングを開始できます。 サーバーは、以下のいずれかのイベントが発生するたびに各ゾーンのスカベンジング開始時間を設定します。
- ゾーンの動的更新を有効にします。
- スカベンジの古いリソースレコードのチェックボックス状態が変わります。
- DNSサーバーサービスはスカベンジング対応のプライマリゾーンを起動し読み込みます。
- ゾーンは一時停止後にサービスを再開します。
ゾーンでエイジングを有効にすると、そのゾーンは、回収の対象となる前に、1 回のリフレッシュ間隔分の回収保護の対象となります。
サーバーは開始スカベンジング時間を次のように計算します:
現在のサーバー時刻(1時間単位で切り捨て)+ 更新間隔
Active Directory–統合ゾーンにおける挙動
Active Directory統合ゾーンでは、サーバーはゾーンデータをAD DSに保存し、ローカルのテキストベースのゾーンファイルではなくActive Directoryを通じて複製します。 AD DSは、AやAAAAのhost.contoso.comレコードなど、同じ名前のすべてのリソースレコードを、多値dnsRecord属性の値として単一のdnsNodeオブジェクトに保存します。
回収とトゥームストーンニングは別々の作業です:
-
スカベンジングは 古くなった
dnsRecord値を取り除く。 サーバーが古いレコードをスカベンジングすると、対応するdnsRecord値が削除されます。 その名前に関する他の記録が残っていれば、dnsNodeオブジェクトはそのまま残ります。 -
トゥームストーニングとは、
dnsNodeオブジェクトの最後の記録が消えた後のActive Directory削除状態です。 サーバーが最終レコードを削除すると、DNSサーバーサービスはdnsTombstonedをTRUEに設定し、AD DSは論理的削除を複製してゾーンをホストする他のDNSサーバーがノードの読み込みを停止し、通常のディレクトリクリーンアップで後でオブジェクトを削除します。
サーバーは、Active Directory統合ゾーンを従来の非統合セカンダリDNSサーバーにサービスを提供する場合のみ、標準的なゾーン転送(AXFRまたはIXFR)を使用します。 それ以外の場合、ゾーンデータはActive Directoryレプリケーションを通じてのみ伝播します。
なぜ各ゾーンに1つのスカベンジングサーバーを推奨する理由
ゾーンごとに、1 台の DNS サーバーでのみサーバー レベルのスカベンジングを有効にしてください。 ゾーンごとに複数のスカベンジングサーバーを設定しないでください。理由は以下の通りです:
- 回収イベントや監査データが複数のサーバーに分散しています。
- 異なるスカベンジングスケジュールによって、削除の予測や追跡が難しくなります。
- レプリケーションや設定の問題はトラブルシューティングが難しくなります。
ScavengingServersゾーンパラメータを使って、どのDNSサーバーのIPアドレスがゾーンをスカベンジできるかを制限します。 冗長性のために複数のサーバーを設定することはできますが、一般的には不要です。