序章

DNS、またはドメインネームシステムは、システムがインターネット上で通信するために相互に接続する方法の不可欠な部分です。 DNSがなければ、コンピューターとそれを使用する人々は、IPアドレスと呼ばれる数値アドレスのみを使用して接続する必要があります。

単純なタスクのために多数の複素数を覚えなければならないという明らかな問題に加えて、IPアドレスを介した通信もいくつかの追加の問題を引き起こします。 Webサイトを別のホスティングプロバイダーに移動したり、サーバーを別の場所に移動したりするには、すべてのクライアントに新しい場所を通知する必要があります。

DNSサーバーは、アドレスの代わりに名前を使用できるシステムを形成するコンピューターであり、さまざまな機能を提供できます。各機能は、名前でサーバーにアクセスする機能に貢献します。

前のガイドでは、ドメインネームシステムの基本的な用語と概念のいくつかについて説明しました。 その記事で取り上げられている概念にある程度精通していることを前提としています。 このガイドでは、さまざまなタイプのDNSサーバーのセットアップのいくつかと、それぞれの利点、使用例、およびプロパティについて説明します。

DNSクエリのパス

クライアントプログラムがドメイン名でサーバーにアクセスする場合、ドメイン名を通信に使用できる実際のルーティング可能なアドレスに変換する方法を見つける必要があります。 サーバーに情報を取得または送信するには、この情報を知っている必要があります。

ほとんどのWebブラウザを含む一部のアプリケーションは、最近のクエリの内部キャッシュを維持します。 これは、問題のドメインのIPアドレスを見つけるために、アプリケーションがこの機能を備えているかどうかを確認する最初の場所です。 ここで質問に対する答えが見つからない場合は、システムリゾルバーにドメイン名のアドレスを確認するように依頼します。

一般に、リゾルバーは、DNSクエリのクライアント側の参加者として機能するコンポーネントです。 システムリゾルバーは、オペレーティングシステムがDNSクエリの回答を探すために使用する解決ライブラリです。 一般に、システムリゾルバーは通常、スタブリゾルバーと見なされます。これは、システム上のいくつかの静的ファイルを検索する以外に、それほど複雑にすることができないためです( /etc/hosts ファイル)および別のリゾルバーへの要求の転送。

したがって、一般的に、クエリはクライアントアプリケーションからシステムリゾルバーに送信され、そこでアドレスを持つDNSサーバーに渡されます。 このDNSサーバーは再帰DNSサーバーと呼ばれます。 再帰サーバーは、質問に対する回答が見つかるまで他のDNSサーバーにクエリを実行するように構成されたDNSサーバーです。 回答またはエラーメッセージをクライアントに返します(この場合、システムリゾルバーは、クライアントアプリケーションに渡します)。

再帰サーバーは通常、キャッシュも維持します。 最初にこのキャッシュをチェックして、クエリに対する回答がすでにあるかどうかを確認します。 そうでない場合は、上位レベルドメインコンポーネントを制御するサーバーのいずれかにアドレスがあるかどうかを確認します。 したがって、リクエストが www.example.com キャッシュ内にそのホストアドレスが見つからない場合は、次のネームサーバーのアドレスがあるかどうかを確認します。 example.com 必要に応じて com. 次に、検索可能な最も特定のドメインコンポーネントのネームサーバーにクエリを送信して、詳細情報をクエリします。

これらのドメインコンポーネントのいずれにもアドレスが見つからない場合は、ルートネームサーバーにクエリを実行して、階層の最上位から開始する必要があります。 ルートサーバーは、ゾーンを制御するすべてのTLD(トップレベルドメイン)ネームサーバーのアドレスを知っています。 .com, .net, .org、など。 ルートサーバーに宛先のアドレスを知っているかどうかを尋ねます www.example.com. ルートサーバーは、再帰サーバーを次の名前サーバーに参照します。 .com TLD。

次に、再帰サーバーは、完全な回答を持つ特定のネームサーバーに焦点を合わせることができるまで、ドメインコンポーネントの責任を委任された連続する各ネームサーバーへの参照の軌跡をたどります。 この回答を後のクエリのためにキャッシュに入れてから、クライアントに返します。

この例からわかるように、サーバーにはさまざまな種類があり、それぞれが異なる役割を果たします。 さまざまなタイプのDNSサーバーの詳細を見ていきましょう。

機能の違い

DNSサーバー間の違いのいくつかは純粋に機能しています。 DNSの実装に関係するほとんどのサーバーは、特定の機能に特化しています。 選択するDNSサーバーの種類は、ニーズと解決したい問題の種類によって大きく異なります。

権限のある-DNSサーバーのみ

権限のみのDNSサーバーは、担当するゾーンのクエリへの応答のみに関係するサーバーです。 外部ゾーンのクエリの解決には役立たないため、通常は非常に高速で、多くのリクエストを効率的に処理できます。

権限のみのサーバーには、次のプロパティがあります。

  • 制御するゾーンのクエリへの応答が非常に高速です。権限のある専用サーバーには、担当するドメインに関するすべての情報、または委任されたドメイン内のゾーンの参照情報があります。他のネームサーバー。
  • 再帰クエリに応答しません。権限のみのサーバーの定義そのものは、再帰リクエストを処理しないサーバーです。 これにより、サーバーのみになり、DNSシステムのクライアントにはなりません。 権限のあるサーバーに到達するリクエストは、通常、そのサーバーへの紹介を受け取ったリゾルバーから送信されます。つまり、権限のあるサーバーは完全な回答を持っているか、新しい紹介をネームサーバーに渡すことができます。責任を委任したこと。
  • クエリ結果をキャッシュしません。権限のある専用サーバーは、要求を解決するための情報を他のサーバーにクエリすることはないため、結果をキャッシュする機会はありません。 それが知っているすべての情報はすでにそのシステムにあります。

DNSサーバーのキャッシュ

キャッシングDNSサーバーは、クライアントからの再帰的な要求を処理するサーバーです。 オペレーティングシステムのスタブリゾルバーが接続するほとんどすべてのDNSサーバーは、キャッシングDNSサーバーになります。

キャッシングサーバーには、クライアントからの再帰的な要求に応答するという利点があります。 権限のみのサーバーは特定のゾーン情報を提供するのに理想的かもしれませんが、DNSサーバーのキャッシュはクライアントの観点からより広く役立ちます。 それらは、世界のDNSシステムをかなり馬鹿げたクライアントインターフェースにアクセスできるようにします。

再帰的な要求を受信するたびに他のDNSサーバーに複数の反復要求を発行するというパフォーマンスの低下を回避するために、サーバーはその結果をキャッシュします。 これにより、最近の要求を非常に迅速に処理しながら、幅広いDNS情報(全世界で公的にアクセス可能なDNS)にアクセスできます。

キャッシングDNSサーバーには、次のプロパティがあります。

  • パブリックDNSデータの全範囲へのアクセス。グローバル委任ツリーにフックされたパブリックアクセス可能なDNSサーバーによって提供されるすべてのゾーンデータは、キャッシングDNSサーバーによって到達できます。 ルートDNSサーバーを認識しており、データを受信するときに参照をインテリジェントに追跡できます。
  • ダムクライアントにデータをスプーンフィードする機能。ほとんどすべての最新のオペレーティングシステムは、スタブリゾルバーを使用してDNS解決を専用の再帰サーバーにオフロードします。 これらの解決ライブラリは、再帰的な要求を発行するだけで、完全な回答が返されることを期待しています。 キャッシングDNSサーバーには、これらのクライアントにサービスを提供するための正確な機能があります。 これらのサーバーは、再帰クエリを受け入れることにより、応答またはDNSエラーメッセージのいずれかを返すことを約束します。
  • 最近要求されたデータのキャッシュを維持します。クライアント要求のために他のDNSサーバーから結果を収集するときに結果をキャッシュすることにより、キャッシュDNSサーバーは最近のDNSデータのキャッシュを構築します。 サーバーを使用するクライアントの数、キャッシュの大きさ、およびDNSレコード自体のTTLデータの長さに応じて、ほとんどの場合、これによりDNS解決が大幅に高速化されます。

DNSサーバーの転送

クライアントマシン用のキャッシュを開発する別の方法は、転送DNSサーバーを使用することです。 このアプローチでは、再帰機能を備えた別のDNSサーバー(キャッシュDNSサーバーなど)にすべての要求を渡すだけの転送サーバーを実装することにより、DNS解決のチェーンに追加のリンクを追加します。

このシステムの利点は、再帰的な作業を行う必要がなく、ローカルでアクセス可能なキャッシュの利点を提供できることです(これにより、追加のネットワークトラフィックが発生し、トラフィックの多いサーバーで大量のリソースを消費する可能性があります)。 これは、異なるサーバーに転送することにより、プライベートトラフィックとパブリックトラフィックを分割する際の興味深い柔軟性にもつながる可能性があります。

転送DNSサーバーには次のプロパティがあります。

  • 再帰自体を実行せずに再帰要求を処理する機能。転送DNSサーバーの最も基本的な特性は、解決のために要求を別のエージェントに渡すことです。 転送サーバーは最小限のリソースしか持たず、キャッシュを活用することで大きな価値を提供できます。
  • より近いネットワークロケーションにローカルキャッシュを提供します。特に、本格的な再帰DNSソリューションの構築、保守、およびセキュリティ保護に慣れていない場合、転送サーバーはパブリック再帰DNSサーバーを使用できます。 プライマリキャッシングの場所をクライアントマシンの非常に近くに移動しながら、これらのサーバーを活用できます。 これにより、応答時間を短縮できます。
  • ローカルドメインスペースを定義する際の柔軟性が向上します。リクエストを条件付きで異なるサーバーに渡すことにより、転送サーバーは、外部リクエストがパブリックDNSを使用している間、内部リクエストがプライベートサーバーによって処理されるようにします。

コンビネーションソリューション

上記のソリューションは非常に特定の目的を念頭に置いて構築されていますが、それぞれの利点を組み合わせるようにDNSサーバーを設定することが望ましい場合がよくあります。

DNSサーバーは、他のクライアントからの反復的で信頼できる要求にのみ応答しながら、選択した数のローカルクライアントの再帰的なキャッシュサーバーとして機能するように構成できます。 これは、ドメインのグローバルリクエストに応答できると同時に、ローカルクライアントがサーバーを利用して再帰的に解決できるため、一般的な構成です。

特定のDNSソフトウェアは、1つの特定の役割を果たすように特別に設計されていますが、Bindのようなアプリケーションは非常に柔軟性があり、ハイブリッドソリューションとして使用できます。 単一のサーバーで提供しようとするサービスが多すぎるとパフォーマンスが低下する場合がありますが、多くの場合、特に小規模なインフラストラクチャの場合は、単一のオールインワンソリューションを維持するのが最も理にかなっています。

関係の違い

DNSサーバー構成間の最も明らかな違いはおそらく機能的ですが、関係の違いも非常に重要です。

プライマリサーバーとセカンダリサーバー

サービスとネットワーク全体にアクセスできるようにするためのDNSの重要性を考えると、ゾーンに対して権限を持つほとんどのDNSサーバーには冗長性が組み込まれています。 これらのサーバー間の関係にはさまざまな用語がありますが、通常、サーバーはその構成でプライマリまたはセカンダリのいずれかになります。

プライマリサーバーとセカンダリサーバーの両方が、それらが処理するゾーンに対して権限があります。 プライマリは、セカンダリよりもゾーンに対して電力を持っていません。 プライマリサーバーとセカンダリサーバーの唯一の違いは、ゾーンファイルをどこから読み取るかです。

プライマリサーバーは、システムのディスク上のファイルからゾーンファイルを読み取ります。 これらは通常、ゾーン管理者が元のゾーンファイルを追加、編集、または転送する場所です。

セカンダリサーバーは、ゾーンのプライマリサーバーの1つからのゾーン転送を介して、権限のあるゾーンを受信します。 これらのゾーンを取得すると、それらをキャッシュに配置します。 再起動する必要がある場合は、最初にキャッシュをチェックして、内部のゾーンが最新であるかどうかを確認します。 そうでない場合は、プライマリサーバーに更新された情報を要求します。

サーバーは、サーバーが処理するすべてのゾーンのプライマリまたはセカンダリとしてのみ委任されるわけではありません。 プライマリまたはセカンダリステータスはゾーンごとに割り当てられるため、サーバーは一部のゾーンではプライマリになり、他のゾーンではセカンダリになることができます。

DNSゾーンには通常、少なくとも2つのネームサーバーがあります。 インターネットルーティング可能ゾーンを担当するゾーンには、少なくとも2つのネームサーバーが必要です。 多くの場合、負荷を分散して冗長性を高めるために、さらに多くのネームサーバーが維持されます。

パブリックサーバーとプライベートサーバー

多くの場合、組織は外部と内部の両方でDNSを使用します。 ただし、これらの両方の領域で利用できるようにする必要がある情報は、多くの場合、大幅に異なります。

組織は、外部で利用可能な権限のみのDNSサーバーを維持して、処理するドメインとゾーンのパブリックDNSクエリを処理する場合があります。 内部ユーザーの場合、組織は、パブリックDNSが提供する信頼できる情報と、内部ホストおよびサービスに関する追加情報を含む別のDNSサーバーを使用する場合があります。 また、内部クライアントの再帰やキャッシュなどの追加機能を提供する場合もあります。

上記の「組み合わせ」サーバーでこれらすべてのタスクを単一のサーバーで処理できることについて説明しましたが、ワークロードを分割することには明確な利点があります。 実際、相互に知識のない完全に分離されたサーバー(内部サーバーと外部サーバー)を維持することが望ましい場合がよくあります。 セキュリティの観点から、パブリックサーバーにプライベートサーバーの記録がないことが特に重要です。 これは、パブリックゾーンファイルにNSレコードを含むプライベートネームサーバーをリストしないことを意味します。

覚えておくべきいくつかの追加の考慮事項があります。 パブリックサーバーとプライベートサーバーで、従来のプライマリとセカンダリの関係で共通しているゾーンデータを共有する方が簡単な場合もありますが、これにより、プライベートインフラストラクチャに関する情報が漏洩する可能性があります。

プライベートサーバー自体をゾーンファイル(基本的にはパブリックに検索可能なエンティティ)から除外するだけでなく、通常、パブリックサーバーの構成ファイル内のプライベートサーバーへの参照も削除することをお勧めします。 これは、転送、通知、およびプライマリ構成の詳細を削除して、パブリックサーバーの侵害が、内部のネームサーバーが突然公開されることを意味しないようにすることを意味します。

これは、それぞれに個別のゾーンファイルを維持することを意味し、余分な作業になる可能性があります。 ただし、これは絶対的な分離とセキュリティのために必要な場合があります。

結論

この段階で、DNS構成の選択にかなりの柔軟性があることをおそらくご存知でしょう。

どちらを選択するかは、組織のニーズと、選択したクライアントに高速のDNS解決を提供すること(キャッシュまたは転送)を最優先するか、ドメインとゾーンをインターネット全体に提供すること(権限のあるサーバー)を最優先するかによって大きく異なります。 組み合わせアプローチは一般的であり、最終的には、解決プロセスの両側を考慮する必要があります。

次のガイドでは、これらの構成のいくつかを開始する方法を示します。 まず、キャッシュサーバーまたは転送サーバーの設定方法を説明します。 後で、権限のある専用DNSサーバーのペアをセットアップすることにより、ドメインにサービスを提供する方法について説明します。