【Network】DNS とは?DNS 名前解決の基本知識について

DNS

DNS(Domain Name System)は、ドメイン名やホスト名から IP アドレスの対応関係を管理するシステムのことです。

IP ネットワークにおいては、コンピューターやネットワークに IP アドレスを割り当てて識別しています。IP アドレスは数字の列であるため、人間は覚えにくく、ネットワークを通してアクセスする端末やサーバーの IP アドレスを把握しておくのは難しいです。

DNS を利用すると、人間が覚えやすい文字や記号を組み合わせた名前をサーバーや端末につけて管理することができます。DNS では名前と IP アドレスの対応関係を管理しています。ユーザー(人間)は、サーバーや端末の名前を指定してアクセスすると、DNS の仕組みにより、その名前に対応した IP アドレスが解決されます。

今回は、DNS の名前解決の基本的な仕組みについて紹介します。

 

名前解決とは

IP ネットワークにおいて、各端末の識別は IP アドレスを割り当てられています。IP ネットワークで端末間で通信を行うには、通信先の IP アドレスを指定する必要があります。

しかしながら、IP アドレスは数値の列(192.168.4.51 等)であるため、ユーザーが端末ごとに IP アドレスを記憶しておくのは難しいです。そのため、一般的には、人間でも覚えやすい「名前」で接続先を指定します。ただし、コンピューターには「名前」は理解できないため、名前に紐づく IP アドレスが確認する必要があります。ホスト名から IP アドレスに変換することを「名前解決」と呼びます。名前解決の仕組みにより、ユーザーはブラウザに www.google.com という名前を指定すると、www.google.com は IP アドレスに変換されて、Google のサイトにアクセスすることができます。

名前解決の仕組みには、ブロードキャストを使用する NetBIOS、マルチキャストを使用する LLMNR なども存在します。ただし、一般的には、ネットワークを超えて利用できる DNS(Domain Name System)の仕組みが広く利用されています。

 

ドメイン名前空間

DNS で管理される名前は、ツリーで表現される階層構造となっています。ルートを頂点として、インターネットに接続している機器に割り当てられたドメイン名、ホスト名を管理している構造のことを「ドメイン名前空間」と呼びます。

ドメイン名前空間では、ルートを頂点とした階層構造となっており、ルートの直下の階層は「トップレベル ドメイン」、その下の階層が「セカンドレベル ドメイン」です。

 

トップレベル ドメインは、大きく分けて「gTLD (Generic Top Level Domain)」と「ccTLD (Country Code Top Level Domain)」の2種類があります。

 

gTLD (Generic Top Level Domain)
領域・分野ごとに割り当てられたトップレベル ドメインで、国などの地理的な制限なしに世界のどこからでも登録できます。

「.com」や「.net」「.org」などのドメインが gTLD が該当します。
gTLD にはセカンドレベル ドメインはなく、gTLD 自体がドメインの属性を保持しています。

ccTLD (Country Code Top Level Domain)
国ごとに割り当てられているカントリ・コードを基本にしたトップレベルドメインです。

「.jp」や「.us」などのドメインが ccTLD が該当します。

 

ルートの DNS サーバーは、インターネットで利用される DNS において、ツリー構造の起点となるサーバーです。ルート サーバーのルート ゾーンには、com、org、jp、arpa などのトップ レベル ドメインの参照情報が書かれています。

上記のように、ルートの DNS サーバーの名前と IP アドレスが記載されています。ルートサーバを運用している組織は世界中で12 つあり、VeriSign 社が 2 つのサーバを運用しているため、全部で 13 つのサーバがルート サーバーとしてDNS に登録されています。

 

ドメインとゾーン

DNS には、ドメインとゾーンという概念があります。ドメイン名前空間は階層構造になっており、特定の 1 階層及びその下の階層全体を表す言葉が「ドメイン」であり、特定の 1 階層のみを表現する言葉を「ゾーン」と呼びます。

 

 

 

ドメイン
ドメインとは、所属グループのことで、あるノードから下の名前空間全体を指します。
例えば、前スライドの jp ドメインは、ドメイン名に jp と付くすべてのドメインを包含しており、yahoo.co.jp も contoso.co.jp も jp ドメインの一部となります。

 

ゾーン
ゾーンとは、ネームサーバが名前解決できる範囲を指します。
ドメイン ツリーでいえば、あるノードから次のノードの間、あるいは接続ホストを持つノード以下の部分がゾーンとなります。

 

リソース レコード

DNS サーバー(ネームサーバー)では、ゾーンで管理している端末を名前解決するために、様々な種類のリソース レコードでゾーンの情報を管理しています。

A レコード

A レコードは、ホスト名に対応した IP アドレスを指定するリソース レコードです。同じホスト名に対して、複数の A レコードを作成して、複数の IP アドレスと対応付けすることができます。DNS サーバーにて、ホスト名から IP アドレスを問い合わせるクエリを処理する時は、A レコードを参照します。

 

CNAME レコード

CNAME レコードは、別名に対応した正式なホスト名を指定するリソース レコードです。端末にホスト名とは別の名前を付けて、ユーザーにアクセスさせたいなどのシナリオにおいて利用されます。例えば、server01 というホスト名のサーバーを、社内の Web サーバーとして利用することになった場合に、www という別名をつけることで、ユーザーがわかりやすい名前でアクセスできるように構成できるようになります。CNAME レコードを作成するときは、正式なホスト名の A レコードと紐づけます。

 

PTR レコード

PTR レコードは、IP アドレスに対応したホスト名を指定するリソース レコードです。DNS サーバーにて、IP アドレスからホスト名を逆引きで名前解決するクエリを処理する時に、PTR レコードを参照します。PTR レコードは、逆引き用のゾーン(in-addr.arpa)で管理されます。

 

NS レコード

NS レコードは、あるゾーンの権威のある DNS サーバーを指定するリソース レコードです。NS レコードはゾーンを委任する際に利用されます。ゾーンに対して複数の DNS サーバーがある場合は、その数だけ NS レコードを登録します。

 

SOA レコード

ゾーンの起点を示すリソース レコードで、ゾーンの管理情報を指定するためのリソース レコードです。SOA レコードは 1 つのゾーンに対して 1 つのみ記述されます。SOA レコードには、プライマリ ゾーンを保持しているサーバーやゾーンのバージョン情報、ゾーンの更新や有効期限の設定など、ゾーンに関する様々な情報が保持されています。

 

DNS 名前解決の構成要素

DNS の名前解決の仕組みを理解するにあたって、DNS 名前解決の構成要素を示す用語を紹介します。

 

スタブ リゾルバ
名前解決をするために DNS リクエストを送信するクライアントのことです。

 

フル サービス リゾルバ (キャッシュ サーバー)
スタブ リゾルバから送信されてくる再帰クエリを受け、名前解決が完了するまで、それぞれの名前について、他のネームサーバーに反復クエリで問い合わせを行う DNS サーバーのことです。最終的な名前解決の結果はスタブリゾルバに応答します。他のネームサーバーに同じ名前の解決を何度も繰り返すことがないように、一度名前解決したドメイン名を内部にキャッシュして再利用することから「キャッシュ サーバー」とも呼ばれます。

 

コンテンツ サーバー
管理しているゾーンに対する問い合わせのみ回答する DNS サーバーのことです。
自身の DNS のデータベースの情報に該当する情報がなく、名前解決ができない場合、他のネームサーバーへ問い合わせすることはせずに、そのまま「情報はない」と回答します。

 

再帰クエリと反復クエリ

DNS 名前解決のクエリには、「再帰クエリ」と「反復クエリ(非再帰クエリ)」の2種類があります。再帰クエリと反復クエリの違いは、名前解決の最終的な責任を負う DNS サーバーとなるかどうかという点が異なります。

再帰クエリ
最終的な名前解決の結果の回答を依頼するクエリです。
DNS サーバーが再帰クエリを受け取った場合、自身のデータベース上に情報があれば、その結果を返します。もし、自身のデータベースに情報がなかった場合は、他の DNS サーバーへ問い合わせを行って名前解決を試み、その結果を返します。再帰クエリを受け取った DNS サーバーは、名前解決の最終的な結果を応答する責任があります。

 

反復クエリ(非再帰クエリ)
名前解決できるかを確認するクエリです。
DNS サーバーが再帰クエリを受け取った場合、自身のデータベース上に情報があれば、その結果を返します。もし、自身のデータベースに情報がなかった場合は、他の DNS サーバーの情報(NS レコード)を返します。反復クエリを受け取った DNS サーバーは、必ずしも、失敗や成功の結果を応答する責任はなく、名前解決できない場合に他の ND サーバーへ問い合わせすることはありません。

 

一般的な DNS 名前解決のフロー

一般的な DNS の名前解決のフローについて紹介します。

名前解決のフローの説明にあたって、今回は、クライアントがブラウザで www.google.com のサイトにアクセスするシナリオを考えます。クライアントは www.google.com の IP アドレスがわからないため、DNS キャッシュ サーバーに対して名前解決を試みます。

 

  1. クライアント(スタブ リゾルバ)は、DNS サーバーに www.google.com の名前解決を再帰クエリで問い合わせをします。再帰クエリを受け取った DNS キャッシュ サーバー(フル サービス リゾルバ)は、www.google.com の名前解決に責任を持ち、最終的な結果をクライアントに応答する必要があります。
  2. www.google.com の名前解決の再帰クエリを受け取った DNS キャッシュ サーバーは、まず自身の DNS データベースを確認し、www.goolge.com の名前解決ができるか確認します。今回は、自身のデータベースで www.google.com の名前解決ができませんでした。ルート ドメインの DNS サーバーに対して、www.google.com の名前解決を反復クエリで問い合わせをします。
  3. www.google.com の名前解決の反復クエリを受け取った DNS サーバーは、まずは自身の DNS データベースを確認し、www.google.com の名前解決ができるか確認します。自身のデータベースで www.google.com の名前解決ができませんでした。ルート ドメインの DNS サーバーは、com の DNS サーバーの NS レコードの情報を DNS キャッシュ サーバーへ応答します。
  4. comドメインの DNS サーバーに対して、www.google.com の名前解決を反復クエリで問い合わせをします。
  5. www.google.com の名前解決の反復クエリを受け取った DNS サーバーは、まずは自身の DNS データベースを確認し、www.google.com の名前解決ができるか確認します。自身のデータベースで www.google.com の名前解決ができませんでした。DNS サーバーは、google.com の DNS サーバーの NS レコードの情報を DNS キャッシュ サーバーへ応答します。
  6. google.comドメインの DNS サーバーに対して、www.google.com の名前解決を反復クエリで問い合わせをします。
  7. www.google.com の名前解決の反復クエリを受け取った DNS サーバーは、まずは自身の DNS データベースを確認します。www の A レコードが管理されていたため、名前解決の結果を返します。www.google.com の IP アドレスは 10.56.62.160 です。
  8. www.google.com の結果として、IP アドレス 10.56.62.160 の結果をクライアントに返します。
  9. クライアントは www.google.com のアクセスのために 10.56.62.160 へ通信します。

 

スタブ リゾルバや DNS キャッシュ サーバーは、名前解決の結果のキャッシュを保持し、同じ名前の名前解決を繰り返し行わない動作となります。