Web教材一覧ネットワークアプリケーションプロトコル(目次)

DNS

学習のポイント

キーワード

DNS、名前解決、リゾルバ,DNSサーバ、ネームサーバ,権威DNSサーバ、ルートDNSサーバ、DNSコンテンツサーバ、キャッシュ、TTL、DNSキャッシュサーバ、プロキシサーバ、デフォルトDNSサーバ、DNSプロバイダ、パブリックDNSサーバ、BIND,サブドメイン分割,バーチャルドメイン,ダイナミックDNS


DNSの概要(URL入力から接続まで)

DNS(Domain Name System)とは、ドメイン名やホスト名などとIPアドレスとを対応付けるシステムです。ここでは、WebページのURLを入力してからWebサーバのIPアドレスを得るまでのプロセスを例にします。

DNS、名前解決、リゾルバ

ここまでに、「TCP/IP」で相手のIPアドレスがわかれば、安定した通信ができ、ポート番号により利用するアプリケーションプロトコルにアクセスできることを学習しました。
 また、Webページ閲覧では、そのWebページが存在するWebサーバをURLで http://www.example.co.jp/~ のようにドメイン名で指定することを学習しました。
 ここではWebページ閲覧を例にしますが、電子メールなど他のアプリケーションでも同じです。
(注)正確には、状況によりドメイン名、ホスト名、完全修飾ドメイン名を使い分けるべきですが、ここではそれらを総称してドメイン名とします。

実際にWebページを閲覧するには、IPアドレスでWebサーバと接続する以前に、ドメイン名からIPアドレスを知るプロセスが必要になります。その仕組みをDNS(Domain Name System)といいます(正確にはDNS機能のうちの名前解決機能)。
 名前解決のためのパソコン側の機能をリゾルバ(resolver)といいます。Webブラウザや電子メールソフトから呼び出されて動作します。ドメイン名→IPアドレスを正引き、ドメイン名←IPアドレスを逆引きといいます。

(注)DNSはあくまでもドメイン名でWebサーバまでを対象にしており、Webサーバに登録されているWebページは対象にしていません。

単純には、世界中すべてのドメイン名とIPアドレスの対応表があればよいのですが、数億のドメインがあり、毎日十万程度の新規登録がある状況では管理できません。
 ドメイン名を受け取ってIPアドレスを返す機能をもつサーバを、DNSサーバあるいはネームサーバといいます。多数のDNSサーバで管理すること、対応表を自動的に更新することなどが必要になります。

BIND

DNSサーバのデファクトスタンダードとして広く普及しているOSS(オープンソースソフトウェア)です。権威DNSサーバ、キャッシュDNSサーバの両方の機能を備えています。


名前解決の方法

権威DNSサーバによる名前解決

ドメイン名は、ICANN→レジストリ→レジストラの階層で管理されています。そして、それぞれがDNSサーバをもっています。それで、この順に聞いていけば、必ずIPアドレスが得られます。
 このように組織階層としてもつDNSサーバを権威DNSサーバあるいはコンテンツDNSサーバといいます。故障対策や負荷分散のため、複数のサーバを分散して設置しています。ICANNはルートDNSサーバを世界13か所にもっており、その一つは日本にあります。

この方法は現実的ではありません。

このように、静的なドメイン名-IPアドレスの対応表だけのDNSサーバをDNSコンテンツサーバといい、後述の動的に対応表を管理するDNSキャッシュサーバと区別しています。しかし、通常は両方の機能をもっています。

DNSキャッシュサーバによる名前解決

通常は、次のような構成で名前解決をしています。

キャッシュ

ここでの対応表は、ドメイン名とIPアドレスの対応を静的に作成する以外に、動的に名前解決がなされた結果を一定期間保持する(キャッシュする)ようになっています。

URLが入力されると、リゾルバが呼び出され、パソコンの対応表にあれば、そのままIPアドレスを得るし、なければDNSキャッシュサーバを、そこの対応表にもなければ、デフォルトDNSサーバへと問い合わせます。
 このようにして、問合せ回数を削減してDNSのためのリードタイムを短縮できます。

保持期間をTTL(Time To Live)といいます。Webサーバで指定することも、サーバやパソコンで指定することもあります。TTLが長いとDNSへの問合せが少なくなりますが、その間にIPアドレス変更があると正しくつながりません。

(注)Webブラウザでのキャッシュとブックマーク(お気に入り)

DNSキャッシュサーバ

利用者から名前解決の問い合わせを受け付け、当該ドメイン名を管理するDNSサーバへの問い合わせを代行し、結果を利用者に返答するサーバです。このキャッシュは他の利用者からの問合せにも使えるので、社内Webサーバやアクセスの多い外部サーバには大きな効果があります。

通常はプロキシサーバの一機能として使います。IPアドレスだけでなく、Webページそのものをキャッシュしておき、インターネットを介さずに直接に返すこともあります。また、キャッシュの情報を解析することにより、キャッシュを再設定したり、不適切なサイトへのアクセスを阻止したりすることもできます。

家庭での利用では、DNSキャッシュサーバではなくルータを用いますが、それにDNSキャッシュサーバ機能をもたせるか、パソコンだけのキャッシュにするかは設定によります。

デフォルトDNSサーバ

社外で最初に問い合わせるDNSサーバです。レジストリであるISPもDNSサービスをしていることが多いですが、GoogleやCloudflareなどのDNSプロバイダもあります。パブリックDNSサーバといい通常は無料です。
 デフォルトDNSサーバで解決できないときは、レジストリなど権威DNSサーバに問い合わせます。そこでも解決しないときは、他の権威DNSサーバに問い合わせを転送します。それを繰り返すうちに解決するDNSサーバに到達します。また、キャッシュも利用していると思われます。

「デフォルト」というのは、パソコンやルータにあらかじめそのIPアドレスが設定されているからです。ISPとの契約時に設定をすることもありますし、利用者が自分で設定変更することもできます。


ゾーンファイルとDNSレコード

権威DNSサーバが自分が管理しているドメイン名の範囲をゾーンといいます。権威DNSサーバが持つゾーンでのドメイン名からIPアドレスを知るためのファイルを(正引き)ゾーンファイルといいます。そして、各行をDNSレコードといいます。

  11  $TTL    10800   ; 生存期間(TTL)
  12  kogures.co.jp.       IN SOA    ns.kogures.co.jp.     ; DNSサーバ名
  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)レコード
ドメインのDNSサーバ名(12)やその管理者のメールアドレス(14),セカンダリDNSサーバへのへのリフレッシュ情報(14~18)など,ドメイン情報を記述するための基本項目を設定しています。
NS(Name Server)レコード
DNSサーバは重要ですので,プライマリDNSサーバとセカンダリDNSサーバを置くのが通常です。19と20でそれらのホスト名を設定しています。
MX(Mail eXchanger)レコード
メールサーバのホスト名(19,20)を設定しています。MXの後の10や20はメールサーバの優先順位で,数字の小さいほうが優先されます。
A(Address)レコード
ホスト名とIPアドレスの対応表です。これにより,名前解決(正引き)ができます。
CNAME(Canonical NAME)レコード
一つのホスト(同一IPアドレス)に複数のホスト名(別名,エイリアス)をつけることができます。これまでホスト名がIPアドレスと1対1の関係があるような記述をしてきましたが,別名をつけることができるので,厳密な記述とはいえません。

ゾーン転送

権威DNSサーバの持つゾーンファイルを他の権威DNSサーバに転送することをゾーン転送といいます。
 権威DNSサーバは、故障対策として、プライマリデータサーバとセカンダリデータサーバをもっています。プライマリデータサーバとセカンダリデータサーバでゾーンファイルを同期させることを通常はデータ転送といいます。ポート番号53
 ゾーンファイル全体を転送するAXFRと、差分だけを転送するIXFRがあります。

ゾーンファイルが漏洩してIPアドレスを改ざんされると、悪意のある偽サイトに誘導するDNSキャッシュポイズニングなどの不正が行われるので、適切なアクセス制御が行われます。


DNSの拡張機能

DSNラウンドロビン

頻繁にアクセスされるWebサーバなどでは,同じ内容を複数のサーバに置いておき負荷を分散させることが考えられますが,利用者には同じホスト名(URL)であることが必要になります。それには,一つのホスト名に複数のIPアドレスを割り当てるのが適切です。
 DNSサーバに次の設定をしておき,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つのDNSサーバで管理するのは面倒ですし,DNSサーバへの負荷が大きくなります。それを回避するために,複数のサブドメインに分割してそれぞれにDNSサーバを設置します。
 例えば,kaisya.co.jp を,eigyo.kaisya.co.jp と jinji.kaisya.co.jp に分割するとします。

kaisya.co.jp のDNSサーバ 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サーバ 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 の名前解決で,ルートDNSサーバから順に聞いてくるのと同じです。

バーチャルドメイン

サブドメイン分割とは逆に,多くのホスト名があるのに,実際は1台しかないという場合もあります。そのときには,複数のドメインで一つのIPアドレスを共有することになります。これをバーチャルドメインといいます。

ダイナミックDNS

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


本シリーズの目次へ