Web教材一覧ネットワーク

DNSとネームサーバ

学習のポイント

Webページ閲覧や電子メールを利用するとき,人間はドメイン名(ホスト名)を用いますが,インターネットの内部では,相手のホストを特定するのにIPアドレスを用います。それで,両者の変換をする必要があります。その仕組みをDNS(Domain Name System)といいます。なお,DNSはTCP/IPのアプリケーションのプロトコルで,TCPおよびUDPのポート番号53で指定されます。
 ここでは,DNSの仕組みを学習します。ドメイン名の詳細に関しては,別章「インターネットの基礎(nw-inet-kiso)」を参照してください。

キーワード

DNS,リゾルバ,ネームサーバ,BIND,サブドメイン分割,バーチャルドメイン,ダイナミックDNS


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を入力して実行すると,このリゾルバが身近なネームサーバ(以下,自社ネームサーバといいます)に名前解決を依頼します。

ネームサーバ(DNSサーバ)

ドメインが体系的に付与されていることは,先に説明しました。その体系に対応して各ドメイン(厳密にはドメインではなくゾーンという単位)にネームサーバが設置されています。最も上位にあるネームサーバはルートネームサーバと呼ばれます。上位のネームサーバには下位のドメイン名とそのネームサーバの対応表と自分のドメインに属するホストのホスト名とIPアドレスの対応表を持っています。
 リゾルバからの問合せを受けた自社ネームサーバは,そのホスト名が自分のドメインに属するホストにあるならば,そのIPアドレスを戻します。
 そこにない場合は,自社ネームサーバは,次の順序で探します。探すホスト名を www.kogures.co.jp とします。

  1. ルートネームサーバに .jp のネームサーバのIPアドレスを聞く。
  2. .jp のネームサーバに,.co.jp のネームサーバのIPアドレスを聞く。
  3. .co.jp のネームサーバに,.kogures.co.jp のネームサーバのIPアドレスを聞く。
  4. .kogures.co.jp のネームサーバに,www.kogures.co.jp のネームサーバのIPアドレスを聞く。
  5. www.kogures.co.jp のネームサーバのIPアドレスをリゾルバに返す。

キャッシュ

このようにして名前解決ができますが,毎回このようなプロセスを行うのは非効率です。それで,リゾルバやネームサーバは,最近問い合わせたホスト名とIPアドレスの対応表を一定期間保持しておき,それが再度問い合わされたときは,直接に戻すようにしています。その保存期間をTTL(Time To Live:生存期間)といいます。TTLを長くすると問合せの効率があがりますが,その間にホストに変更があっても古いIPアドレスを戻すことになります。

DNSレコードとBIND

ネームサーバは対応表以外に多様な情報をレコードとして持っています。その主なものを掲げます。また,ネームサーバの代表的な管理ソフトに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     :
SOA(Start Of Authority)レコード
ドメインのネームサーバ名(12)やその管理者のメールアドレス(14),セカンダリネームサーバへのへのリフレッシュ情報(14~18)など,ドメイン情報を記述するための基本項目を設定しています。
NS(Name Server)レコード
ネームサーバは重要ですので,プライマリネームサーバとセカンダリネームサーバを置くのが通常です。19と20でそれらのホスト名を設定しています。
MX(Mail eXchanger)レコード
メールサーバのホスト名(19,20)を設定しています。MXの後の10や20はメールサーバの優先順位で,数字の小さいほうが優先されます。
A(Address)レコード
ホスト名とIPアドレスの対応表です。これにより,名前解決(正引き)ができます。
CNAME(Canonical NAME)レコード
一つのホスト(同一IPアドレス)に複数のホスト名(別名,エイリアス)をつけることができます。これまでホスト名がIPアドレスと1対1の関係があるような記述をしてきましたが,別名をつけることができるので,厳密な記述とはいえません。

DNSの拡張機能

DSNラウンドロビン

頻繁にアクセスされる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アドレスを共有することになります。これをバーチャルドメインといいます。

ダイナミックDNS

自宅のパソコンでWebサーバを立ち上げる場合を考えましょう。ISPから固定したIPアドレスを得ていれば問題はありませんが,ダイアルアップ接続などの場合は,ISPに接続するたびにIPアドレスが変りますので,外部からそのサーバにアクセスできません。それで,接続のたびにDNSレコードの内容を動的に変更することが必要になります。そのような仕組みをダイナミックDNSといいます。


理解度チェック

本章では割愛します。


本シリーズの目次へ