検索
連載

DNSとは超入門DNS

インターネット上にあるサーバやサービスの「名前」とIPアドレスとの対応を管理することで、インターネットを支えている「DNS(Domain Name System)」。まずは、その役割や構造といった基礎から説明する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。



インターネットの基本的な名前解決サービス、DNSとは

 「DNS(Domain Name System)」とは、簡単に言うと、コンピュータ名やドメイン名などの名前を表す文字列とIPアドレスの対応を管理したり、検索したりする階層構造のサービスである。

 例えば「http://www.example.jp/」のようなアドレスをWebブラウザのアドレスバーに入力すると、このWebサイトが開かれる。だがTCP/IPプロトコルの視点から見ると「www.example.jp」という文字列のままでは通信はできない。TCP/IPは名前ではなく、IPアドレスを使って通信相手を識別するプロトコルだからだ。

 そのため名前で指定された場合は、内部ではいったんIPアドレスに変換してから、相手のWebサーバにTCPで接続する。このアドレス変換のことを「名前解決(Name Resolution)」と言う。

名前とIPアドレスによる通信の例
名前とIPアドレスによる通信の例
同じWebサイトを、名前とIPアドレスで表示させた例。WebサイトのURLを名前で指定しても、実際には内部では名前からIPアドレスへの変換(名前解決)が行われ、最終的にはIPアドレスを使ってWebサイトへ接続される。
※注:HTTPSなどを含む最近のWebサイトでは、IPアドレスだけで接続しようとすると、ホスト名情報などが不足していて、実際には正しく接続・表示できないことも少なくない。
  (1)名前文字列で指定した例。
  (2)同じWebサーバへIPアドレスを指定して接続した例。

DNSサーバの役割は?

 上の例では、www.example.jpという名前が10.20.2.101というIPアドレスに対応していたが、この対応関係を管理するのがDNSの役目である。DNSのサービスを実際に担当するシステムはDNSサーバと呼ばれる。

 DNSサーバには、大きく分けて2つの機能がある。

  1. ドメインの情報を管理する「コンテンツサーバ(権威サーバ)」機能
  2. 他のDNSサーバに問い合わせて名前解決する「リゾルバ」機能

ドメインの情報を提供するコンテンツサーバ

 コンテンツサーバは、

  • このドメインの管理者は誰?
  • このドメインの名前解決を担当するDNSサーバはどれ?
  • このドメイン内にはどんな名前のホストやサービスがあるのか?
  • 下位にはどんなドメインがあるのか?

といった情報を外部に対して提供する。ドメイン名は階層的に構築されているため、(基本的には)そのドメインごとにそれぞれ担当するコンテンツサーバが存在し、それらがツリー状につながっていることになる。

 ドメインを取得したユーザーは、そのドメインの情報を外部へ向けて公開するために、DNSのコンテンツサーバを用意する必要がある。

 以下に、あるDNSサーバで提供されているドメインの情報の例を示しておく(詳細は次回解説)。なおnslookupはDNSサーバに直接問い合わせ要求などを送信するコマンドである。

※Windows OS上での実行例。Linuxなどではもっと高機能なDNS関連コマンドが用意されているが、標準のWindows OSにはnslookupしかないのでこれを使う
C:\>nslookup -type=all example.jp ……example.jpドメインに関する情報の取得
サーバー:  localhost ……問い合わせ先のDNSサーバ
Address:  ::1

example.jp      nameserver = example-dc1.example.jp
example.jp
        primary name server = example-dc1.example.jp ……このドメインを担当するDNSサーバ名
        responsible mail addr = hostmaster.example.jp ……このドメインの担当者(のメールアドレス)
        serial  = 1706146022
        refresh = 900 (15 mins) ……このドメインデータの寿命など
        retry   = 600 (10 mins)
        expire  = 86400 (1 day)
        default TTL = 3600 (1 hour)
example.jp      MX preference = 10, mail exchanger = example-dc1.example.jp ……このドメインのメールサーバ名
example-dc1.example.jp  internet address = 10.20.1.101 ……DNS/メールサーバのIPアドレス

C:\>



DNSのもう1つの役割「リゾルバ」

 DNSサーバのもう1つの役割としてリゾルバ機能がある(「キャッシュDNSサーバ」などと呼ばれることもある)。

 DNSによる名前解決は実は簡単な作業ではない。ドメインごとにコンテンツサーバが分かれているため、名前解決するためには、各ドメインのDNSサーバに順番に問い合わせていく必要があるからだ。

 例えばwww.example.jpという名前を解決する場合、最初はルート(トップ)のDNSサーバにjpドメインの情報を問い合わせ、次にjpドメインのDNSサーバにexampleドメインの情報を問い合わせ、……、というふうに、ルートから順にたどっていく必要がある(詳細は第3回で解説)。

 この処理はあまり軽くないし、各ユーザーが独自に行うのでは効率が悪過ぎる(重複した、無駄なネットワークトラフィックが多く発生する)。そこで通常は名前解決専用のサーバを用意して処理を担当させる。そして一般のユーザーは、名前解決を全てそのDNSサーバに委譲する、という運用を行う。これならばクライアント側の処理が軽くなるし、一度解決した名前をキャッシュしておけば、他のクライアントに対しても高速に結果を返すことができる。

●DNSの正引きと逆引き名前解決

 DNSサーバに対する名前解決要求としては、次の2種類がある。

  • 名前文字列を渡して、それに対応するIPアドレスを求める――正引き
  • IPアドレスを渡して、それに対応する名前を求める――逆引き

 一般的には正引きの方がよく使われるが、逆引きは通信相手を特定する場合などに使われる。例えばWebサーバのアクセスログを見ると、どのIPアドレスからアクセスされたかということは分かる。だが、そのIPアドレスが実際にはどのドメインからのものかを知るには、IPアドレスから逆引きする必要がある。

 以下に正引きと逆引きの例を示しておく。

C:\>nslookup www.example.jp ……名前からIPアドレスを求める例(正引き)
サーバー:  localhost ……問い合わせ先のDNSサーバ(ローカルホスト)
Address:  ::1

名前:    www.example.jp
Address:  10.20.2.101 ……結果のIPアドレス

C:\>nslookup 10.20.2.101 ……IPアドレスから名前を求める例(逆引き)
サーバー:  localhost
Address:  ::1

名前:    www.example.jp ……結果のドメイン名(FQDN)
Address:  10.20.2.101

C:\>



階層的に構築されているドメイン名構造

 インターネット上の組織やサービスなどを一意に識別するために作られた階層的な名前空間のことを「ドメイン名(Domain Name)」と言う。ドメイン名は階層的に構築されており、インターネットの世界では、世界的に一意になるように(異なる組織が重複して同じ名前を使用しないように)、厳密な管理の下で割り当てられている。

ドメインの階層構造
ドメインの階層構造
ドメインは、ルートドメインからツリー状になった、階層的な名前空間として構築されている。上位にあるドメインは、その直下にあるドメイン名は知っているが、さらにその下については、下位のドメインに管理の権限を委譲している。

 このドメインツリーの最上部にあるのがルートゾーン(DNSの表記では、単なる「 . 」だけでルートを表すことがある)である。

 ルートゾーンの情報は、ルートゾーンを担当するDNSサーバ(ルートサーバ)に保存されている。

 ルートドメインの直下にあるドメイン、例えば.comや.jp、.infoなどは「TLD(Top Level Domain)」と呼ばれる。ルートサーバには、このTLDの情報が登録されている。

 TLDには、汎用的なgTLD(.comや.org、.info、.tokyoなど)の他に、国別コードを使ったccTLD(.jpや.usなど)、iTLD(.int)などがある。

 TLDの1つ下は「SLD(Second Level Domain)」という。例えばwww.example.jpなら、.jpがTLD、exampleがSLDになる。SLDの情報は、その1つ上にあるTLDのドメインのDNSに登録されている。

 このように、各ドメインの情報(権威情報、Authority)は、(基本的には)その1つ上のドメインのDNSサーバにのみ登録されている。そのため、あるドメインの権威情報を取得するには、その上位のDNSサーバからたどる必要がある。

ドメインの階層構造とDNSサーバ
ドメインの階層構造とDNSサーバ
ドメインごとにDNSサーバ(権威サーバ)があり、それらが連携して、ドメイン名の階層構造を実現している。

 このようにDNSではドメインごとに独立したDNSサーバ(コンテンツサーバ)を利用することにより、世界レベルでの分散型の名前管理データベースを実現している。

DNS以外の名前解決サービス

 TCP/IPネットワークにおいて、ホスト名からIPアドレスを求める機能としてはDNS以外にも幾つかある(あった)。だが現在ではほぼDNS(と、場合によってはhostsファイル)に集約されている。主なものとしては次のようなものがある。

機能 概要
hostsファイル hostsという名前のテキストファイルに、IPアドレスと名前文字列の対応を書き込んでおいて、それを参照するという名前解決方法。UNIX/Linuxなら/etc/hostsファイル、Windows OSならC:\Windows\System32\Drivers\etc\hostsファイルが該当する。ネットワークを参照する必要がないので独立した環境でも利用できるが、内容を更新するのは非常に面倒である(特に組織内で統一したhostsファイルを利用する場合)
IEN 116ネームサーバ DNSやNISの前に使われていた非常にシンプルな名前解決サービス
NIS(Network Information Service) ネットワークファイルシステムNFSとともによく使われていたサービス。ユーザー管理機能なども持つ。最初はYP(Yellow Pages、電話帳)という名称だった
WINS/lmhostsファイル Windows OSのNetBIOSベースの名前解決サービス。NetBIOSではIPアドレスではなく名前を使って通信相手を識別するので、OS自身で独自に名前とIPアドレスの対応を管理していた
・TIPS「Windowsにおけるhostsとlmhostsの違い
DNS以外の名前解決サービスの例

 いずれもローカルのLAN向けの技術であり、インターネットレベルでの利用にはあまり向いていないので(組織ごとに分散・委譲管理ができない、運用や更新が面倒など)、DNSの代わりにはならなかった。


Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る