| 通信プロトコル | |
| 略語 | DNS |
|---|---|
| 目的 | ネットワーク上のリソースを識別する |
| 開発者 | ポール・モッカペトリス |
| 導入 | 1983年11月 (1983-11) |
| OSI層 | アプリケーション層 |
| ポート | 53 |
| RFC(s) | 1034、1035 |
| インターネットプロトコルスイート |
|---|
| アプリケーション層 |
| トランスポート層 |
| インターネット層 |
| リンク層 |
ドメインネームシステム(DNS )は、インターネットやその他のインターネットプロトコル(IP)ネットワーク上のコンピュータ、サービス、その他のリソースに命名システムを提供する、階層型の分散型ネームサービスです。DNSは、関連する各エンティティに割り当てられたドメイン名(識別文字列)に、さまざまな情報を関連付けます。最も重要なのは、容易に記憶できるドメイン名を、基盤となるネットワークプロトコルを用いてコンピュータサービスやデバイスを特定し識別するために必要な数値のIPアドレスに変換することです。[ 1 ]ドメインネームシステムは、1985年以来、インターネットの機能に不可欠な要素となっています。
ドメインネームシステムは、各ドメインに権威ネームサーバーを指定することにより、ドメイン名の割り当てとインターネットリソースへのマッピングの責任を委任します。ネットワーク管理者は、割り当てられた名前空間のサブドメインに対する権限を他のネームサーバーに委任することができます。このメカニズムは、分散型でフォールトトレラントなサービスを提供し、単一の大規模な中央データベースを回避するように設計されています。さらに、DNSは、その中核となるデータベースサービスの技術的な機能を規定しています。DNSは、インターネットプロトコルスイートの一部として、DNSで使用されるデータ構造とデータ通信交換の詳細な仕様であるDNSプロトコルを定義します。
インターネットは、ドメイン名階層とIPアドレス空間という2つの主要な名前空間を維持しています。[ 2 ]ドメインネームシステムは、ドメイン名階層を維持し、それとアドレス空間間の変換サービスを提供します。インターネットネームサーバーと通信プロトコルは、ドメインネームシステムを実装します。DNSネームサーバーは、ドメインのDNSレコードを格納するサーバーであり、データベースへのクエリに応答します。
DNS データベースに保存される最も一般的なタイプのレコードは、権限の開始 ( SOA )、IP アドレス ( AおよびAAAA )、SMTPメール エクスチェンジャ(MX)、ネーム サーバー (NS)、逆 DNS ルックアップのポインター(PTR)、およびドメイン名エイリアス(CNAME) です。DNS は汎用データベースになることを意図していませんが、時間の経過とともに拡張され、DNSSECレコードなどの自動ルックアップ用、または責任者(RP) レコードなどの人間によるクエリ用の他のタイプのデータのレコードを保存できるようになりました。汎用データベースとして、DNS はブロックリストを保存することで迷惑メール(スパム) に対抗するためにも使用されています。DNS データベースは、通常、構造化テキスト ファイル (ゾーン ファイル) に保存されますが、他のデータベース システムが一般的です。
ドメインネームシステムは当初、 IP経由のトランスポートとしてユーザーデータグラムプロトコル(UDP)を使用していました。信頼性、セキュリティ、プライバシーへの懸念から、伝送制御プロトコル(TCP)の使用やその他多くのプロトコルの開発が進みました。
DNS を説明する際によく使われる例えは、人間が理解しやすいコンピュータのホスト名をIP アドレスに変換することで、インターネットの電話帳のような役割を果たしているというものです。例えば、ドメイン名example.com内のホスト名は、 93.184.216.34 ( IPv4 ) と2606:2800:220:1:248:1893:25c8:1946 ( IPv6 )というアドレスに変換されます。DNS は迅速かつ透過的に更新できるため、エンドユーザーに影響を与えることなく、ネットワーク上のサービスの場所を変更できます。エンドユーザーは同じホスト名を使い続けます。ユーザーは、コンピュータが実際にどのようにサービスを見つけているかを意識することなく、意味のある Uniform Resource Locator ( URL ) と電子メールアドレスを使用することで、このメリットを享受できます。 www.example.com
DNSの重要かつ普遍的な機能は、クラウドサービスやコンテンツ配信ネットワークなどの分散型インターネットサービスにおける中心的な役割です。[ 3 ]ユーザーがURLを使用して分散型インターネットサービスにアクセスすると、URLのドメイン名はユーザーに近いサーバーのIPアドレスに変換されます。ここで利用されるDNSの主要な機能は、異なるユーザーが同じドメイン名に対して同時に異なる変換を受け取ることができることです。これは、DNSの従来の電話帳の見方との重要な相違点です。DNSを使用してユーザーに近接サーバーを割り当てるこのプロセスは、インターネット上でより高速で信頼性の高い応答を提供するための鍵であり、ほとんどの主要なインターネットサービスで広く使用されています。[ 4 ]
DNSは、インターネットにおける管理責任の構造を反映しています。[ 5 ]各サブドメインは、管理者に委任された管理上の自治権を持つゾーンです。レジストリによって運営されるゾーンでは、管理情報はレジストリのRDAPおよびWHOISサービスによって補完されることがよくあります。これらのデータは、インターネット上の特定のホストに関する洞察を得たり、責任を追跡したりするために使用できます。[ 6 ]
ホストの数値アドレスの代わりに、よりシンプルで覚えやすい名前を使用するという慣習は、ARPANET時代に遡ります。スタンフォード研究所(現SRIインターナショナル)は、ホスト名とARPANET上のコンピュータの数値アドレスを対応付けるHOSTS.TXTというテキストファイルを管理していました。 [ 7 ] [ 8 ]エリザベス・ファインラーは、最初のARPANETディレクトリを開発・管理しました。[ 9 ] [ 10 ]割り当て番号リストと呼ばれる数値アドレスの管理は、南カリフォルニア大学情報科学研究所(ISI)のジョン・ポステルによって行われ、彼のチームはSRIと緊密に協力していました。[ 11 ]
アドレスは手動で割り当てられていました。コンピュータとそのホスト名およびアドレスは、営業時間内に電話でフェインラーが指揮するSRIネットワーク情報センター(NIC)に連絡することによってプライマリファイルに追加されました。 [ 12 ]その後、フェインラーはNICのサーバ上にWHOISディレクトリを設定し、リソース、連絡先、エンティティに関する情報を取得しました。 [ 13 ]彼女と彼女のチームはドメインの概念を開発しました。[ 13 ]フェインラーは、ドメインはコンピュータの物理アドレスの場所に基づくべきだと提案しました。[ 14 ]例えば、教育機関のコンピュータはeduというドメインを持ちます。 [ 15 ]彼女と彼女のチームは1972年から1989年までホスト名登録レジストリを管理しました。[ 16 ]
1980年代初頭までに、単一の集中型ホストテーブルの維持は速度と扱いにくさを増し、新興ネットワークでは技術的および人的問題に対処するために自動化された命名システムが必要になりました。ポステルは、ポール・モッカペトリスに対し、5つの競合する解決策の妥協案をまとめる作業を指示しました。モッカペトリスは、南カリフォルニア大学在学中の1983年にドメインネームシステムを開発しました。[ 12 ] [ 17 ]
インターネットエンジニアリングタスクフォースは、 1983年11月にRFC 882とRFC 883で最初の仕様を公開しました。[ 18 ] [ 19 ]これらは1986年1月にRFC 973で更新されました。[ 20 ]
1984年、カリフォルニア大学バークレー校の学生4人、ダグラス・テリー、マーク・ペインター、デビッド・リグル、ソンニアン・ゾウが、バークレー・インターネット・ネーム・ドメイン(BIND)用の最初のUnixネーム・サーバ実装を作成しました。[ 21 ] 1985年、DECのケビン・ダンラップがDNS実装を大幅に改訂しました。その後、マイク・カレルズ、フィル・アルムキスト、ポール・ビクシーがBINDのメンテナンスを引き継ぎました。1994年、リック・アダムス、ポール・ビクシー、カール・マラマッドがBINDの開発とメンテナンスの拠点を提供することを目的としてインターネット・システムズ・コンソーシアム( ISC)を設立しました。4.9.3以降のBINDバージョンはISCのスポンサーのサポートを受けてISCが開発とメンテナンスを行いました。共同設計者/プログラマーとして、ボブ・ハリーとポール・ヴィクシーは1997年5月にBINDバージョン8の最初の製品版をリリースしました。2000年以降、43人以上のコア開発者がBINDの開発に携わってきました。[ 22 ]
1987年11月、RFC 1034 [ 23 ]とRFC 1035 [ 5 ]が1983年のDNS仕様に取って代わりました。その後も、いくつかの追加的なコメント要請(RFC)において、コアDNSプロトコルの拡張が提案されました。[ 24 ]
ドメイン名空間は木構造のデータ構造から構成されます。木構造の各ノード(葉)には、ラベルと、ドメイン名に関連する情報を保持する0個以上のリソースレコード(RR)が含まれます。ドメイン名自体は、ラベルと、その右側の親ノードの名前をドットで区切って連結したもので構成されます。[ 23 ] : §3.1
ツリーはルートゾーンから始まるゾーンに細分化されます。DNSゾーンは、ゾーンマネージャが選択した数のドメインとサブドメインで構成できます。DNSはクラスによって分割することもでき、個々のクラスは並列な名前空間ツリーの配列と考えることができます。[ 23 ] : §4.2

ゾーンの管理責任は、追加のゾーンを作成することによって分割することができます。新しいゾーンに対する権限は、指定されたネームサーバーに委任されます。親ゾーンは、新しいゾーンに対する権限を失います。[ 23 ] : §4.2
ドメイン名の形成規則の決定的な説明は、RFC 1035、RFC 1123、RFC 2181、および RFC 5892 に記載されています。ドメイン名は、技術的にはラベルと呼ばれる 1 つ以上の部分で構成され、通常、連結され、ドットで区切られます (example.com など)。
右端のラベルはトップレベルドメインを伝えます。たとえば、ドメイン名 www.example.com はトップレベルドメインcomに属します。
ドメインの階層は右から左へと下降し、左の各ラベルは右のドメインの下位区分、つまりサブドメインを表します。例えば、「example」というラベルはcomドメインのサブドメインを表し、「www」はexample.comのサブドメインを表します。この下位区分のツリーは最大127階層まで存在します。[ 25 ]
ラベルの長さは6ビットまでしか許可されていないため、ラベルには0~63文字まで含めることができます。長さ0のヌルラベルはルートゾーン用に予約されています。ドメイン名全体のテキスト表現は253文字(末尾のドットを含めると254文字)を超えてはなりません。[ 23 ] DNSの内部バイナリ表現では、この最大長253には255オクテットの記憶域が必要です。これは、多数のラベルのうち最初のラベルの長さと最後のヌルバイトを格納し、さらに255オクテットの記憶域を必要とするためです。[ 5 ] 255の長さは、少なくとも6つのラベル(最後のヌルラベルを含む)でのみ達成されます。[ 5 ]
ドメイン名ラベルにオクテットで表現可能な文字を使用することを禁じる技術的な制限はありませんが、ホスト名には推奨される形式と文字セットが使用されます。ラベルに使用できる文字はASCII文字セットのサブセットであり、文字aからz、AからZ、数字0から9、およびハイフンで構成されます。このルールはLDHルール(文字、数字、ハイフン)として知られています。ドメイン名は大文字と小文字を区別せずに解釈されます。[ 26 ]ラベルはハイフンで始まっても終わってもいけません。[ 27 ]追加のルールとして、トップレベルドメイン名はすべて数字であってはならないと規定されています。[ 27 ]
DNSで許可されているASCII文字セットの制限により、多くの言語の名前や単語をそのネイティブなアルファベットや文字で表現することができませんでした。これを可能にするため、ICANNはIDNA( Internationalizing Domain Names in Applications )システムを承認しました。このシステムにより、Webブラウザなどのユーザーアプリケーションは、Punycodeを使用してUnicode文字列を有効なDNS文字セットにマッピングします。2009年、ICANNは国際化ドメイン名の国コードトップレベルドメイン(ccTLD)の導入を承認しました。さらに、既存のトップレベルドメイン名(TLD)の多くのレジストリは、 RFC 5890、RFC 5891、RFC 5892、RFC 5893に準拠したIDNAシステムを採用しています。
ドメインネームシステムは、クライアントサーバーモデルを採用した分散データベースシステムによって維持されています。このデータベースのノードはネームサーバーです。各ドメインには、少なくとも1つの権威DNSサーバーがあり、そのドメインと、そのドメインに従属するすべてのドメインのネームサーバーに関する情報を公開します。階層の最上位にはルートネームサーバーがあり、 TLDを検索(解決)する際に問い合わせるサーバーです。
権威ネーム サーバーは、データのキャッシュのみを保持する別のネーム サーバーへのクエリを通じて取得される回答とは対照的に、ドメイン管理者などの元のソースまたは動的 DNS メソッドによって構成されたデータからの DNS クエリに対する回答のみを提供するネーム サーバーです。
権威ネームサーバーは、プライマリサーバーまたはセカンダリサーバーのいずれかになります。歴史的には、マスター/スレーブとプライマリ/セカンダリという用語は互換的に使用されることがありました[ 28 ]が、現在では後者の形式が使用されています。プライマリサーバーは、すべてのゾーンレコードのオリジナルコピーを保存するサーバーです。セカンダリサーバーは、プライマリサーバーと通信する際にDNSプロトコルの特別な自動更新メカニズムを使用し、プライマリレコードの同一コピーを維持します。
すべてのDNSゾーンには、権威ネームサーバーのセットを割り当てる必要があります。このサーバーセットは、ネームサーバー(NS)レコードとともに親ドメインゾーンに保存されます。
権威サーバーは、応答に「権威回答」(AA)ビットと呼ばれるプロトコルフラグを設定することで、決定的な回答を提供している(権威があるとみなされる)状態を示します。 [ 5 ]このフラグは通常、 digなどのDNS管理クエリツールの出力に目立つように再現され、応答しているネームサーバーが問題のドメイン名の権威であることを示します。 [ 5 ]
ネームサーバーが、権威データを持たないドメイン名の権威サーバーとして指定されると、「不完全な委任」または「不完全な応答」と呼ばれるタイプのエラーが発生します。[ 29 ] [ 30 ]
ドメイン名リゾルバは、右端 (トップレベル) のドメイン ラベルから始まる一連のクエリによって、問題のドメイン名を担当するドメイン ネーム サーバーを決定します。

ドメイン名リゾルバを適切に動作させるために、ネットワークホストにはルートネームサーバーの既知のアドレスの初期キャッシュ(ヒント)が設定されます。ヒントは、管理者が信頼できるソースからデータセットを取得することで定期的に更新されます。
リゾルバが処理を高速化するためのキャッシュレコードを持っていない場合、解決プロセスはルートサーバーの1つへのクエリから始まります。通常の動作では、ルートサーバーは直接応答せず、より権威のあるサーバーへの参照で応答します。例えば、「www.wikipedia.org」へのクエリは、orgサーバーに参照されます。リゾルバは参照先のサーバーにクエリを送信し、権威のある回答が得られるまでこのプロセスを繰り返します。図は、完全修飾ドメイン名「www.wikipedia.org」 で指定されたホストにおけるこのプロセスを示しています。
このメカニズムは、インターネット上のすべての解決がルートから始まる必要がある場合、ルートサーバーに大きなトラフィック負荷をかけることになります。実際には、DNSサーバーではキャッシュがルートサーバーの負荷を軽減するために使用されており、その結果、ルートネームサーバーが実際に関与するリクエストは全体のごく一部に過ぎません。
理論上は、権威ネームサーバーだけでインターネットの運用は可能です。しかし、権威ネームサーバーのみが稼働している場合、すべてのDNSクエリはドメインネームシステムのルートゾーンへの再帰クエリから開始する必要があり、各ユーザーシステムは再帰処理が可能なリゾルバソフトウェアを実装する必要があります。[ 31 ]
効率性の向上、インターネット上のDNSトラフィックの削減、そしてエンドユーザーアプリケーションのパフォーマンス向上のため、ドメインネームシステムはDNSキャッシュサーバーをサポートしています。DNSキャッシュサーバーは、DNSクエリ結果を、対象となるドメイン名レコードの設定(TTL)で定められた期間保存します。通常、このようなキャッシュDNSサーバーは、DNSルートからクエリ対象ドメインの権威ネームサーバーに至るまで、指定された名前を解決するために必要な再帰アルゴリズムも実装しています。ネームサーバーにこの機能を実装することで、ユーザーアプリケーションの設計と運用の効率が向上します。
ネーム サーバーでの DNS キャッシュと再帰機能の組み合わせは必須ではありません。これらの機能は、特別な目的のためにサーバー内で個別に実装できます。
インターネットサービスプロバイダー(ISP)は通常、顧客に再帰型ネームサーバーとキャッシュ型ネームサーバーを提供しています。さらに、多くの家庭用ネットワークルーターは、ローカルネットワークの効率を向上させるためにDNSキャッシュと再帰型ネームサーバーを実装しています。
DNSのクライアント側はDNSリゾルバと呼ばれます。リゾルバは、最終的に要求されたリソースの完全な解決(変換)(例えば、ドメイン名からIPアドレスへの変換)につながるクエリの開始と順序付けを担当します。DNSリゾルバは、再帰的、非再帰的、反復的など、さまざまなクエリ方法によって分類されます。解決プロセスでは、これらの方法を組み合わせて使用する場合があります。[ 23 ]
非再帰クエリでは、DNSリゾルバはDNSサーバーにクエリを実行し、そのサーバーが権限を持つレコードを提供するか、他のサーバーにクエリを実行せずに部分的な結果を提供します。キャッシュ型DNSリゾルバの場合、ローカルDNSキャッシュへの非再帰クエリによって結果が提供され、上流DNSサーバーからの最初の応答後、一定期間DNSリソースレコードがキャッシュされるため、上流DNSサーバーの負荷が軽減されます。
再帰クエリでは、DNS リゾルバが 1 つの DNS サーバーにクエリを実行し、次にそのサーバーが要求元に代わって他の DNS サーバーにクエリを実行する場合があります。たとえば、家庭用ルータで動作する単純なスタッブリゾルバは通常、ユーザーの ISP が稼働する DNS サーバーに再帰クエリを実行します。再帰クエリとは、DNS サーバーが必要に応じて他のネームサーバーにクエリを実行することでクエリに完全に応答するクエリです。一般的な操作では、クライアントがキャッシュ再帰 DNS サーバーに再帰クエリを発行し、その後、キャッシュ再帰 DNS サーバーは非再帰クエリを発行して応答を決定し、単一の応答をクライアントに返します。リゾルバ、またはリゾルバに代わって再帰的に動作する別の DNS サーバーは、クエリ ヘッダー内のビットを使用して再帰サービスの使用をネゴシエートします。DNS サーバーは再帰クエリをサポートする必要はありません。
反復クエリ手順とは、DNSリゾルバが1つ以上のDNSサーバーのチェーンに対してクエリを実行するプロセスです。各サーバーは、現在のサーバーが要求を完全に解決できるまで、クライアントをチェーン内の次のサーバーに照会します。例えば、www.example.comというドメイン名を解決する場合、グローバルルートサーバー、次に「com」サーバー、そして最後に「example.com」サーバーにクエリを実行します。
委任におけるネームサーバーは、IPアドレスではなく名前で識別されます。つまり、名前解決を行うネームサーバーは、参照先のサーバーのIPアドレスを確認するために、別のDNS要求を発行する必要があります。委任で指定された名前が、委任の対象ドメインのサブドメインである場合、循環依存関係が発生します。
この場合、委任を提供するネームサーバーは、委任に記載されている権威ネームサーバーのIPアドレスを1つ以上提供する必要があります。この情報はグルーと呼ばれます。委任元のネームサーバーは、DNS応答の追加セクションにレコードの形式でグルーを提供し、委任を応答の権威セクションに提供します。グルーレコードは、ネームサーバーとIPアドレスの組み合わせです。
例えば、 example.org の権威ネームサーバーが ns1.example.org である場合、www.example.org を解決しようとするコンピュータは、まず ns1.example.org を解決します。ns1 は example.org に含まれているため、まず example.org を解決する必要があり、循環依存関係が生じます。この依存関係を解消するために、トップレベルドメインorg のネームサーバーには、example.org の委任に加えて、グルーレコードが含まれています。グルーレコードは、ns1.example.org の IP アドレスを提供するアドレスレコードです。リゾルバーはこれらの IP アドレスの 1 つ以上を使用して、ドメインの権威サーバーの 1 つにクエリを実行し、DNS クエリを完了します。
DNSサーバーのクエリ負荷を軽減する一般的な方法は、名前解決の結果をローカルまたは中間リゾルバホストにキャッシュすることです。各DNSクエリ結果には、情報の有効期限(TTL)が付与されます。これは、情報が破棄または更新されるまでの有効期間を示します。このTTLは権威DNSサーバーの管理者によって決定され、数秒から数日、さらには数週間までの範囲となります。[ 32 ]
この分散キャッシュアーキテクチャの結果、DNS レコードへの変更はネットワーク全体に即座に伝播されず、すべてのキャッシュが TTL の経過後に期限切れになり、更新される必要があります。RFC 1912 では、適切な TTL 値を決定するための基本的なルールが規定されています。
一部のリゾルバはTTL値を上書きする場合があります。これは、プロトコルが最大68年間のキャッシュ、またはキャッシュを全く行わないことをサポートしているためです。ネガティブキャッシュ、つまりレコードが存在しないという事実をキャッシュするかどうかは、ゾーンの権限を持つネームサーバーによって決定されます。これらのネームサーバーは、要求されたタイプのデータが存在しないと報告する際に、SOA( Start of Authority )レコードを含める必要があります。SOAレコードの最小フィールドの値とSOA自体のTTLは、ネガティブ応答のTTLを確立するために使用されます。
逆DNSルックアップとは、IPアドレスが既知の場合に、DNSにドメイン名を問い合わせることです。1つのIPアドレスに複数のドメイン名が関連付けられる場合があります。DNSは、IPアドレスをドメイン名の形式で、インフラストラクチャトップレベルドメインarpa内のポインタ(PTR)レコードに特別な形式の名前として保存します。IPv4の場合、ドメインはin-addr.arpaです。IPv6の場合、逆ルックアップドメインはip6.arpaです。IPアドレスは、IPv4では逆順オクテット表現、IPv6では逆順ニブル表現で表されます。
逆引き検索を実行する際、DNSクライアントは、他のDNSクエリと同様に、委任チェーンに従ってPTRレコードを名前で照会する前に、アドレスをこれらの形式に変換します。例えば、IPv4アドレス208.80.152.2がWikimediaに割り当てられているとすると、これはDNS名として逆順に2.152.80.208.in-addr.arpaと表されます。DNSリゾルバがポインタ(PTR)要求を受け取ると、ルートサーバーへの照会を開始します。ルートサーバーは、 208.in-addr.arpaゾーンのAmerican Registry for Internet Numbers(ARIN)のサーバーを指します。ARINのサーバーは152.80.208.in-addr.arpaをWikimediaに委任し、リゾルバは2.152.80.208.in-addr.arpaに対する別のクエリをWikimediaに送信します。その結果、権威応答が返されます。

ユーザーは通常、DNSリゾルバと直接通信することはありません。DNS解決は、ウェブブラウザ、電子メールクライアント、その他のインターネットアプリケーションなどのアプリケーション内で透過的に行われます。アプリケーションがドメイン名の参照を必要とするリクエストを行うと、これらのプログラムはローカルオペレーティングシステム内のDNSリゾルバに解決要求を送信し、DNSリゾルバが必要な通信を処理します。
DNSリゾルバは、ほぼ常に最近の検索結果を含むキャッシュ(上記参照)を保持しています。キャッシュが要求への回答を提供できる場合、リゾルバはキャッシュ内の値を要求元のプログラムに返します。キャッシュに回答がない場合、リゾルバは指定された1つ以上のDNSサーバーに要求を送信します。ほとんどのホームユーザーの場合、通常、マシンが接続しているISPがこのDNSサーバーを提供します。そのようなユーザーは、サーバーのアドレスを手動で設定するか、DHCPによる設定を許可しています。しかし、システム管理者が独自のDNSサーバーを使用するようにシステムを設定している場合、DNSリゾルバは組織が別途管理するネームサーバーを参照します。いずれにせよ、このように問い合わせを受けたネームサーバーは、結果が見つかるか見つからないかのどちらかになるまで、上記で概説したプロセスに従います。その後、DNSリゾルバに結果を返します。結果が見つかった場合、リゾルバはその結果を将来使用するためにキャッシュし、要求を開始したソフトウェアに結果を返します。
大手ISPの中には、TTLを無視したり、ネームサーバーの1つが応答しないという理由だけでドメイン名が存在しないと表示したりするなど、ルールに違反するようにDNSサーバーを設定しているところもある。[ 33 ]
ウェブブラウザなどの一部のアプリケーションは、ネットワーク経由の重複参照を回避するために内部DNSキャッシュを保持しています。この方法は、DNSキャッシュの履歴が不明瞭になるため、DNSの問題のデバッグを困難にする可能性があります。これらのキャッシュは通常、1分程度と非常に短いキャッシュ時間で動作します。[ 34 ]
Internet Explorerは注目すべき例外です。IE 3.xまでのバージョンでは、DNSレコードがデフォルトで24時間キャッシュされます。Internet Explorer 4.x以降のバージョン(IE 8まで)では、デフォルトのタイムアウト値が30分に短縮されます。この値は、デフォルト設定を変更することで変更できます。[ 35 ]
Google Chrome はDNS サーバーの問題を検出する と、特定のエラー メッセージが表示されます。
ドメイン ネーム システムには、その他の機能や特徴もいくつか含まれています。
ホスト名とIPアドレスは1対1の関係で一致する必要はありません。複数のホスト名が1つのIPアドレスに対応する場合があり、これは単一のホストから複数のウェブサイトを提供する仮想ホスティングで役立ちます。また、単一のホスト名が複数のIPアドレスに解決されることで、企業内またはグローバルインターネット上の複数のサーバーインスタンスへの フォールトトレランスと負荷分散が容易になります。
DNSは、名前をIPアドレスに変換する以外にも様々な目的に使用されます。例えば、メール転送エージェント( MTA)は、電子メールを配信するのに最適なメールサーバーを見つけるためにDNSを使用します。MXレコードは、ドメインとメールエクスチェンジャー間のマッピングを提供します。これにより、フォールトトレランスと負荷分散のレイヤーを追加できます。
DNSは、ブロックリストに登録されたメールホストのIPアドレスを効率的に保存および配布するために使用されます。一般的な方法は、対象ホストのIPアドレスを上位レベルのドメイン名のサブドメインに配置し、その名前を肯定または否定を示すレコードに解決することです。
例えば:
メールサーバーは、blocklist.example にクエリを送信することで、接続してくる特定のホストがブロックリストに登録されているかどうかを確認できます。このようなブロックリストは、有料版と無料版の両方があり、メール管理者やスパム対策ソフトウェアで利用可能です。
コンピュータやネットワークの障害発生時に回復力を確保するため、通常、各ドメインをカバーする複数のDNSサーバーが提供されます。グローバルDNSの最上位レベルには、13のルートネームサーバーグループが存在し、それらの「コピー」がエニーキャストアドレスを介して世界中に分散されています。
ダイナミック DNS (DDNS) は、ISP またはモバイルホット スポット間を移動する場合や、IP アドレスが管理上変更される場合など に、クライアントの IP アドレスを使用して DNS サーバーをオンザフライで更新します。
DNSプロトコルは、クエリとレスポンスという2種類のDNSメッセージを使用します。どちらも同じフォーマットです。各メッセージは、ヘッダーと4つのセクション(質問、回答、権限、および追加のスペース)で構成されます。ヘッダーフィールド(フラグ)は、これらの4つのセクションの内容を制御します。[ 23 ]
ヘッダーセクションは、識別、フラグ、質問数、回答数、権限リソースレコード(RR)数、追加RR数というフィールドで構成されます。各フィールドは16ビット長で、指定された順序で出現します。識別フィールドは、応答とクエリを照合するために使用されます。フラグワードの後、ヘッダーは4つの16ビット整数で終わります。これらの整数には、後続の各セクションのレコード数が、同じ順序で格納されています。
| オフセット | オクテット | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| オクテット | 少し | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 0 | 0 | 取引ID | QR | オペコード | AA | TC | RD | RA | Z | 広告 | CD | Rコード | |||||||||||||||||||||
| 4 | 32 | 質問数 | 回答数 | ||||||||||||||||||||||||||||||
| 8 | 64 | 権限RRの数 | 追加RRの数 | ||||||||||||||||||||||||||||||
質問セクションは、他のセクションで使用されるリソースレコード形式よりもシンプルな形式です。各質問レコード(セクション内には通常1つだけ存在します)には、以下のフィールドが含まれます。
| 分野 | 説明 | 長さ(オクテット) |
|---|---|---|
| 名前 | 要求されたリソースの名前 | 変数 |
| タイプ | RR のタイプ (A、AAAA、MX、TXT など) | 2 |
| クラス | クラスコード | 2 |
ドメイン名は連結された個別のラベルに分割され、各ラベルの前にはそのラベルの長さが付けられます。[ 37 ]
ドメインネームシステムは、ネットワークリソースの情報要素のデータベースを指定します。情報要素の種類は、DNSレコードの種類のリスト、つまりリソースレコード(RR)に分類され、整理されます。各レコードには、種類(名前と番号)、有効期限(存続時間)、クラス、種類固有のデータが含まれます。同じ種類のリソースレコードは、特別な順序付けのないリソースレコードセット(RRset)として記述されます。DNSリゾルバはクエリ時にセット全体を返しますが、サーバーは負荷分散を実現するためにラウンドロビン方式を実装する場合があります。一方、ドメインネームシステムセキュリティ拡張機能(DNSSEC)は、リソースレコードの完全なセットを正規の順序で処理します。
インターネットプロトコルネットワーク経由で送信される場合、すべてのレコード(回答、権限、および追加セクション)は、RFC 1035で指定された共通フォーマットを使用します。[ 38 ]:§3
| 分野 | 説明 | 長さ(オクテット) |
|---|---|---|
| 名前 | このレコードが関連するノードの名前 | 変数 |
| タイプ | 数値形式のRRのタイプ(例:MX RRの場合は15) | 2 |
| クラス | クラスコード | 2 |
| TTL | RRの有効期間(秒数)(最大値は2 31 −1、約68年) | 4 |
| RDLENGTH | RDATAフィールドの長さ(オクテット単位で指定) | 2 |
| Rデータ | RR固有の追加データ | RDLENGTHに応じて可変 |
NAME は、ツリー内のノードの完全修飾ドメイン名です。伝送路上では、ラベル圧縮によって名前が短縮される場合があります。この場合、パケット内で先行するドメイン名の末尾が、現在のドメイン名の末尾に置き換えられます。
TYPEはレコードの種類です。データの形式を示し、その用途のヒントとなります。例えば、Aレコードはドメイン名をIPv4アドレスに変換するために使用され、NSレコードはDNSゾーンのルックアップに応答できるネームサーバーをリストし、MXレコードは電子メールアドレスで指定されたドメイン宛のメールを処理するために使用されるメールサーバーを指定します。
RDATAは、アドレスレコードのIPアドレスやMXレコードの優先度とホスト名など、タイプ固有の関連データです。既知のレコードタイプではRDATAフィールドでラベル圧縮を使用できますが、「不明」なレコードタイプでは使用してはなりません(RFC 3597)。
インターネットホスト名、サーバー、またはIPアドレスを含む一般的なDNSレコードの場合、レコードのCLASSはIN(インターネット)に設定されます。さらに、 Chaos(CH)とHesiod(HS)というクラスも存在します。[ 38 ]:11 各クラスは独立した名前空間であり、DNSゾーンの委任が異なる場合があります。
ゾーン ファイルで定義されたリソース レコードに加えて、ドメイン ネーム システムでは、ゾーン転送 (AXFR/IXFR) の実行時やEDNS (OPT)など、他の DNS ノード (ネットワーク上) との通信にのみ使用されるいくつかの要求タイプも定義します。
ドメインネームシステムは、アスタリスクラベルで始まる名前を指定するワイルドカード DNS レコードをサポートしています(例: )。[ 23 ] [ 39 ]ワイルドカードドメイン名に属する DNS レコードは、ラベル全体をクエリ名の一致するコンポーネント (指定された子孫を含む) に置き換えることによって、単一の DNS ゾーン内でリソースレコードを生成するためのルールを指定します。 たとえば、次の構成では、DNS ゾーンx.exampleは、サブドメインのサブドメインを含むx.exampleのすべてのサブドメインがメールエクスチェンジャ (MX) axexampleを使用することを指定します。メールエクスチェンジャの IP アドレスを指定するには、 axexampleの AAAA レコードが必要です。 この結果、このドメイン名とそのサブドメインがワイルドカードの一致から除外されるため、サブドメインaxexampleの追加の MX レコードと、そのすべてのサブドメインのワイルドカード化された MX レコードも、DNS ゾーンで定義する必要があります。 **.example
x.example. MX 10 a.x.example. *.x.example. MX 10 a.x.example. axexample. MX 10 a.x.example. *.axexample. MX 10 a.x.example. axexample. AAAA 2001:db8::1ワイルドカードレコードの役割はRFC 4592で洗練されました。これは、 RFC 1034の元の定義が不完全で、実装者による誤解を招いたためです。[ 39 ]
オリジナルのDNSプロトコルでは、新機能による拡張のための規定が限られていました。1999年、Paul VixieはRFC 2671(RFC 6891に置き換えられました)で、Extension Mechanisms for DNS (EDNS)と呼ばれる拡張メカニズムを公開しました。これは、未使用時のオーバーヘッドを増加させることなく、オプションのプロトコル要素を導入するものでした。これは、プロトコルの有線伝送にのみ存在し、ゾーンファイルには存在しないOPT疑似リソースレコードによって実現されました。UDPデータグラムにおけるDNSメッセージサイズの増加など、初期の拡張も提案されました(EDNS0)。
動的DNS更新は、UPDATE DNSオペコードを用いて、権威DNSサーバー上に維持されているゾーンデータベースにリソースレコードを動的に追加または削除します。[ 40 ]この機能は、ネットワーククライアントが起動時またはネットワーク上で利用可能になった際に、DNSに登録するのに役立ちます。起動中のクライアントにはDHCPサーバーから毎回異なるIPアドレスが割り当てられる可能性があるため、このようなクライアントに静的なDNS割り当てを提供することはできません。
DNSは1983年の誕生以来、 IP経由のトランスポートにユーザーデータグラムプロトコル(UDP)を使用してきました。その限界は、その後数十年にわたり、信頼性、セキュリティ、プライバシー、その他の基準を満たすための数多くのプロトコル開発の原動力となってきました。
UDP は、クエリをリッスンするサーバー用にポート番号 53 を予約しています。[ 5 ]このようなクエリは、クライアントから単一の UDP パケットで送信されるクリア テキストの要求と、サーバーからの単一の UDP パケットで送信されるクリア テキストの応答で構成されます。応答の長さが 512 バイトを超え、クライアントとサーバーの両方がDNS の拡張メカニズム(EDNS) をサポートしている場合は、より大きな UDP パケットを使用できます。[ 41 ] DNS over UDP の使用は、トランスポート層の暗号化、認証、信頼性の高い配信、メッセージ長の欠如などによって制限されます。1989 年に、RFC 1123 は、DNS クエリ、応答、特にゾーン転送用にオプションの伝送制御プロトコル(TCP) トランスポートを指定しました。長い応答を断片化することにより、TCP はより長い応答、信頼性の高い配信、およびクライアントとサーバー間の長時間接続の再利用を可能にします。
DNS over TLSは、2016年に暗号化DNSのIETF標準として登場し、トランスポート層セキュリティ(TLS)を利用してDNSペイロードだけでなく接続全体を保護します。DoTサーバーはTCPポート853でリッスンします。RFC 7858では、日和見暗号化と認証付き暗号化がサポートされる可能性があると規定されていますが、サーバー認証またはクライアント認証は必須ではありません。
DNS over HTTPSは、2018年にDNSクエリ転送の競合標準として開発されました。DNSクエリデータをHTTPS経由でトンネリングし、HTTP over TLSを転送します。DoHは、DNSCryptと同様にTCPポート443を使用するため、Webトラフィックと類似しているように見えることから、DNSよりもWebに適した代替手段として推奨されました。ただし、適切なパディングがなければ、実際には簡単に区別できます。[ 42 ]
2022年にインターネット技術特別調査委員会(IETF )によって公開されたRFC 9250では、 DNS over QUICについて説明されています。DNS over QUICは「DNS over TLS(DoT)と同様のプライバシー特性と、従来のDNS over UDPと同様の遅延特性」を備えています。この方式はDNS over HTTP/3とは異なります。[ 43 ]
Oblivious DNS(ODNS)は、プリンストン大学とシカゴ大学の研究者によって、暗号化されていないDNSの拡張として発明・実装されました[ 44 ]。これはDoHが標準化され広く導入される前のことでした。その後、AppleとCloudflareは、この技術をDoHの文脈でOblivious DoH(ODoH)として導入しました[ 45 ] 。ODoHは、ODNSで発明されたイングレス/エグレス分離と、DoHのHTTPSトンネリングおよびTLSトランスポート層暗号化を単一のプロトコルに統合しています[ 46 ] 。
DNSは仮想プライベートネットワーク(VPN)やトンネリングプロトコルを介して実行される場合があります。Oblivious DNSのプライバシー保護は、既存のTorネットワークの入口ノードと出口ノードを利用し、TLSによるトランスポート層暗号化と組み合わせることで実現されます。[ 47 ]
2011年にIETF標準フレームワークの外で開発されたDNSCryptプロトコルは、再帰リゾルバの下流側にDNS暗号化を導入しました。クライアントは、DNSで公開されている(サードパーティの証明機関に依存せずに)サーバーの公開鍵を使用してクエリペイロードを暗号化し、DNSSEC署名によって保護される可能性があります。[ 48 ] DNSCryptは、 HTTPSで暗号化されたWebトラフィックと同じTCPポート443、またはUDPポート443を使用します。これにより、クエリの内容に関するプライバシーが確保されるだけでなく、ファイアウォールを突破する能力も大幅に向上しました。2019年には、DNSCryptはさらに拡張され、「匿名化」モードをサポートするようになりました。これは、提案されている「Oblivious DNS」に類似しています。このモードでは、入口ノードが別のサーバーの公開鍵で暗号化されたクエリを受信し、そのサーバーに中継します。そのサーバーは出口ノードとして機能し、再帰解決を実行します。[ 49 ]入口ノードはクエリの内容を知らず、出口ノードはクライアントの身元を知らないため、ユーザー/クエリペアのプライバシーが確保されます。DNSCryptは、 2011年12月にOpenDNSによって初めて本番環境で実装されました。ODoHをさらに統合した無料のオープンソースソフトウェア実装がいくつかあります。[ 50 ] Unix、Apple iOS、Linux、Android、Windowsなど、さまざまなオペレーティングシステムで利用できます。
初期のインターネットは一般の人々が参加できるネットワークではなかったため、DNSソフトウェアや、初期のインターネットに導入されるソフトウェアにおいては、セキュリティ上の懸念は設計上の主要な考慮事項ではありませんでした。しかし、1990年代にインターネットが商業分野に拡大したことで、データの整合性とユーザー認証を保護するためのセキュリティ対策の要件は変化しました。
複数の脆弱性が発見され、悪意のあるユーザーによって悪用されました。その一つがDNSキャッシュポイズニングです。これは、権威あるオリジンサーバーを装ってキャッシュリゾルバーにデータを分散させ、データストアを潜在的に虚偽の情報や長い有効期限(TTL)で汚染するものです。その結果、正当なアプリケーションリクエストが悪意を持って運営されているネットワークホストにリダイレクトされる可能性があります。
DNS応答には従来、暗号署名がないため、多くの攻撃を受ける可能性があります。ドメインネームシステムセキュリティ拡張機能(DNSSEC)は、DNSを改良し、暗号署名された応答をサポートします。[ 51 ] DNSCurveはDNSSECの代替として提案されています。TSIGなどの他の拡張機能は、信頼できるピア間の暗号認証をサポートし、ゾーン転送や動的更新操作の承認によく使用されます。
前方確認逆 DNSなどの手法も、DNS 結果の検証に役立ちます。
DNS は、設定に注意を払わなければ、本来は安全またはプライベートな接続から「漏洩」する可能性があり、また、DNS は無害であると見なされることが多いため、悪意のある人物によってファイアウォールを回避し、データを盗み出すために使用されることもあります。
一部のドメイン名は、なりすまし効果を得るために利用されることがあります。例えば、paypal.comとpaypa1.comは異なる名前ですが、ユーザーが選択した書体によっては、グラフィカルユーザーインターフェースでそれらを区別できない場合があります。多くのフォントでは、文字「l」と数字「1」は非常によく似ており、場合によっては同一に見えることもあります。この問題はIDN同形異義語攻撃として知られており、国際化ドメイン名をサポートするシステムでは深刻です。ISO 10646の多くの文字コードは、一般的なコンピュータ画面では同一に見える可能性があるためです。この脆弱性は、フィッシングで悪用されることがあります。[ 52 ]
DNSMessenger [ 53 ] [ 54 ] [ 55 ] [ 56 ]は、従来のプロトコルに依存せず、DNSを利用してマルウェアと通信・遠隔制御を行うサイバー攻撃手法の一種です。DNSは主にドメイン名解決に利用されており、ネットワークセキュリティツールによる綿密な監視が行われていないことが多いため、DNSMessenger攻撃は巧妙に隠蔽され、攻撃者にとって効果的なチャネルとなっています。
この手法では、DNS TXTレコードを用いて感染システムにコマンドを送信します。マルウェアが被害者のマシンに密かにインストールされると、制御されたドメインにアクセスし、DNSテキストレコードにエンコードされたコマンドを取得します。この形式のマルウェア通信はステルス性が高く、DNSリクエストは通常ファイアウォールを通過できます。また、DNSトラフィックは無害と見なされることが多いため、これらの通信は多くのネットワークセキュリティ防御を回避できます。
DNSMessenger攻撃は、従来のネットワークセキュリティ対策の網を潜り抜けながら、データの窃取から追加ペイロードの配信まで、多岐にわたる悪意ある活動を可能にします。こうした手法を理解し、防御することは、強固なサイバーセキュリティを維持するために不可欠です。
DNSプロトコルは、もともと公開型、階層型、分散型、かつ大量のキャッシュを持つデータベースとして設計されており、機密性に関する制御機能を備えていません。ユーザーからのクエリとネームサーバーの応答は暗号化されずに送信されるため、ネットワークパケットスニッフィング、DNSハイジャック、DNSキャッシュポイズニング、中間者攻撃が可能になります。この欠陥は、サイバー犯罪者やネットワーク事業者によって、マーケティング目的、キャプティブポータルにおけるユーザー認証、そして検閲に悪用されることがよくあります。[ 57 ]
コンテンツ配信ネットワークの利益のために DNS クエリ内のクライアント IP 情報のレベルを上げる提案 (RFC 7871) により、ユーザーのプライバシーがさらに危険にさらされます。
DNS のプライバシー問題に対処するために使用されている主なアプローチは次のとおりです。
ローカルネットワークオペレータによるDNS検査を阻止するソリューションは、企業のネットワークセキュリティポリシーやインターネット検閲を阻害するとして批判されてきた。また、パブリックDNSサーバーは、DNS解決の制御をパブリックリゾルバを運用できる少数の大企業の手に委ねることで、インターネットの中央集権化を助長するとして批判されている。[ 57 ]
Googleは、 Androidのプラットフォーム、Chromeのブラウザ、そして8.8.8.8サービスのDNSリゾルバの主要プロバイダーです。このシナリオは、単一の企業がインターネットの名前空間全体を包括的に管理する立場にあるケースと言えるでしょうか? Netflixは すでに、アプリが稼働するプラットフォームとは独立した独自のDNS解決メカニズムを使用するアプリをリリースしています。もしFacebookアプリにDoHが組み込まれていたらどうなるでしょうか? AppleのiOSがDoH解決メカニズムを使用してローカルDNS解決をバイパスし、AppleプラットフォームからのすべてのDNSクエリをAppleが運営するネームリゾルバに誘導していたらどうなるでしょうか?
— DNSプライバシーとIETF
ドメイン名の使用権は、インターネットの名称と番号のシステムの監督を担う、インターネットネームアンドナンバーズ機構(ICANN)やOpenNICなどの組織から認定を受けたドメイン名登録機関によって委任されます。ICANNに加えて、各トップレベルドメイン(TLD)は、レジストリを運営する管理組織によって技術的に維持・管理されています。レジストリという用語はTLDを指すのが最も一般的ですが、レジストリは自身の権限ゾーン内の名前のデータベースを運用する責任を負っています。登録者とは、ドメイン登録を依頼した個人または組織です。[ 24 ] レジストリは、対応するゾーンで名前を割り当てる権限(認定)を持つ各ドメイン名登録機関から登録情報を受け取り、 WHOISプロトコルを使用して情報を公開します。2015年現在、RDAPの使用が検討されています。[ 58 ]
ICANNは、TLD、TLDレジストリ、およびドメイン名レジストラの完全なリストを公開しています。ドメイン名に関連付けられた登録者情報は、WHOISサービスでアクセスできるオンラインデータベースで管理されています。290を超える国別コードトップレベルドメイン(ccTLD)のほとんどについては、ドメインレジストリがWHOIS情報(登録者、ネームサーバー、有効期限など)を管理しています。例えば、ドイツのNICであるDENICは、DEドメインデータを保有しています。2001年頃から、ほとんどのジェネリックトップレベルドメイン(gTLD)レジストリは、いわゆるシックレジストリ方式を採用しています。つまり、WHOISデータをレジストラデータベースではなく中央レジストリに保管する方式です。
COMおよびNETのトップレベルドメインでは、シンレジストリモデルが採用されています。ドメインレジストリ(GoDaddy、BigRock、PDR、VeriSignなど)は、基本的なWHOISデータ(レジストラやネームサーバーなど)を保有しています。一方、組織(ORGを使用する登録者)は、Public Interest Registryのみに登録されます。
一部のドメイン名レジストリ(ネットワーク情報センター(NIC)と呼ばれることが多い)は、WHOISデータセットへのアクセスを提供することに加えて、エンドユーザーへのレジストラとしての機能も果たしています。COM、NET、ORGなどのドメインのトップレベルドメインレジストリは、多数のドメイン名レジストラからなるレジストリ・レジストラモデルを採用しています。[ 59 ]この管理方法では、レジストリはドメイン名データベースとレジストラとの関係のみを管理します。登録者(ドメイン名のユーザー)はレジストラの顧客であり、場合によっては再販業者への下請け契約を通じて顧客となることもあります。
{{cite web}}: CS1 maint: url-status (リンク)DoHトラフィックと暗号化されたWebトラフィックを区別できるかどうかを調査する。この目的のため、HTTPSトラフィックをWebまたはDoHに分類する機械学習モデルを訓練する。このDoH識別モデルを用いることで、権威主義的なISPはDoHパケットの約97.4%を正しく識別できる一方で、Webパケットの誤分類は10,000個中1個のみであることを示す。
over HTTPS(DoH)は多くのリスクを回避しますが、全てではありません。また、そのトランスポートプロトコル(HTTPS)は、例えば「Cookie」によるプライバシーの懸念を引き起こします。Torネットワークは、TCP回線に追跡、監視、ブロッキングからの自由を提供するために存在します。そこで、Tor、DoH、そしてリクエストフィンガープリンティングを軽減するための「Don't Do That, Then」(DDTT)の原則と組み合わせた、Tor経由のDNS over HTTPS(DoHoT)について説明します。
これらのRFCは本質的には助言的なものですが、標準やBCPを定義していないにもかかわらず、有用な情報を提供する可能性があります。[ 1 ]
これらの RFC の公式ステータスは「不明」ですが、古いため、そのように明確にラベル付けされていません。