DNS
Domain Name System
「IPアドレス」と「ドメイン名」を変換(名前解決)することができる、ネットワーク上に存在するリソースを識別するための 分散型システム。
中央集権型ではないため、1 台のサーバが故障しても別のサーバによってシステム全体が稼働し続ける。
DNS の目的は ドメイン名 と IPアドレス の変換
IP アドレス
ネットワーク上のデータ配達プロトコル(IP)において、住所として使用される情報。
1 台のコンピュータが用途別に複数の IP アドレスを持つこともある。
ネットワーク上の住所として重複が許されない一方で、IPv4 では 32bit、IPv6 では 128 bit と決まっていて、発行可能な数に限りがある。以降の説明ではIPv4を扱う。
IPv4(version 4) では、割り当てることができるアドレスの数が 43 億個程度であり、世界中でネットワークに接続する機器が爆発的に増えたことで枯渇問題が発生し、128 bitのサイズの IP アドレス IPv6(version 6) が登場した。
IPv4 と IPv6 には互換性がない。
現在は、IPv6 に移行する過程にあり、さまざまな工夫のもとで両者が共存している状態にある。
IP アドレスを 2 進数で表現すると、
11000110 00110011 01100100 00000001
のようになるが、ただこれでは扱いづらいため、一般的には 8 bit ごとにドットで区切り
198.51.100.1
のように 10 進数で表現する。
ドメイン名
ドメインという用語は文脈によってさまざまな意味を持つが、ここでは インターネット上で、特定の組織・ネットワーク・個人を識別するための名前 を指す。
IP アドレスと同様に、インターネット上の住所として例えられることが多く www.example.com
などの形式で表現される。
ドメインは DNS によって特定の IP アドレスと紐づけられているため、DNS に対して「ドメイン名」で問い合わせをすれば、紐づく「IPアドレス」が回答される。
例えばユーザが「Googleのサイトにアクセスしたい」というときに、Google の Web サーバの IP アドレスを知らなかったとしても google.com
というドメイン名さえ知っていれば、アクセスに必要な IP アドレスは DNS が名前解決してくれる。
サービスを運用する側にとっても、IP アドレスが変わった時にユーザに周知されたドメイン名を変更することなく紐づく IP アドレスだけを変更することができる(google.com
はそのまま使い続けることができる)。
また、ドメインは 階層構造 を持っている。
- トップレベルドメイン(TLD、Top Level Domain)、
- セカンドレベルドメイン(SLD、2LD、Second Level Domain、2nd Level Domain)
- ・・・
各階層のそれぞれのドメインを管理するサーバを DNSサーバ と呼び、最上位のDNS
サーバを ルートDNSサーバ と言う(TLD が最上位ではない)。
TLD は日本であれば jp
、アメリカであれば us
など。また com
、org
などもここに含まれる。(com=Commercial、商用の。org=Organization、組織。)
SLD には、co.jp
、or.jp
、go.jp
、ne.jp
、ac.jp
などが含まれる。(co=Corporation、企業。or=Organization、組織。go=Government、政府。ac=Academic、教育機関。)
一つのドメイン名に対して複数の IP アドレスを紐づけることもできる(DNSラウンドロビン)。
また、一台のサーバに複数のドメイン名をつけることもできる(仮想ホスト)。
FQDN
ドメイン名の中でも、ホスト名を含む特別なドメイン名 を FQDN(Full Qualified Domain Name)と呼ぶ。
完全修飾ドメイン名とも呼ばれる。
ホスト名は、個々のコンピュータを識別するために付けられる名前。
FQDN であることを明示したい場合は www.example.co.jp.
のように末尾にドット .
をつけることがある。
慣習的に、Web サーバには www
、DNS サーバには ns
(Name Server)、メールサーバにはmx
(Mail Exchanger) などのホスト名が使われる。
「ドメイン名があれば IP アドレスがわかるのに、なぜホスト名なんて必要なの?」と思うが、特に一台のサーバが複数のサービスを提供するような場合、情報がドメイン名だけだとホストまでしかわからない。ドメイン名までが同じであっても FQDN に含まれるホスト名が異なることで、各サービスを識別することができる(仮想ホスト)。
例えば example.co.jp
を運用するサーバが 「Web サーバ」と「メールサーバ」の2つのサービスを提供する場合、www.example.co.jp
なのか、mx.example.co.jp
なのかで両者のサービスを区別できる(ドメイン部分は同じ)。
また www.co.jp
、www.co.us
などのように異なるドメイン間で同じホスト名が利用できるのもメリットとして挙げられる。
ネットワークアドレス / ホストアドレス
IPアドレスは ネットワーク部 と ホスト部 から構成される。
IP アドレスという言葉は、基本的には特定のコンピュータを指して使われるが、ルーティングなどの文脈では、スイッチングハブやルータによって分割されたセグメント、またはネットワーク全体を指すことがある。この時の IP アドレスはネットワークアドレスと呼ばれる。
ネームサーバ
ドメイン名、IPアドレスの対応情報を管理するサーバは DNSサーバ または ネームサーバ と呼ばれる。
ゾーン
ネームサーバは複数のドメイン名を管理することかできる。
一つのネームサーバが管理する複数のドメイン名を ドメイン領域 と呼び、これをゾーンと言う。
リゾルバ
DNS サーバに対して、IP アドレスの問い合わせを行うクライアント側のソフトウェアを リゾルバ という。
通常リゾルバは OS に標準で搭載されているため、開発者がソフトウェアとしてインストールしたり直接操作したりとリゾルバを意識する機会はあまりない。
プライマリDNSサーバ・セカンダリDNSサーバ
DNS サーバは可用性を高めることを目的として通常は2台以上設置される。
通常時に機能するものは プライマリDNSサーバ と呼ばれ、異常発生時などにバックアップとして機能するものは セカンダリDNSサーバ と呼ばれる。
DNS サーバが保持する設定ファイルをゾーンファイルと呼ぶため、プライマリ DNS サーバからセカンダリ DNS サーバへの同期は ゾーン転送 と呼ばれる。
コンテンツDNSサーバ / キャッシュDNSサーバ
DNS サーバには コンテンツDNSサーバ と キャッシュDNSサーバ がある。
コンテンツ DNS サーバは 権威DNSサーバ とも呼ばれる。
コンテンツ DNS サーバは自身でドメイン名・IPアドレスの紐付け情報を管理するのに対して、キャッシュ DNS サーバはコンテンツ DNS サーバに対して問い合わせた結果を一時保管するのみ。
またキャッシュ DNS サーバの保持する情報は一定時間が経過すると削除される。キャッシュ DNS サーバを使用することによって、同じ問い合わせに対してキャッシュから高速回答することができる。
キャッシュ DNS サーバは、自身がキャッシュを保持していない情報についてはクライアントに代わって権威サーバに問い合わせをすることから フルサービスリゾルバ とも呼ばれる。
権威 DNS サーバは自身が知らない情報は「知らない」としか回答しないのに対して、フルサービスリゾルバは、自身が知らない情報を他の権威DNSサーバに問い合わせて解決してくれる。
権威 DNS サーバは、自身が管理するゾーン内の情報だけではなく下位の権威 DNS サーバの情報など、他のゾーンに関する情報も保持している。
例えば www.example.co.jp
というドメイン名(FQDN)があるとき、リゾルバは自身の端末に設定された DNS サーバ(フルサービスリゾルバ)に問い合わせを行う。
リゾルバ : 「www.example.co.jp
のIPアドレスを教えて」
フルサービスリゾルバは、www.example.co.jp
のIPアドレスを保持していない時、まずルートDNSサーバに問い合わせを行う。
フルサービスリゾルバ : 「www.example.co.jp
のIPアドレスを教えて」
ルートDNSサーバはwww.example.co.jp
のIPアドレスを知らない。ただし、jp
ドメインを管理している下位の権威サーバは知っている。そこで、TLDであるjp
を管理する権威DNSサーバのIPアドレスを回答する。
ルートDNSサーバ : 「私はwww.example.co.jp
を知らないからjp
に聞いてください」
フルサービスリゾルバはjp
を管理する権威DNSサーバに対して、ルートDNSへの問い合わせと同じ問い合わせを行う。これを反復問い合わせと呼ぶ。
フルサービスリゾルバ : 「www.example.co.jp
のIPアドレスを教えて」
www.example.co.jp
はjp
のゾーンでもないため、jp
もIPアドレスを知らない。そこでjp
の権威DNSサーバは、下位のco.jp
を管理する権威DNSサーバのIPアドレスを回答する。
DNSサーバ(jp
) : 「私はwww.example.co.jp
を知らないからco.jp
に聞いてください」
フルサービスリゾルバはco.jp
を管理する権威DNSサーバのIPアドレスに再度、反復問い合わせを行う。
フルサービスリゾルバ : 「www.example.co.jp
のIPアドレスを教えて」
しかし、co.jp
を管理する権威DNSサーバのゾーンにもwww.example.co.jp
は含まれていないため、さらに下位のexample.co.jp
の権威DNSサーバのIPアドレスが回答される。
DNSサーバ(co.jp
) : 「私はwww.example.co.jp
を知らないからexample.co.jp
に聞いてください」
フルサービスリゾルバは、example.co.jp
を管理する権威DNSサーバに対して、再度問い合わせを行う。
フルサービスリゾルバ : 「www.example.co.jp
のIPアドレスを教えて」
www.example.co.jp
はexample.co.jp
を管理する権威DNSサーバのゾーン範囲内になるため、ここでようやくwww.example.co.jp
に紐づくIPアドレスが回答される。
フルサービスリゾルバは、リゾルバに対してwww.example.co.jp
に紐づくIPアドレスを回答して名前解決が終了する。
DNSサーバ(example.co.jp
) : 「www.example.co.jp
のIPアドレスは198.51.100.1
です」
これらの流れの中で権威 DNS サーバは自身のゾーン内のドメインに紐づく IP アドレスのみではなく、下位の権威 DNS サーバの IP アドレスも保持していて、ゾーン同士が連携しているように見える点がポイント。
コンテンツDNSサーバ = 権威サーバ
キャッシュDNSサーバ = フルサービスリゾルバ
リソースレコード
DNS は IP アドレスとドメイン名を変換する役割を持つが、実態としては複数のサーバによって構成される分散型のシステムであり大量のドメイン名・IPアドレス情報を管理する分散型データベースとみなすこともできる。
DNS サーバには権威 DNS サーバとフルサービスリゾルバの2種類があり、権威 DNS サーバはフルサービスリゾルバからの問い合わせを自身の管理する情報から回答する。
このとき、それぞれの権威 DNS サーバで管理されている情報は リソースレコード と呼ばれる。
リソースレコードは、DNSサーバの設定ファイル(ゾーンファイル)などに記載される。リソースレコードにはいくつかの種類がある。
Aレコード
Address Record
ホスト名に対応するIPv4アドレス。
例えば、
www IN A 198.51.100.0
というレコードがあるとすると、www
というホストがIPv4アドレス198.51.100.0
を持っていることを示す。
AAAAレコード
IPv6 Address Record
ホスト名に対応する IPv6 アドレス。
CNAMEレコード
Canonical Name Record
ホスト名にエイリアス(別名)を指定することで、1つのホスト名に複数のドメイン名を紐づける。(canonical=標準的、正規の)
例えば、www.example.com
が example.com
の CNAME として設定されると、example.com
への問い合わせは www.example.com
への問い合わせと同じ扱いということになる。
MXレコード
Mail Exchanger Record
メール送信において、宛先メールアドレスのドメインと紐づくメールサーバおよび優先度を指定する。
例えば、example.com
の MX レコードが mail.example.com
である場合、これは example.com
のメールサーバが mail.example.com
であることを示す。
NSレコード
Name Server Record
そのドメインから見た、下位のドメインの権威サーバ。
example.com
の NS レコードが、ns1.otherdns.com
、ns2.otherdns.com
の場合、example.com
の下位には ns1.otherdns.com
、ns2.otherdns.com
という権威サーバがいることを示している。
PTRレコード
Pointer Record
逆引きルックアップのために使用される。IPアドレスからホスト名への逆引き情報を提供する。
SOAレコード
Start Of Authority Record
そのDNSサーバが管理する領域(ゾーン)に関する情報。
DNSラウンドロビン
複数の DNS サーバが同じドメイン名を共有し、各 DNS サーバに対して負荷を分散するための仕組み。
例えば1台の DNS サーバの A レコードに対して、X と Yの2台分の DNS サーバの IP アドレスを設定しておくと、1回目の問い合わせは X に、2回目の問い合わせは Y に、といった具合に、処理を分散させることができる。
ロードバランサーなどの負荷分散装置を使用せずに、容易に負荷分散が実現できる反面、問い合わせを割り振る際に、割り振り先の処理能力(スペック)や、負荷状況を考慮することはできない。
仮想ホスト
1台のサーバで仮想的に複数のドメイン名を運用すること。サーバソフトウェアの機能として提供され、主にメールサーバ、Web サーバで利用される。
1台のサーバで運用されるドメイン名に、異なるホスト名をつけることを仮想ホストと言う事もある。
IPアドレスベースの仮想ホスト
ドメインごとに IP アドレスを設定する方式。1 台のサーバが複数の IP アドレスを持つことになる。
ドメイン名ベースの仮想ホスト
1つの IP アドレスに複数のドメイン名、ホスト名を割り当てることで、1台のサーバがそれぞれのドメインに紐づく複数のサービスを提供する。
参考
・ネスペの基礎力 -プラス20点の午後対策 (情報処理技術者試験)
・ストーリーで学ぶネットワークの基本
・ネットワークスペシャリスト試験に出るところだけを厳選! 左門至峰による ネスペ教科書 改訂第2版