今までなんとなくの理解で進めてしまっていたDNSを改めて勉強することにしました。
特に以下の本は大変役立ちましたので、理解の整理のためにも本記事を書くことにしました。
https://amzn.asia/d/0eAxNLul
基礎の復習なので、当たり前の事もなるべく記載しようと思います。
DNSとは
Domain Name Systemの略でIPアドレスとドメイン名の対応を管理する役割を持つシステムです。
利用者の要求に応じて、ドメイン名に対応IPアドレスを返すやり取りを名前解決と呼びます。
その名前解決を行うサーバーをDNSサーバーと呼びます。
IPアドレスとドメイン名の関係性
ネットワークの世界では、通信相手の識別をIPアドレスを用いて行います。
しかし人間が利用するケースにおいては、単なる数値の羅列よりも名前がある方が管理しやすいです。
また運用性を考えた時、サーバーの物理的なリプレイスや、サービスプロバイダーの変更でIPアドレスが変わるケースもあり、その度に全てのユーザーへ変更通知を出すことは大変な作業になります。
しかしドメイン名があれば、ドメイン名はどのままでIPアドエスとドメイン名の紐づけを裏側で変更するのみでリプレイス出来てしまいます。
DNSが出来るまでの背景 (Hosts)
このDNSが出来るまではhostsというファイルで管理されていました。
スタンフォード研究所(SRI-NIC)が「名前とIPの対応表」を一括管理し、各ユーザーがPCにダウンロードするといった運用です。
また新しいドメインを利用してサービスを作りたい場合、ユーザーがSRI-NICに申請を行うことをしていました。
しかしインターネット利用が急速に拡大する中で、この方法では管理が追い付かずDNSが考案されました。
尚今でもhostsファイルを利用することは出来ます。
利用した場合はDNSよりもhostsが先に参照されます。
hostsの作成方法もこの際、以下に記載します。
hosts作成方法(Windows)
・テキストエディタを管理者権限で開きます。
・C:\WINDOWS\System32\drivers\etc\hosts を開きます。
・ファイルの書式は以下で、例えばtest-server.localを192.168.10.100で解決したい場合は以下とします。
192.168.10.100 test-server.local
ドメイン構造
上述したhostsファイルで管理が限界にきたために登場したのがドメインによる階層管理となります。
会社がミッション毎に、営業部、マーケティング部と部署を作るのと同じように、ドメイン毎に責任を委任して管理していくことになります。
ドメイン名は.(ドット)で繋げた形で構成され、以下のような形をとります。

右から順番に説明すると
[.] :root(ルート)と呼び、普段見るURLでは省略されているため意識されませんが、ドメイン階層構造の頂点でインターネット全体のドメインを束ねるルートDNSサーバーを表すドメインとなります。
[TLD]:rootを頂点として、その次に位置するのがTop Level Domaimnと呼び,jpなどの国コードを基にされているものや、comやnetのように国に関係なくよく見るドメインで構成されているものがここに位置します。
[2LD]:ケースにより異なりますが、会社名を表すドメインや、companyを表すcoなどのドメインが位置します。
[3LD]:特定のホスト名や2LDより下で管理されているドメインが位置します。
レジストリ・レジストラ
そしてこれらのドメインをどこが管理しているのかの話を説明します。
レジストリ
レジストリとはドメインの登録/管理をする主体を指します。
RootDomainのレジストリはIANAという組織です。
またTLD毎にもレジストリは存在しており、[.jp]はJPRS、[.com]はVerisign, Incという企業が担っています。
レジストラ
レジストラとはユーザーとレジストリの間に入って、登録受付やデータの登録を代行する業者を指します。
一般の人でもドメインの購入が出来る「お名前.com」もレジストラに該当します。
実際にはユーザーはドメインを払い出ししたい場合はレジストラから購入することになります。
[ユーザー] → [レジストラ] → [レジストリ]
DNSの構成要素
DNSの名前解決フローを整理する前に抑えておきたい構成要素を3つ説明します。
スタブリゾルバー
PCやサーバーのOSに組み込まれているDNSに名前解決を依頼するプログラムです。
フルリゾルバー(キャッシュDNSサーバー)
クライアントとDNSの中継をする機能で、スタブリゾルバーから名前解決依頼を受けつけ次に出てくる権威サーバーが紐づくIPアドレスを教えてくれるまで聞き続けてくれます。(再帰検索と呼ぶ)
また一度問い合わせしたドメインについては設定した期間はキャッシュして、自力でIPアドレスを回答することもするためキャッシュDNSサーバーとも呼ばれています。
このキャッシュ機能により次に出てくる権威サーバーの負荷を減らす役割も担っています。
日本の企業だとADにこの機能を持たせている会社も多いと思います。
権威サーバー
特定のドメインに関するIPアドレス情報を持っており回答することができる大元のDNSサーバーです。
自分が委任を受けたドメイン情報を回答することができ、フルリゾルバーと異なり再帰検索をしません。
しかし、サブドメイン(2LD,3LD・・)はあのサーバーに委任しているという、委任応答は返してくれます。
実際のユースケース
PCがDNSを認知するまで
普段のユースケースからDNSが名前解決するまでを見ていきます。
例えば私たちが自宅からインターネット接続する時は、インターネットサービスプロバイダーのホームゲートウェイからDHCPでDNSのIPアドレスをもらうことになります。

PCの設定で自分で静的にDNSのIPアドレスを設定することもできます。
DNS設定方法の参考
https://faq.interlink.or.jp/faq2/View/wcDisplayContent.aspx?sso_step=1&id=639
PCが上で取得したDNSに対してDNSクエリを送る
次にPCやスマートフォンでブラウザでリンクを叩いたときの動きを説明します。
URLのドメインをPCはOSに搭載されている[スタブリゾルバー]が上述で認識したDNSに対してDNSクエリを送ります
[フルリゾルバー]がそのクエリを受け取り、TLDから順番に権威サーバーに問い合わせを行います。
参考

