あきろぐ

いろいろめもするよ

DNSの仕組みについてまとめてみた

最近、mochikoさんの「DNSをはじめよう」を読破したので、私なりにDNSについてまとめてみる。

 

DNSとは?

正式名称は、Domain Name System。

 名前解決する仕組みのこと。

「このホスト名のIPアドレスなんだっけ?」とDNSサーバー(ネームサーバー)に尋ねに行くとIPアドレスを教えてくれるので、その情報を用いてWebページにアクセスできるようになる。

DNSを理解する上で重要なワードは、「フルリゾルバ」「ネームサーバー」の2つ。

 フルリゾルバとは、「秘書」のような役割を持っています。フルリゾルバにこのホストのIPアドレスを知りたい!と伝えるとあちこちのネームサーバーに聞きまわって探しに行ってくれる。一度得た情報はキャッシュとして格納しておくので、次回同じ事を聞かれたらすぐに教えられるようになる。(自分のノートにメモしておくようなイメージ)

ネームサーバーとは、「電話帳」のような役割を持つ。この電話帳にはIPアドレスやそれに対応するホスト名が登録されている。フルリゾルバが尋ねに来たら、自分が持っている情報を教えている。

名前解決するまでの流れ

例えば「www.neko.cat」のIPアドレスを知りたいとき、まずフルリゾルバに対して「www.neko.cat」を知っているか尋ねに行く。フルリゾルバ自身がそのIPアドレスを知らなかったら、次はルートネームサーバーに聞きに行く。

ルートネームサーバーは、「www.neko.cat」は知らないが、「.cat」ドメインを管理しているネームサーバーは知っているので、その宛先をフルリゾルバに教える。

続いてフルリゾルバは「.cat」ドメインを管理しているネームサーバーに聞きに行く。そのネームサーバーは、「www.neko.cat」は知らないが「.neko.cat」ドメインは知っているので、その宛先をフルリゾルバに教える。

そしてフルリゾルバは「.neko.cat」ドメインを管理しているネームサーバーに聞きに行き、知りたかった「www.neko.cat」のIPアドレスを教えてもらう。

最後にフルリゾルバがそのIPアドレスを尋ねてきた人に教えてあげることで、Webページにアクセスすることができる。

このように、1つのネームサーバーが全ての情報を知っている訳ではないので、いくつかのネームサーバーに聞きに行くことで知りたい情報を得ることができるようになっている。会社で例えると、1つの部署が全てを管理しているのではなく、いくつかの部署に分担して管理しているとイメージしてもらえれば良い。

※イメージは下記

 

f:id:akngo22:20190123215141p:plain

 ネームサーバーを詳しく

通常、各ネームサーバーは複数台で構成されていることが多い。なぜなら、1台のネームサーバーがダウンした場合でも名前解決できるように冗長構成にしているからである。(とはいえ、私が関わっているプロジェクトはネームサーバーは1台。。。)

ネームサーバーは電話帳にゾーン情報を管理しているが、その「電話帳」のことを「ゾーンファイル」と呼ぶ。このゾーンファイル中には、ドメインとそれに紐づくIPアドレス、つまり「レコード」が記載されている。このレコード情報を確認して、ネームサーバーはフルリゾルバにドメイン情報を教えているのである。

レコードの種類

ゾーンファイルに記載するレコードは7種類ある。

SOAレコード

このレコードには、ゾーンに関する基本的な情報が記述されている。

ネームサーバーのホスト名、管理者のメールアドレス、ゾーン情報を破棄するまでの時間、ネガティブキャッシュの有効期限等が書かれている。

NSレコード

これは、ゾーンを管理するネームサーバーをFQDNで記述している。

ネームサーバーは1つだけでなく複数登録することが可能。

MXレコード

メールサーバーがメールを送るときに参照するレコード。

このゾーンのメールサーバーはこれですよ~と教えている。

このレコードには、プリファレンス値というメールサーバの優先度を示す値が書かれている。数値が小さいほど優先度が高いことを示している。

Aレコード

これは、正引きゾーンファイルで使用されるレコードで、ホスト名に対応するIPアドレスを指定する。(IPv4のみ)

AAAAレコード

IPv6の正引きゾーンファイルで使用されるレコードで、ホスト名に対応するIPアドレスを指定する。

CNAMEレコード

ホストの別名を定義する場合に記述する。

このレコードを指定する場合は、定義した別名を使ってNSレコードを記述しないことに注意しなければならない。

また、複数のCNAMEレコードを記述することも不可。

PTRレコード

IPアドレスに対応するホスト名を記述し、逆引きするときに使用するレコード。

IPアドレスの後に「in-addr.arpa」を付けることに注意する。IPv6の場合は、「ip6.arpa」を付ける。

 

参考文献

  • AWSをはじめよう

https://amzn.to/2FLY2AS

https://amzn.to/2FPjxAP