ドメインの階層構造 Domain Name System (ドメイン・ネーム・システム、DNS )とは、コンピュータネットワーク上のホスト名 や電子メール のアドレスに使われるドメイン名 と、IPアドレス との対応づけ(正引き 、逆引き )を管理するために使用されているシステムである。後述の通りインターネットのシステムとして開発されているが、インターネットに限定したシステムではなく、それ以外のネットワークでも応用できる。
1983年 に、インターネット を使った階層的な分散型データベース システムとして、Information Sciences Institute (ISI)のポール・モカペトリス とジョン・ポステル により開発された[ 1] 。
インターネットに接続されているすべてのコンピュータ(ノード)は、IPアドレス を持っている。インターネット上のコンピュータにアクセスするためには、そのコンピュータの IPアドレスを知る必要がある。しかし、IPアドレスは0から255までの数値を4つ組み合わせ(IPv4の場合)で表現されるため、人間には記憶しにくい。そのため、IPアドレスを文字列で扱うことができるような機構として、インターネットドメイン名 が考案された。そして、ドメイン名からIPアドレスを引き出す機能(正引き )が、DNSの代表的な機能である。このほか、ドメイン名に関連するメールサーバ情報なども取り扱っている。
DNSは、ホスト名(たとえばja.wikipedia.org)の入力に対して、DNSサーバ と呼ばれるコンピュータを参照し、そのホストが持つIP アドレス(たとえば130.94.122.197)を検索 するシステムである。喩えるならば、DNSは「(決して重複しないよう制限されて名付けられた前提での)氏名」から電話番号を自動で調べる電話帳である。
たとえば、ウェブブラウザ にURI を入力してネットワークにアクセスする際、ブラウザはURIを解析して、アクセスすべきWebサーバのホスト名を取り出し、後述のリゾルバAPI に渡す。リゾルバAPI(通常はOS 内部での働き)は、Webサーバのホスト名をDNSサーバに問い合わせて返ってきたIPアドレスにより、ホスト名をIPアドレスに変換してブラウザに返す。ブラウザは、得られたIPアドレスを使用して、Webサーバとの通信を開始する。このようにしてブラウザはインターネットにアクセスする。
ホスト名から、そのホストにアクセスするためのIPアドレスを得ることを、ホスト名の「解決 」(resolve)と呼び、これを行うためのクライアント側のしくみやプログラムを「リゾルバ 」(resolver)または「ネームリゾルバ 」という。
DNSに格納されている情報を「レコード 」(DNSレコード、リソースレコード)と呼ぶ。レコードは格納する情報によって種類が分類分けされている。レコードの種類は「DNSレコードタイプの一覧 」を参照。
この情報は、インターネット上のいくつものコンピュータ(DNSサーバ)に分散して格納されている。インターネットには莫大な数のコンピュータが接続されており、これらのホスト名と IPアドレスは日々更新されつづけているため、インターネット上のすべての ホスト名を一台のコンピュータで集中管理することは現実的ではなかった。そのためインターネット上のコンピュータをある単位で区分けして、それぞれのグループがもつデータをグループごとのコンピュータに別々に管理させるようにした。これが DNS の基本的なアイデアである。このグループをドメイン と呼ぶ。各グループには英数字とハイフン(- )からなるラベル(ドメイン名 )がつけられており、異なるドメインの情報は異なるコンピュータに格納される。
今でこそDNSはホスト名とIPアドレスの対応づけに使用されるのがほとんどだが、もともとは電子メール の配送方法やコンピュータの機種名を登録するなどといった用途も考えられていた。
ドメイン名は階層的な構造をもっている。たとえばja.wikipedia.orgというホスト名はja、wikipedia、orgという3つの階層に区切ることができる。ja.wikipedia.orgというホストはwikipedia.orgドメインに所属しており、このドメインはさらにorgドメインに所属している。ドメイン名は一個の巨大な木構造 をなしており、この構造をドメイン名前空間 (Domain Name Space)と呼ぶ。ドメイン名前空間は頂点に.(ルート)ノードを持ち、そこから.com 、.org 、.jp などの各トップレベルドメイン (TLD)が分かれている。
各ドメインはゾーンと呼ばれる管轄に分けて管理されている。ゾーンはドメイン名前空間上のある一部分に相当し、それぞれのゾーンは独立したDNSコンテンツサーバ と呼ばれるコンピュータによって管理されている(ドメイン名の委譲 )。DNSコンテンツサーバは、管理しているゾーンのホスト名とIPアドレスの組を記述したデータベースを持っており、クライアントマシン(あるいはDNSキャッシュサーバ )からの要求に応じて、あるホスト名に対応するIPアドレスを返す。DNSクライアントはルートサーバからいくつものDNSサーバをたどっていき、最終的なホスト名のIPアドレスを得る(DNSの再帰検索)。
具体的な例として、ja.wikipedia.orgというホスト名の IPアドレスを検索することを考えると、再帰検索は、トップレベルドメイン をルートサーバ に問い合わせることからはじまる。ja.wikipedia.orgというホスト名はwikipedia.orgドメインに属し、またwikipedia.orgドメインはorgドメインに属するため、クライアントは最初にorgドメインのDNSサーバ(ネームサーバ)のIPアドレス を得なければならない。
まず、クライアントは適当なルートサーバをひとつ選ぶ。ここではA.ROOT-SERVERS.NET(198.41.0.4)とする。現在[いつ? ] 、ルートサーバ に登録されているorgドメインのネームサーバは9つあり、そのうちのひとつはa7.nstld.com(192.5.6.36)である。
つぎにクライアントは、このネームサーバにwikipedia.orgドメインのネームサーバの IPアドレスを問い合わせる。するとそのネームサーバのホスト名はdns34.register.com(216.21.226.87)であることがわかる。
最後に、このネームサーバにja.wikipedia.orgのIPアドレスを問い合わせる。するとこのサーバは最終的な答130.94.122.197を返す。こうして目的とするホスト名のIPアドレスを検索できる。
DNSはデータを分散して保持する多数の権威DNSサーバと、キャッシュサーバからなる。authoritativeネームサーバ(「権威DNSサーバ」[ 2] 、「権威あるDNS」[ 3] とも)は自らが担当する一定の範囲のドメイン名の名前解決を内部のデータベースを使って行い、その結果のIPアドレスを送り返す[ 2] 。キャッシュDNSサーバは権威DNSサーバの回答結果を一定期間保存して代わりに回答する機能を持ち、権威DNSサーバの負荷を分散する[ 4] 。
DNS over HTTPS (DoH) / DNS over TLS (DoT)[ 編集 ] DNS over HTTPS (DoH)は、リゾルバとのDNSクエリのやり取りをHTTPS 上で行う[ 注 1] ことで、セキュリティとプライバシーを向上させる。これはRFC 8484 で定義され、MIMEタイプ としてapplication/dns-messageを使う。
DNS over TLS (DoT)は、TLS プロトコルを介してリゾルバとのDNSクエリをやり取りする。効果はDoHと同様である。
DNSは、ほとんどのインターネット利用者が普段意識していない透過的なシステムだが、その役割は非常に重要である。あるドメインを管理しているDNSサーバ が停止してしまうと、そのドメイン内のホストを示すURL やメールアドレス の名前解決などができなくなり、ネットワークが利用者とつながっていてもそのドメイン内のサーバ類には事実上アクセスできなくなる。そのため、重要なDNSサーバは二重化 されていることが多い。
またDNS偽装 を行うと、情報を容易に盗聴・偽装することができてしまう。情報レコードの不正な書き換えを防止するため、コンテンツサーバのマスタ(プライマリ)はインターネット(外部)から隠匿し、インターネットには特定のマスタのコピー(ゾーン転送)を受け取るスレーブ(セカンダリ)を公開するなどの構成を組んで、防衛手段を講じる。
STD0013 RFC 1034 : DOMAIN NAMES - CONCEPTS AND FACILITIESRFC 1035 : DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATIONRFC 8310 : Usage Profiles for DNS over TLS and DNS over DTLS -TLS (TCPを使用)およびDTLS (UDPを使用)上でDNSメッセージのやり取りを行うプロトコルの規定。セキュリティやプライバシー保護の向上を意図している。RFC 8484 : DNS Queries over HTTPS -HTTPS 上でDNSメッセージのやり取りを行うプロトコルの規定。使用するHTTPのバージョンとしてはHTTP/2 が推奨されている。こちらも、セキュリティやプライバシー保護の向上を意図している。マルチキャストDNS - mDNS とも表現されるLLMNR - Link Local Multicast Name Resolution^ つまり、ポート53を使わずにポート443を使う。