今回は、DNSサーバのクライアント側であるリゾルバやキャッシュの機能について見ていく。リゾルバは、コンテンツDNSサーバに繰り返し問い合わせて名前解決を図る。
本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。
前回はDNSサーバで提供されているサービスのうち、ゾーン情報を提供する側の機能を見てきた。今回は、DNSサービスを利用する側、つまりDNSのクライアント側の機能について見ていく。
単にDNSサーバと言っても、実は1台のDNSサーバの中に、DNSのゾーン情報を提供する機能(DNSコンテンツサーバ)だけではなく、ゾーン情報を利用する側の機能も含まれていて、その違いは少し分かりづらくなっている。DNSサーバに関しては、次のような用語がよく使われている。
一番上のDNSコンテンツサーバやプライマリ/セカンダリDNSサーバは前回解説した。ドメインのゾーン情報やそこで定義されているレコード情報を外部へ提供するためのサーバ(もしくは機能)のことである。ドメインごとにゾーン情報やレコードを定義して、それを上位のDNSサーバに登録しておくと(登録してもらうと)、ルートからドメイン階層をたどってドメインの情報へアクセスしたり、ドメイン内で定義されているホストなどへアクセスしたりすることができるようになる。外部からのDNS検索要求アクセスに対しては、自分自身で管理しているゾーンの情報なら応答するが、そうでなければ返さない。
3番目以降の項目は、コンテンツサーバで定義されているドメインの情報へアクセスするためのサーバ、もしくはそのための機能を指す。名前からIPアドレスを求めるため、一般的には「名前解決(name resolution)」とか「リゾルバ(resolver)」と呼ばれている。
以下、それぞれ詳しく見ていこう。
DNSフルサービスリゾルバとは、DNSを使った名前解決を、単独で、最後まで完全に行うことのできるリゾルバ機能を備えたDNSサーバのことである。自分自身ではゾーン情報は管理せず、他のコンテンツサーバやリゾルバに問い合わせて、名前解決を図る。
連載第1回で階層的なDNSの名前解決の概要を示した。例えばwww.example.jpという名前からIPアドレスを見つける場合、まずルート情報を持つDNSサーバにアクセスして、jpドメインのネームサーバ情報を取得する。そこにはjpドメインのネームサーバ情報が入っているので、次はそこにアクセスしてexampleドメインのDNSサーバの情報を取得する。そして最後にexampleドメインのDNSサーバにアクセスして、www.example.jpのAレコード情報を取得する。
このように、必要ならDNSのルートサーバからパスをたどってDNSサーバの情報を取得し、再帰的にDNSの問い合わせ処理を繰り返して、最終的に必要な情報を取得できるものをフルサービスリゾルバという。
ただし毎回ルートからDNSサーバをたどるわけではなく、一度取得した情報はキャッシュに保持している(キャッシュしたエントリの寿命は、DNSサーバのレコードで定義されている値などに基づいて決められる)。その中に検索対象のドメインや一度アクセスしたレコードがあれば、高速に内容を取り出せる。
DNSシステムによっては、DNSコンテンツサーバとフルサービスリゾルバ(キャッシュサーバ)の機能を兼用することができるが、セキュリティ的にはこれは勧められない。10年ほど前だが、「DNSキャッシュポイズニング」というDNSサーバの脆弱性が見つかっている。
偽装したDNSの応答パケットをDNSのリゾルバキャッシュに送り込んで「汚染」し、本来アクセスすべきサーバとは別のDNSサーバへ誘導できるようにする、という脆弱性だ。
本来フルサービスリゾルバはセキュリティを強化した組織内に置いておくだけでよいはずなので(イントラネットからのアクセスだけに限定する)、インターネットからの攻撃を受けやすいコンテンツサーバと同居させるのは危険性が高いので避けるべきである。またコンテンツサーバでは、フルサービスリゾルバやキャッシュの機能は無効にしておくこと。
DNSコンテンツサーバとしての機能は持たず、キャッシュ機能のみを持つDNSサーバのことをDNSキャッシュサーバと呼ぶことがある。内容的には、上のDNSフルサービスリゾルバと同じだ。また、中継はするがキャッシュしないものをDNSプロキシサーバと呼ぶこともある。
Windowsの場合は、Server OSにインストールできるオプションの1つである「DNSサーバ」役割の中に、「DNSのフルサービスリゾルバ」と「DNSコンテンツサーバ」の両方の機能が含まれている。「DNSサーバ」役割をインストールするものの、ゾーン情報を1つも定義しなければ、DNSキャッシュサーバとしてのみ機能する(キャッシュサーバ機能はデフォルトでオン)。
DNSスタブリゾルバは、外部のフルサービスリゾルバやフォワーダへDNSの要求を中継するだけのDNSリゾルバのことである。外部の複数のDNSサーバへ再帰的にDNS検索要求を送信することはなく、フルサービスリゾルバへ要求を送信して、その結果を待つだけだ。
一般的にはクライアントOSにはこのスタブリゾルバが含まれているが、検索結果をキャッシュする機能程度は持っているので、同じ検索結果が有効な間は(レコードの寿命が切れていない間は)同じ要求を何度も出すことはない。ただしDNSサーバと違って、他のシステムから利用するためのものではない(PCの内部でのみ使われる機能)。
Windows OSの場合は、クライアントOSとサーバOSの両方に、このスタブリゾルバが含まれており(「DNS Client」サービス)、手動でインストールする必要はない。スタブリゾルバがキャッシュしている内容は、コマンドプロンプトを開いて「ipconfig /displaydns」とすると確認できる。
C:\>ipconfig /displaydns ……クライアントDNSキャッシュの表示
Windows IP 構成
r20swj13mr.microsoft.com ……キャッシュされたエントリ
----------------------------------------
レコード名 . . . . . . . : r20swj13mr.microsoft.com
レコードの種類 . . . . . : 5
Time To Live . . . . . .: 802
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
CNAME レコード . . . . . : ie9comview.vo.msecnd.net
レコード名 . . . . . . . : ie9comview.vo.msecnd.net
レコードの種類 . . . . . : 5
Time To Live . . . . . .: 802
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
CNAME レコード . . . . . : cs9.wpc.v0cdn.net
……(以下省略)……
DNSフォワーダとは、自分自身ではDNSの名前解決を行わず、別のフルサービスリゾルバへDNS要求を中継するDNSサーバを指す。
クライアントからのDNS名前解決要求に応えるという点では、フルサービスリゾルバ(キャッシュサーバ)と機能は似ているが、挙動は少し異なる。ある検索対象の名前が与えられたとき、フルサービスリゾルバは必要なら複数のDNSサーバに順に問い合わせて名前解決を行うが、フォワーダは、どこか特定のDNSサーバへ問い合わせ要求を1回転送・中継するだけである(ただし結果のキャッシュは行う)。
フォワーダは、フルサービスリゾルバよりもネットワークやシステムへの負荷は少なくて済む。なので、例えば社内にはフルサービスリゾルバを設置せず、代わりにフォワーダを1台だけ用意して、DNSの名前解決要求は全てISP側にあるフルサービスリゾルバ(キャッシュサーバ)へフォワードする、といった使い方をする。社内クライアントは全て社内側にあるフォワーダを使うようにする。こうすることにより、ネットワーク回線が名前解決要求で浪費されるのを防ぐとともに、ISPの変更などがあっても、クライアントの設定を変えるなどが必要がなくなる。
Windows OSの場合は、Server OSのDNSサーバにこのDNSフォワーダの機能が用意されている。自分自身で定義している権威情報を検索したり、キャッシュを検索したりして名前解決を図るが、それらが失敗した場合は、ここで指定されているDNSサーバへ問い合わせが行われる。
フォワードしても名前解決できなければ、デフォルトでは、自分自身でルートDNSサーバから再帰的な名前解決を試みる(通常のフルサービスリゾルバ/キャッシュサーバとして動作する)。
上のフォワーダは、無条件にDNS要求をフォワードするだけだが、条件付きフォワーダは、特定のドメイン名に対する要求だけを指定したDNSサーバへフォワードできる。
ドメイン名に応じて接続先DNSサーバを切り替えると、例えば組織の内部にしかない(公開していない)ドメインやリソースに対しても名前解決を図ることができる。外部ネットワークやインターネットから隠蔽(いんぺい)されている、いわゆる「ステルスDNSサーバ」などと連携できる、ということだ。
Copyright© Digital Advantage Corp. All Rights Reserved.