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