Web教材一覧> ネットワーク> アプリケーションプロトコル(目次)
DNS、名前解決、リゾルバ,DNSサーバ、ネームサーバ,権威DNSサーバ、ルートDNSサーバ、DNSコンテンツサーバ、キャッシュ、TTL、DNSキャッシュサーバ、プロキシサーバ、デフォルトDNSサーバ、DNSプロバイダ、パブリックDNSサーバ、BIND,サブドメイン分割,バーチャルドメイン,ダイナミックDNS
DNS(Domain Name System)とは、ドメイン名やホスト名などとIPアドレスとを対応付けるシステムです。そのために、クライアントからの問い合わせに応じてネームサーバーから情報を取り出すことを名前解決(Name Resolution)とか単純にレゾリューション(Resolution)とうこともあります。
ここでは、WebページのURLを入力してからWebサーバのIPアドレスを得るまでのプロセスを例にします。
ここまでに、「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サーバで管理すること、対応表を自動的に更新することなどが必要になります。
DNSサーバのデファクトスタンダードとして広く普及しているOSS(オープンソースソフトウェア)です。権威DNSサーバ、キャッシュDNSサーバの両方の機能を備えています。
ドメイン名は、ICANN→レジストリ→レジストラの階層で管理されています。そして、それぞれがDNSサーバをもっています。それで、この順に聞いていけば、必ずIPアドレスが得られます。
このように組織階層としてもつDNSサーバを権威DNSサーバあるいはコンテンツDNSサーバといいます。故障対策や負荷分散のため、複数のサーバを分散して設置しています。ICANNはルートDNSサーバを世界13か所にもっており、その一つは日本にあります。
この方法は現実的ではありません。
このように、静的なドメイン名-IPアドレスの対応表だけのDNSサーバをDNSコンテンツサーバといい、後述の動的に対応表を管理するDNSキャッシュサーバと区別しています。しかし、通常は両方の機能をもっています。
通常は、次のような構成で名前解決をしています。
ここでの対応表は、ドメイン名とIPアドレスの対応を静的に作成する以外に、動的に名前解決がなされた結果を一定期間保持する(キャッシュする)ようになっています。
URLが入力されると、リゾルバが呼び出され、パソコンの対応表にあれば、そのままIPアドレスを得るし、なければDNSキャッシュサーバを、そこの対応表にもなければ、デフォルトDNSサーバへと問い合わせます。
このようにして、問合せ回数を削減してDNSのためのリードタイムを短縮できます。
保持期間をTTL(Time To Live)といいます。Webサーバで指定することも、サーバやパソコンで指定することもあります。TTLが長いとDNSへの問合せが少なくなりますが、その間にIPアドレス変更があると正しくつながりません。
(注)Webブラウザでのキャッシュとブックマーク(お気に入り)
利用者から名前解決の問い合わせを受け付け、当該ドメイン名を管理するDNSサーバへの問い合わせを代行し、結果を利用者に返答するサーバです。このキャッシュは他の利用者からの問合せにも使えるので、社内Webサーバやアクセスの多い外部サーバには大きな効果があります。
通常はプロキシサーバの一機能として使います。IPアドレスだけでなく、Webページそのものをキャッシュしておき、インターネットを介さずに直接に返すこともあります。また、キャッシュの情報を解析することにより、キャッシュを再設定したり、不適切なサイトへのアクセスを阻止したりすることもできます。
家庭での利用では、DNSキャッシュサーバではなくルータを用いますが、それにDNSキャッシュサーバ機能をもたせるか、パソコンだけのキャッシュにするかは設定によります。
社外で最初に問い合わせるDNSサーバです。レジストリであるISPもDNSサービスをしていることが多いですが、GoogleやCloudflareなどのDNSプロバイダもあります。パブリックDNSサーバといい通常は無料です。
デフォルトDNSサーバで解決できないときは、レジストリなど権威DNSサーバに問い合わせます。そこでも解決しないときは、他の権威DNSサーバに問い合わせを転送します。それを繰り返すうちに解決するDNSサーバに到達します。また、キャッシュも利用していると思われます。
「デフォルト」というのは、パソコンやルータにあらかじめそのIPアドレスが設定されているからです。ISPとの契約時に設定をすることもありますし、利用者が自分で設定変更することもできます。
権威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 :
権威DNSサーバの持つゾーンファイルを他の権威DNSサーバに転送することをゾーン転送といいます。
権威DNSサーバは、故障対策として、プライマリデータサーバとセカンダリデータサーバをもっています。プライマリデータサーバとセカンダリデータサーバでゾーンファイルを同期させることを通常はデータ転送といいます。ポート番号53
ゾーンファイル全体を転送するAXFRと、差分だけを転送するIXFRがあります。
ゾーンファイルが漏洩してIPアドレスを改ざんされると、悪意のある偽サイトに誘導するDNSキャッシュポイズニングなどの不正が行われるので、適切なアクセス制御が行われます。
頻繁にアクセスされる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アドレスを共有することになります。これをバーチャルドメインといいます。
自宅のパソコンでWebサーバを立ち上げる場合を考えましょう。ISPから固定したIPアドレスを得ていれば問題はありませんが,ダイアルアップ接続などの場合は,ISPに接続するたびにIPアドレスが変りますので,外部からそのサーバにアクセスできません。それで,接続のたびにDNSレコードの内容を動的に変更することが必要になります。そのような仕組みをダイナミックDNSといいます。