Domain Name System

Domain Name Systemとは、コンピュータネットワーク上のホスト名や電子メールのアドレスに使われるドメイン名と、IPアドレスとの対応づけを管理するために使用されているシステムである。後述の通りインターネットのシステムとして開発されているが、インターネットに限定したシステムではなく、それ以外のネットワークでも応用できる。

1983年に、インターネットを使った階層的な分散型データベースシステムとして、Information Sciences Instituteのポール・モカペトリスとジョン・ポステルにより開発された。

インターネットに接続されているすべてのコンピュータは、固有のIPアドレスを持っている。インターネット上のコンピュータにアクセスするためには、そのコンピュータの IPアドレスを知る必要がある。しかし、IPアドレスは0から255までの数値を4つ組み合わせで表現されるため、人間には記憶しにくい。そのため、IPアドレスを文字列で扱うことができるような機構として、インターネットドメイン名が考案された。そして、ドメイン名からIPアドレスを引き出す機能が、DNSの代表的な機能である。このほか、ドメイン名に関連するメールサーバ情報なども取り扱っている。

1. 動作
-----

DNSは、ホスト名の入力に対して、DNSサーバと呼ばれるコンピュータを参照し、そのホストが持つIP アドレスを検索するシステムである。喩えるならば、DNSは氏名から電話番号を自動で調べる電話帳のようなものである。

たとえば、ウェブブラウザにURIを入力してネットワークにアクセスする際、ブラウザはURIを解析して、アクセスすべきWebサーバのホスト名を取り出し、後述のリゾルバAPIに渡す。リゾルバAPIは、Webサーバのホスト名をDNSサーバに問い合わせて返ってきたIPアドレスにより、ホスト名をIPアドレスに変換してブラウザに返す。ブラウザは、得られたIPアドレスを使用して、Webサーバとの通信を開始する。このようにしてブラウザはインターネットにアクセスする。

ホスト名から、そのホストにアクセスするためのIPアドレスを得ることを、ホスト名の「解決」と呼び、これを行うためのクライアント側のしくみやプログラムを「リゾルバ」または「ネームリゾルバ」という。

DNSに格納されている情報を「レコード」と呼ぶ。レコードは格納する情報によって種類が分類分けされている。レコードの種類は「DNSレコードタイプの一覧」を参照。

ただし現実の電話帳との違いは、この情報がインターネット上のいくつものコンピュータに分散して格納されているところにある。インターネットには莫大な数のコンピュータが接続されており、これらのホスト名と IPアドレスは日々更新されつづけているため、インターネット上のすべてのホスト名を一台のコンピュータで集中管理することは現実的ではなかった。そのためインターネット上のコンピュータをある単位で区分けして、それぞれのグループがもつデータをグループごとのコンピュータに別々に管理させるようにした。これが DNS の基本的なアイデアである。このグループをドメインと呼ぶ。各グループには英数字とハイフンからなるラベルがつけられており、異なるドメインの情報は異なるコンピュータに格納される。

今でこそDNSはホスト名とIPアドレスの対応づけに使用されるのがほとんどだが、もともとは電子メールの配送方法やコンピュータの機種名を登録するなどといった用途も考えられていた。

ドメイン名は階層的な構造をもっている。たとえばja.wikipedia.orgというホスト名はja、wikipedia、orgという3つの階層に区切ることができる。ja.wikipedia.orgというホストはwikipedia.orgドメインに所属しており、このドメインはさらにorgドメインに所属している。ドメイン名は一個の巨大な木構造をなしており、この構造をドメイン名前空間と呼ぶ。ドメイン名前空間は頂点に.ノードを持ち、そこから.com、.org、.jp などの各トップレベルドメインが分かれている。

各ドメインはゾーンと呼ばれる管轄に分けて管理されている。ゾーンはドメイン名前空間上のある一部分に相当し、それぞれのゾーンは独立したDNSコンテンツサーバと呼ばれるコンピュータによって管理されている。DNSコンテンツサーバは、管理しているゾーンのホスト名とIPアドレスの組を記述したデータベースを持っており、クライアントマシンからの要求に応じて、あるホスト名に対応するIPアドレスを返す。DNSクライアントはルートサーバからいくつものDNSサーバをたどっていき、最終的なホスト名のIPアドレスを得る。

1.1. DNSサーバの役割
--------------

具体的な例として、ja.wikipedia.orgというホスト名の IPアドレスを検索することを考えると、再帰検索は、トップレベルドメインをルートサーバに問い合わせることからはじまる。ja.wikipedia.orgというホスト名はwikipedia.orgドメインに属し、またwikipedia.orgドメインはorgドメインに属するため、クライアントは最初にorgドメインのDNSサーバのIPアドレスを得なければならない。

まず、クライアントは適当なルートサーバをひとつ選ぶ。ここでは A.ROOT-SERVERS.NETとする。現在date=2019年12月}}、ルートサーバに登録されているorgドメインのネームサーバは9つあり、そのうちのひとつはa7.nstld.comである。

つぎにクライアントは、このネームサーバにwikipedia.orgドメインのネームサーバの IPアドレスを問い合わせる。するとそのネームサーバのホスト名はdns34.register.comであることがわかる。

最後に、このネームサーバにja.wikipedia.orgのIPアドレスを問い合わせる。するとこのサーバは最終的な答130.94.122.197を返す。こうして目的とするホスト名のIPアドレスを検索できる。

1.2. 権威サーバとキャッシュサーバ
-------------------

DNSはデータを分散して保持する多数の権威DNSサーバと、キャッシュサーバからなる。authoritativeネームサーバは自らが担当する一定の範囲のドメイン名の名前解決を内部のデータベースを使って行い、その結果のIPアドレスを送り返す。キャッシュDNSサーバは権威DNSサーバの回答結果を一定期間保存して代わりに回答する機能を持ち、権威DNSサーバの負荷を分散する。

2. DNS over HTTPS  / DNS over TLS 
--------------------------------------------

DNS over HTTPS は、リゾルバとのDNSクエリのやり取りをHTTPS上で行うことで、セキュリティとプライバシーを向上させる。これは 8484}} で定義され、MIMEタイプとしてapplication/dns-messageを使う。

DNS over TLSは、TLSプロトコルを介してリゾルバとのDNSクエリをやり取りする。効果はDoHと同様である。

3. 存在意義
-------

DNSは、ほとんどのインターネット利用者が普段意識していない透過的なシステムだが、その役割は非常に重要である。あるドメインを管理しているDNSサーバが停止してしまうと、そのドメイン内のホストを示すURLやメールアドレスの名前解決などができなくなり、ネットワークが利用者とつながっていてもそのドメイン内のサーバ類には事実上アクセスできなくなる。そのため、重要なDNSサーバは二重化されていることが多い。

またDNS偽装を行うと、情報を容易に盗聴・偽装することができてしまう。情報レコードの不正な書き換えを防止するため、コンテンツサーバのマスタはインターネットから隠匿し、インターネットには特定のマスタのコピーを受け取るスレーブを公開するなどの構成を組んで、防衛手段を講じる。

4. 関連語句
-------

DNSサーバ
Dynamic Domain Name System
リゾルバ
djbdns - DNSサーバ用ソフトウェア。
BIND
unbound - オープンソースのDNSキャッシュサーバ
DNSルートゾーン
DNSゾーン転送
DNSレコードタイプの一覧
MXレコード
Glue Record
DNSBL
DNSラウンドロビン
EDNS0 
ドメイン名
トップレベルドメイン 
国際化ドメイン名
Fully Qualified Domain Name
地域インターネットレジストリ
レジストラ
TCP/IP
名前解決
正引き
逆引き
ディレクトリ・サービス
DNS偽装
誕生日攻撃
DNS-Pinning 
DNS Security Extensions 
エニーキャスト

5. 関連プロトコル
----------

[1]
1034}} : DOMAIN NAMES - CONCEPTS AND FACILITIES
1035}} : DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
8310}}: Usage Profiles for DNS over TLS and DNS over DTLS - TLSおよびDTLS上でDNSメッセージのやり取りを行うプロトコルの規定。セキュリティやプライバシー保護の向上を意図している。
8484}}: DNS Queries over HTTPS - HTTPS上でDNSメッセージのやり取りを行うプロトコルの規定。使用するHTTPのバージョンとしてはHTTP/2が推奨されている。こちらも、セキュリティやプライバシー保護の向上を意図している。
マルチキャストDNS - mDNS とも表現される
LLMNR - Link Local Multicast Name Resolution

6. 脚注
-----

6.1. 注釈
-------

6.2. 出典
-------

7. 外部リンク
--------

[2]