😶‍🌫️

理解しておくべきDNSの基礎知識🧐

に公開

はじめに

近々、AWS Route53 へのドメイン移管を検討しているのですが、調べれば調べるほど、よくわからない用語が飛び交って混乱してきました。

移管する前の基礎的な知識を学ぶために、DNS の仕組みを整理してみました。

ドメインの階層構造

まずは、ドメインの階層構造を理解します。

例えば、www.example.comというドメインの場合、右から順に以下のように分割できます。

  • .:ルートドメイン(通常は省略されている)
  • com:トップレベルドメイン(TLD)
  • example:セカンドレベルドメイン
  • www:ホスト名

ドメインは右側から順に管理責任が委譲されます。ルートドメインTLDセカンドレベルドメイン と、それぞれ異なる組織が管理しています。

DNS名前解決に関わるサーバー

スタブリゾルバ

デバイス上で動作する DNSクライアント です。
ブラウザなどのアプリケーションがドメイン名にアクセスしようとすると、この スタブリゾルバ が起動します。

ブラウザから「このドメインの IPアドレス が知りたい」という DNS 要求を受け取ると、自身のキャッシュを確認します。キャッシュになければ、フルサービスリゾルバ に問い合わせを転送し、受け取った結果をブラウザに返します。スタブリゾルバ は自分で名前解決を行うのではなく、すべて フルサービスリゾルバ に任せる 再帰問い合わせ を行います。

再帰問い合わせ とは

「答えが見つかるまで全部調べてきて、最終的な答えだけを教えて」という問い合わせ方式です。
スタブリゾルバ は「example.comの IPアドレス を教えて」と フルサービスリゾルバ に依頼すると、フルサービスリゾルバ が必要なすべての調査を代行し、最終的な答えだけを返してくれます。

フルサービスリゾルバ

スタブリゾルバ からの 再帰問い合わせ を受け付け、実際に名前解決を実行するサーバーです。
リカーシブリゾルバキャッシュDNSサーバー とも呼ばれます。

スタブリゾルバ から問い合わせを受けると、フルサービスリゾルバ は ルートネームサーバー から順に、TLDネームサーバーネームサーバー へと 非再帰問い合わせ を繰り返し、最終的な IPアドレス 情報を取得します。

非再帰問い合わせ とは

非再帰問い合わせとは、問い合わせ先の DNSサーバー が自分の知っている範囲の情報だけを返す方式です。つまり、「自分が答えを持っていれば返すけれど、持っていなければ、次に聞くべき DNSサーバー を教えるだけ」という仕組みです。
また、この非再帰問い合わせを繰り返すことを 反復問い合わせ と呼びます。

権威サーバー

権威サーバー は、特定の ドメイン や ゾーン に関する正式な DNS 情報を保持し、それを外部に提供するサーバーです。

権威サーバー は、非再帰問い合わせ にのみ応答します。
フルサービスリゾルバ から「example.comの IPアドレス を教えて」と問い合わせを受けた場合、自分がその ゾーン(例: example.com)を管理していれば、DNSレコード に基づいた正確な答えを返します。
しかし、自分の管理範囲外の ドメイン については答えを返さず、「次に問い合わせるべきサーバーの情報(委任情報)」を返すことがあります。

権威サーバーの階層構造

DNS の名前空間が階層構造を持つのと同様に、権威サーバー も階層的に配置されています。
上位のサーバーが下位の ゾーン の管理を委譲することで、全体の分散管理が実現されています。

ルートネームサーバー

DNS 階層の最上位に位置する 権威サーバー です。
.(ルートゾーン)」を管理しており、すべてのトップレベルドメインサーバーの所在情報(NSレコード) を保持しています。

ルートネームサーバー は「.comのIPアドレスは?」というような質問には直接答えず、「.comを管理している TLDネームサーバー はこちら」という委任情報を返します。

TLDネームサーバー

.com.jp.netなど、特定の トップレベルドメイン を管理する権威サーバーです。
各 TLDネームサーバー は、配下のセカンドレベルドメインに関する 権威サーバーの場所(NSレコード) を保持しています。

TLDネームサーバー も ルートネームサーバー と同様に、問い合わせに対して最終的な答えを返すのではなく、
「その ドメイン を管理している ネームサーバー はこちら」という委任情報を返します。

ネームサーバー

ネームサーバーは、特定のドメイン(例:example.com)に関する 正式な DNSレコード を保持し、最終的な答えを返すサーバーです。

DNSレコード

ネームサーバー は、ドメイン に関する正式な情報を ゾーンファイル という形で保持しています。
ゾーンファイル には、名前解決やメール配送、サブドメイン の委任などに必要な複数の レコード が定義されています。

ここでは、特によく使われる主要な レコード をまとめます。

レコード種別 名称 詳細
SOA Start of Authority ゾーンの基本的な情報。管理者情報やゾーン更新ルールを定義する。
NS Name Server そのゾーンを管理するネームサーバーのホスト名を示す。
A Address ドメイン名(ホスト名)を IPv4アドレス に対応づける。
AAAA Quad-A ドメイン名(ホスト名)を IPv6アドレス に対応づける。
CNAME Canonical Name 特定のドメイン名を別の正規のドメイン名に紐づける。同じホスト名にAレコード・MXレコードなど他のタイプのレコードの併記や、ルートドメインには使えない。
MX Mail Exchanger 特定のドメイン宛てのメールをどのメールサーバーで受け取るかを指定する。
TXT Text ドメイン名に対して自由な文字列情報を登録できる(SPF、DKIM、DMARC、サービス検証など)。

TTL とは

各 DNSレコード には TTL を設定することができます。
TTL は、フルサービスリゾルバ がレコードの結果を キャッシュする期間(秒単位) を指定する値です。

TTL が切れるまでは、キャッシュを使って回答するため、レコードを変更しても即座には反映されません。そのため、ドメイン移管や IPアドレス 変更の前に TTL を短くしておくと、変更の反映がスムーズになります。

まとめ

今回は、DNS に関しての基本的な知識を自分なりにまとめてみました。

サーバーの部分に関しては、人によって命名が違う場合があり、どれが正しいのかわからず困りました。そのため、正確には違う部分もあるかも知れませんが、その場合はぜひご指摘していただきたいです。

ドメイン移管の際には、また記事を書こうと思います。

ユニフォームネクスト株式会社

Discussion