Webページ閲覧や電子メールを利用するとき,人間はドメイン名(ホスト名)を用いますが,インターネットの内部では,相手のホストを特定するのにIPアドレスを用います。それで,両者の変換をする必要があります。その仕組みをDNS(Domain Name System)といいます。なお,DNSはTCP/IPのアプリケーションのプロトコルで,TCPおよびUDPのポート番号53で指定されます。
ここでは,DNSの仕組みを学習します。ドメイン名の詳細に関しては,別章「インターネットの基礎(nw-inet-kiso)」を参照してください。
DNS,リゾルバ,ネームサーバ,BIND,サブドメイン分割,バーチャルドメイン,ダイナミックDNS
Webページを閲覧するとき,URL(Uniform Resource Locator)を
http://www.kogures.co.jp/index.html
のように入力しますが,このときの
kogures.co.jp をドメイン名
www.kogures.co.jp をホスト名あるいは完全修飾ドメイン名
といいます。
しかし,インターネットでは相手のホストを特定するには 167.129.12.47 のようなIPアドレスを用います。それで,ホスト名とIPアドレスの変換が必要になります。それを名前解決といいます。ホスト名からIPアドレスを得ることを「正引き」,IPアドレスからホスト名を得るのを「逆引き」といいますが,ここでは,正引きを対象にします。
それには各パソコンに対応表を作成しておけばよいと考えられます。昔は実際にhostsファイルというファイルにそれを作成したのですが,インターネットにあるホスト数は膨大ですので不可能です。それで現在ではDNSという仕組みを使っています。
なお,ここでは全体の概要を説明することが目的なので,厳密性は無視します。
WWWブラウザや電子メールソフトなどのインターネットに接続するソフトウェアには,リゾルバというソフトウェアが入っています。URLを入力して実行すると,このリゾルバが身近なネームサーバ(以下,自社ネームサーバといいます)に名前解決を依頼します。
ドメインが体系的に付与されていることは,先に説明しました。その体系に対応して各ドメイン(厳密にはドメインではなくゾーンという単位)にネームサーバが設置されています。最も上位にあるネームサーバはルートネームサーバと呼ばれます。上位のネームサーバには下位のドメイン名とそのネームサーバの対応表と自分のドメインに属するホストのホスト名とIPアドレスの対応表を持っています。
リゾルバからの問合せを受けた自社ネームサーバは,そのホスト名が自分のドメインに属するホストにあるならば,そのIPアドレスを戻します。
そこにない場合は,自社ネームサーバは,次の順序で探します。探すホスト名を www.kogures.co.jp とします。
このようにして名前解決ができますが,毎回このようなプロセスを行うのは非効率です。それで,リゾルバやネームサーバは,最近問い合わせたホスト名とIPアドレスの対応表を一定期間保持しておき,それが再度問い合わされたときは,直接に戻すようにしています。その保存期間をTTL(Time To Live:生存期間)といいます。TTLを長くすると問合せの効率があがりますが,その間にホストに変更があっても古いIPアドレスを戻すことになります。
ネームサーバは対応表以外に多様な情報をレコードとして持っています。その主なものを掲げます。また,ネームサーバの代表的な管理ソフトにBINDがあります。BINDはいくつかのファイルを持っていますが,その中の「正引きゾーンファイル」の記述例は概略次のようになります。
11 $TTL 10800 ; 生存期間(TTL) 12 kogures.co.jp. IN SOA ns.kogures.co.jp. ; ネームサーバ名 13 master.kogures.co.jp. ; 同管理者メールアドレス 14 ( 2468012345 ; シリアル番号 15 10800 ; リフレッシュ間隔 16 3600 ; リトライ間隔 17 604800 ; 期限切れ期間 18 3600 ) ; ネガティブキャッシュ 19 kogures.co.jp. IN NS dns.kogures.co.jp. ; プライマリデータサーバ 20 kogures.co.jp. IN NS dns2.kogures.co.jp. ; セカンダリデータサーバ 21 kogures.co.jp. IN MX 10 mail.kogures.co.jp. ; メールサーバ(順位1) 22 kogures.co.jp. IN MX 20 mail2.kogures.co.jp. ; メールサーバ(順位2) 23 dns.kogures.co.jp. IN A 192.168.0.10 24 dns2.kogures.co.jp. IN A 192.168.0.11 25 mail.kogures.co.jp. IN A 192.168.0.20 26 mail2.kogures.co.jp. IN A 192.168.0.21 27 www.kogures.co.jp. IN A 192.168.0.30 ; Webサーバ 28 abc.kogures.co.jp. IN A 192.168.0.40 ; その他のホスト 29 home.kogures.co.jp. IN CNAME www.kogures.co.jp. ; Webサーバの別名 30 :
頻繁にアクセスされるWebサーバなどでは,同じ内容を複数のサーバに置いておき負荷を分散させることが考えられますが,利用者には同じホスト名(URL)であることが必要になります。それには,一つのホスト名に複数のIPアドレスを割り当てるのが適切です。
ネームサーバに次の設定をしておき,www.yuumei.co.jp が聞かれると,ア→イ→ウ→ア→という順序(このような順序をラウンドロビンという)で,IPアドレスを戻します。
www.yuumei.co.jp. IN A 192.168.0.30 ; ア
www.yuumei.co.jp. IN A 192.168.0.31 ; イ
www.yuumei.co.jp. IN A 192.168.0.32 ; ウ
大規模のドメインを1つのネームサーバで管理するのは面倒ですし,ネームサーバへの負荷が大きくなります。それを回避するために,複数のサブドメインに分割してそれぞれにネームサーバを設置します。
例えば,kaisya.co.jp を,eigyo.kaisya.co.jp と jinji.kaisya.co.jp に分割するとします。
kaisya.co.jp のネームサーバ dns.kaisya.co.jp では次のように設定します。
eigyo.kaisya.co.jp. IN NS dns.eigyo.kaisya.co.jp.
dns.eigyo.kaisya.co.jp. IN A 192.168.1.10
jinji.kaisya.co.jp. IN NS dns.jinji.kaisya.co.jp.
dns.jinji.kaisya.co.jp IN A 192.168.2.10
このとき,dns.jinji.kaisya.co.jp や dns.jinji.kaisya.co.jp のように,サブドメインのホストなのに親ドメインのレコードに記述されるレコードをグルーレコードといいます。
そして,サブドメイン eigyo.kaisya.co.jp のネームサーバ dns.eigyo.kaisya.co.jp では,次のように設定します。
eigyo.kaisya.co.jp. IN NS dns.eigyo.kaisya.co.jp.
dns.eigyo.kaisya.co.jp. IN A 192.168.1.10
www.eigyo.kaisya.co.jp. IN A 192.168.1.30
これにより,www.eigyo.kaisya.co.jp を聞かれたときは,eigyo.kaisya.co.jp だから dns.eigyo.kaisya.co.jp に聞いてくれと「たらいまわし」をします。それを権限委譲といいます。そして,権限委譲を受けた dns.eigyo.kaisya.co.jp は,Aレコードを調べて,www.eigyo.kaisya.co.jp のIPアドレス 192.168.1.30 を返します。
これは,www.kogures.co.jp の名前解決で,ルートネームサーバから順に聞いてくるのと同じです。
サブドメイン分割とは逆に,多くのホスト名があるのに,実際は1台しかないという場合もあります。そのときには,複数のドメインで一つのIPアドレスを共有することになります。これをバーチャルドメインといいます。
自宅のパソコンでWebサーバを立ち上げる場合を考えましょう。ISPから固定したIPアドレスを得ていれば問題はありませんが,ダイアルアップ接続などの場合は,ISPに接続するたびにIPアドレスが変りますので,外部からそのサーバにアクセスできません。それで,接続のたびにDNSレコードの内容を動的に変更することが必要になります。そのような仕組みをダイナミックDNSといいます。
本章では割愛します。