DNS(Domain Name System)は、ドメイン名やホスト名から IP アドレスの対応関係を管理するシステムのことです。そのシステムを DNS サーバーと呼び、DNS サーバーを用意することで、ホスト名から IP アドレスを解決することができます。
DNS は Windows Server OS で標準で利用可能であるため、「役割と機能の追加」から “DNS” をインストールして DNS サーバーを構築することができます。DNS サーバーは Active Directory ドメイン サービスの機能でも利用されるため、「Active Directory ドメイン サービス」をインストールする時に、同時に DNS の役割をインストールすることが一般的です。
今回は、Windows Server OS で構築できる DNS サーバーの基本設定と動作について紹介します。
DNS サーバーの構築
IP ネットワークにおいて、各端末の識別は IP アドレスを割り当てられています。IP ネットワークで端末間で通信を行うには、通信先の IP アドレスを指定する必要があります。
しかしながら、IP アドレスは数値の列(192.168.4.51 等)であるため、ユーザーが端末ごとに IP アドレスを記憶しておくのは難しいです。そのため、一般的には、人間でも覚えやすい「名前」で接続先を指定します。ただし、コンピューターには「名前」は理解できないため、名前に紐づく IP アドレスが確認する必要があります。ホスト名から IP アドレスに変換することを「名前解決」と呼びます。名前解決の仕組みにより、ユーザーはブラウザに www.google.com という名前を指定すると、www.google.com は IP アドレスに変換されて、Google のサイトにアクセスすることができます。
DNS についての基本的な知識については、以下の記事で紹介しています。
DNS(Domain Name System)は、ドメイン名やホスト名から IP アドレスの対応関係を管理するシステムのことです。 IP ネットワークにおいては、コンピューターやネットワークに IP アドレスを割り当てて識別しています。I[…]
DNS サーバーを構築すると、IP アドレスとホスト名の対応関係を管理し、クライアントに名前解決の機能を提供することができます。Windows Server OS では、「役割と機能の追加」よりウィザードに従って DNS サーバーを簡易に構築することができます。
ゾーンの種類
DNS サーバーでは、ゾーンとよばれる単位でレコードを管理しています。Windows Server で構築した DNS サーバーで管理するゾーンの種類について紹介します。
ゾーン管理の観点で分類したゾーン
同じ組織内で複数の DNS サーバーを管理している場合、各 DNS サーバーで管理しているゾーンの情報を他の DNS サーバーへ転送して、DNS サーバーを冗長化させることができます。複数の DNS サーバーにて、ドメインのレコードを管理するために、「プライマリ ゾーン」、「セカンダリ ゾーン」、「スタブ ゾーン」の3つの種類のゾーンが用意されています。
プライマリ ゾーン
プライマリ ゾーンの特徴は以下の通りです。
- ゾーンに対してレコードの登録、削除、変更などの操作を行うことができる
- Active Directory に設定の情報を保存することができる
- クライアントからの名前解決の要求に対して、直接応答を返すことができる
セカンダリ ゾーン
セカンダリ ゾーンの特徴は以下の通りです。
- プライマリ ゾーンから全てのレコードのゾーン転送を受け取ることができる
- ゾーンに対して、レコードの登録、削除、変更などの操作を行うことはできない
- Active Directory に設定の情報を保存することはできない
- クライアントからの名前解決に対して、直接応答を返すことができる
スタブ ゾーン
スタブ ゾーンの特徴は以下の通りです。
- プライマリ ゾーンから SOA レコード、NS レコード、グルーレコード(※)を受け取ることができる
- ゾーンに対して、レコードの登録、削除、変更などの操作を行うことはできない
- Active Directory に設定の情報を保存することができる
- クライアントからの名前解決に対して、直接応答を返すことはせず、権威のある DNS サーバーの情報を応答するか、リクエストの転送を行う
※グルー レコード:権威サーバーが、委任先のネームサーバーの名前を応答する際に追加する情報です。具体的には、ネームサーバーの名前に対応するIPアドレスです。
名前解決のクエリの観点で分類したゾーン
DNS サーバーでは、ホスト名から IP アドレスを解決する、IP アドレスからホスト名を解決する逆引きの名前解決ができます。名前解決の種類によってゾーンの種類が分かれています。
前方参照ゾーン
ホスト名から IP アドレスを名前解決するときに参照されるゾーンです。ホスト名に対応した IP アドレスの情報を管理している A レコードや、CNAME や NS、SRV レコードなどホスト名から関連のあるホスト名を解決するためのレコードも管理されています。
逆引き参照ゾーン
IP アドレスからホスト名を名前解決するときに参照されるゾーンです。IP アドレスに対応したホスト名の情報を管理している PTR レコードが管理されています。逆引き参照ゾーンは “.in-addr.arpa” というドメインを使って構成され、オクテットの順番が IP アドレスとは逆向きになります。例えば 192.168.1.10 の逆引きをするときは “10.1.168.192.in-addr.arpa” という名前を問合せます。
保存場所の観点で分類したゾーン
Windows Server OS で構築した DNS サーバーでは、ゾーンで管理しているデータの保存場所として、ローカルと Active Directory データベースの2か所があります。ゾーン情報をローカルで管理しているゾーンを「標準ゾーン」、Active Directory データベースで管理しているゾーンを「Active Directory 統合ゾーン」と呼びます。
標準ゾーン
DNS サーバーのローカルのディスク上でゾーン情報を保存しているゾーンです。標準ゾーンの情報の保存場所は、%SystemRoot%¥system32¥dns のフォルダの配下です。
Active Directory 統合ゾーン
Active Directory データベース上でゾーン情報を保存しているゾーンです。Active Directory 統合ゾーンのゾーン情報は、Active Directory データベース上に保存されるため、DNS サーバーに Active Directory 統合ゾーンを作成する場合には、ドメイン コントローラーがインストールされている Windows Server OS のサーバーに DNS の役割をインストールする必要があります。
ゾーン情報の保存場所
DNS サーバーで管理しているゾーンの情報は、①レジストリ、②ファイル、③ Active Directory データベースの 3 箇所に格納することができます。ゾーン情報をどこに格納するかは、[DNS] の管理ツールのサーバーのプロパティ設定で確認することができます。
2) [Windows 管理ツール] にて、[DNS] をクリックします。
3) 画面の左ペインにて [DNS] – [<対象のサーバー>] を右クリックして [プロパティ] をクリックします。
4) [詳細設定] タブを選択し、[起動時にゾーン データを読み込む] の項目にて、ゾーンの保存場所を変更します。
[起動時にゾーン データを読み込む] の項目にて、3 つの選択肢を指定できます。選択肢の詳細は以下の通りです。
■ レジストリから
[レジストリから] を選択すると、ゾーンの情報はレジストリに保存されます。
■ ファイル
[ファイルから] を選択すると、ゾーンの情報はファイルとして以下のフォルダ配下に保存されます。
■ Active Directory とレジストリから
[Active Directory とレジストリから] を選択すると、ゾーンの情報はレジストリと Active Directory データベースに保存されます。データの複製範囲によって、保存先となる Active Directory データベースの保存先が異なります。
・CN=MicrosoftDNS,DC=DomainDnsZones, DC=<domain name>
・CN=MicrosoftDNS,DC=ForestDnsZones,DC=<domain name>
DNS ゾーン転送
ゾーン転送とは、ゾーンに格納された情報を他の DNS サーバーに複製することです。ゾーン転送に使用されるゾーンとしては、プライマリ ゾーンとセカンダリ ゾーンがあります。プライマリ ゾーンは、オリジナルのデータを管理しているゾーンで、レコードの登録、削除、変更などの操作を行うことができます。一方、セカンダリ ゾーンでは、プライマリ ゾーンをもつ DNS サーバーからデータを転送してくることはできますが、レコードの登録、削除、変更などの操作を行うことはできません。
DNS のゾーン転送には、以下の2つの転送方法があります。
■完全ゾーン転送
ゾーンのデータを転送する時に、ゾーン内の全てのデータをコピーする方法です。
フルゾーン転送や AXFR とも呼ばれます。
■増分ゾーン転送
ゾーンのデータを転送する時に、ゾーン内の変更分のみのデータを転送する方法です。
インクリメンタルゾーン転送や IXFR とも呼ばれます。
ゾーン転送には、「更新間隔がトリガーとなるゾーン転送」「通知がトリガーとなるゾーン転送」「手動によるゾーン転送」の3通りがあります。
更新間隔がトリガーとなるゾーン転送
DNS サーバーでは、一定の更新間隔でゾーン転送の処理が行われます。ゾーン転送の更新間隔は、SOA レコードに記載されています。
- セカンダリのサーバーは、SOA レコードに記載されている更新間隔に設定された時間まで待機します。
- 更新間隔の時間を経過したら、プライマリのサーバーに SOA レコードを要求します。
- プライマリのサーバーは、SOA レコードを応答します
- セカンダリ サーバーは、自身の SOA レコードのシリアル番号と、プライマリのサーバーから送信されてきた SOA レコードのシリアル番号を比較します。プライマリのサーバーから送信されたきた SOA レコードのシリアル番号の方が大きい場合は、セカンダリのサーバーがもつゾーンの情報は最新ではないことを意味します。
- TCP の 3 way handshake を確立します。
- セカンダリ サーバーは、ゾーンの転送を要求します。
- プライマリのサーバーは、ゾーンの情報を転送します。
- TCP セッションをクローズします。
通知がトリガーとなるゾーン転送
プライマリ ゾーンをもつ DNS サーバーにて、ゾーン内のデータの変更が行われた時に、セカンダリ ゾーンをもつ DNS サーバーに DNS 通知を送信するように設定できます。DNS 通知を受け取ったら、セカンダリ ゾーンはプライマリ ゾーンからゾーン転送の処理を行われます。
- プライマリのサーバーにて、ゾーン内のレコードが更新されます。今回のケースでは、nekomaru.com ゾーンに A レコードが追加されました。ゾーン内の情報が更新されると、SOA レコードのシリアル番号が計上されます。
- プライマリのサーバーは、通知リストに記載されているセカンダリの DNS サーバーに対して DNS 通知メッセージを送信します。
- DNS 通知を受け取ったセカンダリ サーバーは、自身の SOA レコードのシリアル番号と、プライマリのサーバーから送信されてきた SOA レコードのシリアル番号を比較します。
- TCP の 3 way handshake を確立します。
- セカンダリ サーバーは、ゾーンの転送を要求します。
- プライマリのサーバーは、ゾーンの情報を転送します。
- TCP セッションをクローズします。
手動によるゾーン転送
プライマリ ゾーンでの更新をセカンダリ ゾーンに強制的に反映させるために、手動でゾーン転送を行うことができます。手動でゾーン転送を行う場合は、セカンダリ ゾーンがある DNS サーバーにて、DNS の管理ツールを開き、対象のゾーンを右クリックして [マスターから転送]、[マスターからゾーンの新しいコピーを転送] のいずれを選択します。
■マスターから転送
[マスターから転送] をクリックすると、まず、セカンダリ ゾーンで保持している SOA レコードのシリアル番号と、プライマリ ゾーンで保持している SOA レコードのシリアル番号を比較します。プライマリ ゾーンの SOA レコードのシリアル番号の方が大きい場合は、プライマリ ゾーンからゾーン転送が行われます。ゾーン転送は IXFR で処理されます。
■マスターからゾーンの新しいコピーを転送
[マスターからゾーンの新しいコピーを転送] をクリックすると、SOA レコードのシリアル番号には関係なく、ゾーン転送が行われます。ゾーン転送は AXFR で処理されます。
DNS ラウンドロビン
DNS ラウンド ロビンとは、DNS サーバーに同じ名前のレコードが複数登録されている場合、応答の度にレコードの順番を入れ替える動作のことです。
DNS ラウンド ロビンは、[DNS] の管理ツールのサーバーのプロパティ設定の [詳細設定] タブにある、[サーバー オプション] の [ラウンド ロビンを有効にする] にて、有効・無効の設定を変更することができます。
フォワーダー
Windows Server OS で構築した DNS サーバーでは、フォワーダーの機能を利用することができます。
フォワーダー とは、DNS サーバーで管理買いのゾーンの名前解決を要求された場合、自身で再帰解決を行わずに、名前解決の要求を別の DNS サーバーにそのまま転送する機能のことです。フォワーダーの機能は、インターネットへの接続が許可されていないイントラネットないの DNS サーバーにて、インターネット上のホスト名の名前解決を行わせたい場合などに有効な機能です。
フォワーダーは、[DNS] の管理ツールのサーバーのプロパティ画面で設定することができます。
2) [Windows 管理ツール] にて、[DNS] をクリックします。
3) DNS の管理ツールにて、画面の左ペインにて [DNS] – [<対象のサーバー>] を右クリックして [プロパティ] をクリックします。
4) [フォワーダー] タブを選択します。
5) [編集] をクリックして、追加したいフォワーダーを設定します。
フォワーダーには、複数の DNS サーバーのアドレスを設定することができます。
フォワーダーのタイムアウト設定
フォワーダーに設定されている DNS サーバーに、名前解決の応答がなかった場合におけるタイムアウトを設定することができます。
■ 1 台ごとのタイムアウトの設定
タイムアウトまでに DNS サーバーから応答が返ってこない場合、クエリの処理を中断し、フォワーダーに設定されている次の DNS サーバーへクエリを転送します。
1 台ごとのタイムアウト値は、[フォワーダーの編集] 画面にある [クエリ転送のタイムアウト] の項目にて設定できます。
■クエリ全体のタイムアウトの設定
フォワーダーに設定されている DNS サーバーから応答がない場合のクエリ全体のタイムアウト値です。フォワーダーに複数の DNS サーバーされている場合、クエリを順番に転送しますが、クエリ全体のタイムアウト値までに DNS サーバーから応答が返ってこない場合、クエリの処理を中断して「名前解決ができない」と判断されます。
クエリ全体のタイムアウト値に関するレジストリは RecursionTimeout と ForwaderTimeout があります。
型:DWORD
値:RecursionTimeout
ForwardingTimeout
DNS サーバーは、クライアントからのクエリをフォワーダーへ転送するのタイムアウトの時間、DNS サーバーからの応答待機時間(ForwarderTimeout)と、クライアントへの最大応答時間(RecursionTimeout)という 2 つの値を使用します。
- クライアントからのクエリに対し、DNS サーバー自身がレコード情報を保持していない場合は、先頭のフォワーダー先にクエリを転送します。
- ForwarderTimeout 値 (秒) の間待って応答がなければ、2 番目のフォワーダー先にクエリを転送します。
- さらに ForwarderTimeout 値 + 1 (秒) の間待って応答がなければ、3 番目のフォワーダー先にクエリを転送する動作を繰り返します。
- RecursionTimeout 値を経過するとストップし、クライアントへ Server Failure(名前解決失敗)パケットを応答します。
条件付きフォワーダー
Windows Server OS で構築した DNS サーバーでは、ドメインごとに異なるフォワーダーを設定することができます。例えば、google.com や amazon.com などのドメインを指定して、異なる転送先の DNS サーバーを指定することができます。ドメインの条件を指定したフォワーダーの設定を「条件付きフォワーダー」と呼びます。
DNS サーバー自身で管理しているドメインは、条件付きフォワーダーに指定することはできません。
上記の図のように、example.com という条件付きフォワーダーを作成したら、tokyo.example.com や osaka.example.com のように、条件に合致するドメインの名前解決に対して、フォワーダーにクエリを転送することができます。
条件付きフォワーダーの設定は、DNS サーバーごとに保存するか、Active Directory に保存するかを指定することができます。Active Directory に条件付きフォワーダーの設定を保存する場合には、[条件付フォワーダーの編集] の設定にて、[この Active Directory に条件付フォワーダーを保存し、次の方法でレプリケートする] のチェックボックスを有効にして、保存先のパーティションを指定することができます。
条件付きフォワーダーの設定の保存先のレジストリのキーは以下の通りです。
ルートヒント
ルート ヒントは、インターネットで利用される DNS において、ツリー構造の起点となるルート サーバーです。ルートヒントの DNS サーバーには、com、org、jp、arpa などのトップ レベル ドメインの参照情報が書かれています。
Windows Server OS にて、DNS サーバーを構築したら、既定でインターネット上で公開されているルート サーバーのリストのリストが登録されています。
ルートの DNS サーバーの名前と IP アドレスが記載されています。ルートサーバを運用している組織は世界中で12 つあり、VeriSign 社が 2 つのサーバを運用しているため、全部で 13 つのサーバがルート サーバーがあります。
DNS サーバー自体がルート ゾーンを持っていない場合は、ルート ヒントの一覧にあるルート サーバーを削除することは推奨されていません。既定の動作では、管理ツール上からルートサーバーを削除したとしても、再登録されます。
エージングと清掃
Windows Server OS で構築した DNS サーバーでは、一定期間以上、使用されていない古いレコードを自動的に削除する「エージング」と「清掃」の機能が用意されています。
使用されていない古いレコードが DNS サーバーに大量に残留していると、以下のような影響がでる可能性があります。
- DNS データベースの容量が大きくなりすぎる
- ゾーン転送の量が不必要に多くなる
- DNS データベースの容量が大きくなることで、DNS サービスのパフォーマンスが劣化する
- 名前解決にて、古いレコードの情報がクエリの結果として返され、正しい宛先へ通信できない
上記のような問題がおきないように、エージングと清掃を有効にして、古いレコードが自動で削除されるように構成できます。
エージングと清掃の仕組み
レコードのエージングと清掃の機能に関する基本的な仕組みを紹介します。
エージング
動的登録されたレコードが最後に更新された日時のタイムスタンプを記録する機能です。
清掃
各レコードのタイムスタンプを確認して、古いレコードを削除する機能です。
更新
クライアントは DNS サーバーに対して、レコードの更新を行います。クライアントが行う更新には、「REFRESH」と「UPDATE」があります。
〇 REFRESH
レコードの内容の更新を行わず、タイムスタンプのみを更新します。
〇 UPDATE
レコードの内容の変更を含む更新です。IP アドレスの変更などが「UPDATE」に該当します。
動的登録でレコードが登録された後、「非更新期間」「更新期間」「清掃期間」の3つの期間ごとでエージングと清掃の更新の処理が異なります。
非更新期間
非更新期間に REFRESH の要求を受けても、レコードのタイムスタンプは更新しません。
UPDATE の要求を受けたら、通常通りにレコードを更新します。(タイムスタンプも更新されます)
更新期間
更新期間には、REFRESH、UPDATE のどちらの要求も更新します。
清掃期間
DNS のサービス起動後、[清掃期間] で設定されている時間の間隔(既定は 7 日)で清掃の処理が行われます。
清掃期間は、レコードのタイムスタンプ+非更新期間+更新期間の後です。この期間に清掃の処理が実施されると、レコードは削除されます。
エージングと清掃の設定
DNS サーバーにて、エージングと清掃を有効にする設定を紹介します。DNS サーバーにて清掃の機能を有効にし、ゾーンごとにエージングの設定を行います。
清掃の設定
DNS サーバーのプロパティ画面にて、清掃の機能を有効にします。
1) DNS サーバーに管理者権限をもつユーザーでログオンします。
2) [Windows 管理ツール] にて、[DNS] をクリックします。
3) [DNS マネージャー] の画面の左ペインにて、[DNS] – [<サーバー名>] を右クリックして [プロパティ] をクリックします。
4) プロパティ画面の [詳細設定] タブを選択します。
5) [古いレコードの自動清掃を有効にする] のチェックボックスを有効にし、[清掃期間] にて清掃が行われる間隔を指定します。
6) [適用]、[OK] をクリックして、設定します。
エージングの設定
エージングと清掃の処理を行うゾーンにおいて、エージングの設定を行います。
1) DNS サーバーに管理者権限をもつユーザーでログオンします。
2) [Windows 管理ツール] にて、[DNS] をクリックします。
3) [DNS マネージャー] の画面の左ペインにて、対象のゾーンを右クリックして [プロパティ] をクリックします。
4) プロパティ画面の [全般] タブにて、[エージング] をクリックします。
5) [古いリソース レコードの清掃を行う] のチェックボックスを有効にします。
6) [非更新期間] と [更新間隔] の各項目にて、各期間を設定します。