図 ツリー構造になっているDNSサーバーと、問い合わせをするリゾルバー
図 ツリー構造になっているDNSサーバーと、問い合わせをするリゾルバー
[画像のクリックで拡大表示]

 インターネットでドメイン名とIPアドレスを結び付ける仕組みを提供するのがDNS(Domain Name System)。いわゆる「名前解決」を実現するものだ。DNSサーバーと、OSなどが備えているリゾルバーと呼ばれるプログラムが通信することで、ドメイン名からIPアドレスを調べる。

 Webブラウザーやメールサーバーがドメイン名を含むURLやメールアドレスを受け取ると、リゾルバーに対して名前解決を依頼する。リゾルバーはDNSサーバーにIPアドレスを問い合わせ、DNSサーバーが回答。リゾルバーはそのIPアドレスを依頼元のソフトウエアに返す。

 ただ、すべてのドメイン名とIPアドレスの組み合わせを知っているDNSサーバーが存在しているわけではない。全世界のDNSサーバーはツリー構造になっており、リゾルバーは上位のDNSサーバーから順番に問い合わせてIPアドレスを調べる。上位とは、ドメイン名の上位のこと。例えば「itpro.nikkeibp.co.jp」というドメイン名の場合、右にあるものほど上位のドメインである。

 具体的には次のようになる(図)。リゾルバーはまず、最上位のドメインを管理する「ルートDNS」と呼ぶDNSサーバーにjpドメインを管理するサーバーを問い合わせる。次に、教えてもらったサーバーに対してco.jpドメインを管理するサーバーを尋ねる。これを繰り返して、最終的にnikkeibp.co.jpを管理するサーバーからitpro.nikkeibp.co.jpのIPアドレスを教えてもらう。これを「反復問い合わせ」という。

 以上が基本動作だが、すべてのリゾルバーが反復問い合わせを行うとネットワークが混み合ってしまう。そこで各リゾルバーは、あるDNSサーバーに反復問い合わせを任せてしまうのが一般的だ。この代理で調べてくれるDNSサーバーを「フルサービスリゾルバー」と呼ぶ。

 フルサービスリゾルバーは、過去に問い合わせがあったドメイン名とIPアドレスの組み合わせを一定時間保存(キャッシュ)している。その時間内に問い合わせがあれば、反復問い合わせを実行せずに保存された情報をリゾルバーに返す。このため、「DNSキャッシュサーバー」とも呼ばれる。

 2005年頃からフルサービスリゾルバーのキャッシュ情報を不正に書き換えて、悪意を持って設置されたサーバーに誘導する攻撃が登場している。「DNSキャッシュ汚染」や「DNSキャッシュポイズニング」と呼ばれるものである。フルサービスリゾルバーに対して、DNSサーバーを装って偽のIPアドレスを返答し、その内容をキャッシュに登録させる。その後、キャッシュを使って悪意のあるサーバーに誘導するという仕組みだ。