2008年8月2日土曜日

DNS の仕組み

DNS (Domain Name System) の仕組みを説明する.FreeBSD でサーバ構築するために知っておかないとならない知識なので.ちょっと自信がないけどw

DNS とは,DNS サーバ(ネームサーバ)と DNS クライアント(リゾルバ*)で構成される,ホストネームと IP アドレスを結びつけるための仕組みである.DNS は,www.example.com というホストネーム⁑をリゾルバがネームサーバに問い合わせ,192.0.2.1 という IP アドレスを取得するというように動作する.

このように,DNS の目的は非常に単純なのだ.テキストファイルに,ホストネームと対応する IP アドレスを書いておき,リゾルバからの DNS クエリ(問い合わせ)に応じて,そのテキストファイルを参照して IP アドレスを応答するだけでも目的は達成される.実際に,リゾルバはローカルに存在する hosts というテキストファイルを参照し,そこに問い合わせたいホストネームと IP アドレスの対応が書いてあれば,DNS サーバに問い合わずに,IP アドレスを取得する.

しかし,現実はそう単純ではない.ホストネームというのは星の数ほどあり,それに対応する IP アドレスすべてをテキストファイルに保持しておくのは現実的ではない.どこかで,変更があったら,すべての DNS サーバがその情報を同期することになってしまう.

したがって,DNS は分散してホストネームと IP アドレスの対応を保持するような仕組みになっているのだ.だから,DNS は複雑とか難しいとか言われている気もする…….

実際の DNS は,ドメインネームごとに特定の DNS サーバが,ホストネームと IP アドレスの対応を持つようになっている.たとえば,example.com というドメイン(領域)は,example.com のネームサーバが example.com を含むホストネーム(foo.example.com や bar.example.com など.)と IP アドレスの対応を保持するという具合だ.

なので,www.example.com の IP アドレスを知りたい!ってなったら,example.com のネームサーバに問い合わせればいい.しかし,example.com のネームサーバをどうやって知るのだろうか?これについては,次の図のような仕組みになっているのだ.ネームサーバとリゾルバの関係も一緒に理解しよう.



リゾルバは,自分のコンピュータで動いてるプログラムで,左側のネームサーバは,インターネットにつなぐときに設定したやつだ.普通は,プロバイダのネームサーバになっている.“” で表したのは,ルートだ.すべてのネームサーバは,ルートネームサーバを知っているので,まったくわからないホストネームについては,ルートネームサーバ⁂に問い合わせることになる.また,ドメインを遡って問い合わせることを再帰問い合わせという.

DNS の仕組みってこんなかんじ.ほかにも,負荷分散やセキュリティなどのための仕組みが DNS サーバに備わっているがそれについては,参考文献にあげた本を読んでねw

マスターとスレーブなどについては,BIND を使った DNS サーバの設定を説明するときに一緒にする予定♪

* ブラウザやメーラなどは,裏でこのプログラムを利用している.
⁑ 一般に,www.example.com を FQDN (Fully Qualified Domain Name) といい,www をローカルホストネームといい,example.com をドメインネームという.また,www.example.com と www のどちらもホストネームである.
⁂ 世界に13台ある.むしろ,13台しかない.そのうち1台は,日本にある.サーバの CPU は Athlon XP 1900+ だったりする.

参考文献:
Paul Albitz, Cricket Liu. 第4版 DNS & BIND, オライリー・ジャパン, 2002.

0 件のコメント: