DNSと名前解決の仕組み

目次
インターネットを使う際、私たちは通常「google.com」や「yahoo.co.jp」などのドメイン名を入力してウェブサイトにアクセスします。
しかし、コンピュータやネットワークの世界では、実際には数字のIPアドレスを使ってやり取りしています。
DNSは、人間にとって覚えやすいドメイン名をコンピュータが理解できるIPアドレスに変換する仕組みです。

この記事では、インフラエンジニアを目指す方向けに、DNSの基本的な概念について説明します。
DNSの理解はネットワークインフラの基礎として非常に重要です。

ぜひ最後まで読んで、理解を深めてください。

名前解決とは

インターネットを利用する上で、私たちは普段「www.example.com」のような覚えやすいドメイン名を使ってWebサイトにアクセスしています。
しかし、コンピュータネットワークの世界では、実際の通信は「192.168.1.1」のようなIPアドレスを使って行われています。

このドメイン名とIPアドレスの変換を行うのが、DNS(Domain Name System)サーバです。

名前解決
DNSサーバがなければ、インターネット上の全てのWebサイトにアクセスする際に、数字の羅列であるIPアドレスを覚えなければならなくなります。
例えば、「Google.com」ではなく「142.250.190.78」というような数字を入力する必要があるのです。

これは人間にとって非常に困難な作業であり、インターネットの普及を妨げる大きな障壁となっていたでしょう。

名前解決の仕組み

DNSの最も重要な役割は「名前解決」と呼ばれるプロセスです。
これは、ドメイン名をIPアドレスに変換する作業のことを指します。

この名前解決は階層的なDNSサーバーの連携によって実現されています。

階層構造として、以下のようなDNSサーバーが関わってきます。
  1. ルートDNSサーバー:インターネット全体のDNS階層の最上位に位置するサーバー
  2. TLDネームサーバー:.jpや.comなどのトップレベルドメインを管理するサーバー
  3. 権威ネームサーバー:特定のドメイン(example.co.jpなど)の情報を持つサーバー
  4. DNSリゾルバ:クライアントからの要求を受け、他のDNSサーバーに問い合わせを行うサーバー

名前解決の基本は「たらい回し」で覚えてください。

各サーバは、名前解決を要求する人(=クライアント)からの問い合わせに応じて、誰が知っているかを教えてくれます。

そして、教えてもらった次のDNSサーバに聞きに行って、同じように誰が知っているかを教えてもらって・・・という繰り返しです。

ただ、たらい回しというと答えにたどり付けないように聞こえてしまいますが、そこがDNSの名前解決では異なる点です。

たらい回しをされるのですが、徐々に答えを知っている人に近づくことができるように設計されているのです。

そこに関係してくるのが、前の章の「ドメインの構造と取得」で学習したドメイン名の構造です。

ドメイン名の構造を思い出してください。

以下のようになっていましたよね。

ドメイン構造
まず、名前解決においては、ルートDNSという、最上位のDNSに問い合わせに行きます。

最上位のDNSは、問われているドメイン名のトップレベルドメインを見て、そのドメインの名前解決を知っているDNSサーバを教えてくれます。
ルートDNS
教えられた次のDNSサーバは、セカンドレベルドメインを見て、次に知っているDNSサーバを教えてくれます。

セカンドレベルDNS
教えられた次のDNSサーバは、サードレベルドメインを見て、次に知っているDNSサーバを教えてくれます。

サードレベルDNS
ここで教えられるDNSサーバはドメインの払い出しを受けた利用者が管理するDNSサーバのことになります。

前の章の「ドメインの構造と取得」にて、ドメイン名の取得の際に払いだされたドメインの名前解決を行うネームサーバ(=権威ネームサーバ)を登録する必要があると説明したと思います。

上記の「.co.jp」を管理するDNSが「次に尋ねろ」と教えてくれるDNSがその登録したネームサーバになるという仕組みなのです。

このようにたらい回しのように次へ次へと回されながら、最終的にドメインの払い出しを受けた利用者のDNSサーバへたどり着くようにするのが、名前解決の仕組みなのです。

DNSリゾルバの仕組み

前の項でDNSサーバの階層化による名前解決の仕組みを解説しました。

今度は、たらい回しされるクライアント側の名前解決の仕組みです。

クライアントはDNSサーバに名前解決を要求しますが、実は利用者のPCで直接ルートDNSに尋ねるようなことはしません。

前の項で説明した名前解決の仕組みを代理で行ってくれるサーバを自身のネットワーク内に用意し、そのサーバが行います。

その代理でDNSの名前解決を行うサーバを「DNSリゾルバ」といいます。

このDNSリゾルバはクライアントから名前解決の要求を受け取ったら、ルートDNSへ問い合わせを開始し、次のDNS→次のDNS・・・と問い合わせを重ねて、最終的に得られた回答だけをクライアントに返してくれます。

なので、クライアント側としてはDNSリゾルバに問い合わせを1度したら、回答が返ってくるように見えます。

DNSリゾルバ
このような代理で名前解決を行うDNSリゾルバを置くのには以下のようなメリットがあります。

メリット

  • 複数のDNSサーバを再帰的に問い合わせする処理を代理で実施してもらえる
  • 名前解決の結果を記憶(=キャッシュ)し、2回目の問い合わせ時には即時に回答可能
  • ルートDNSへの負荷軽減

DNSリゾルバは名前解決に特化した機能を持つため、PCから直接同じような流れを行うよりもより効率的に名前解決が可能になります。

名前解決の流れ

今までの項で学習したことをまとめましょう。

実際に名前解決が行われる際の流れを記載します。

例えば、ブラウザで「www.example.co.jp」にアクセスする場合の流れは次のようになります:

DNSリゾルバ
  1. ユーザーがブラウザに「www.example.co.jp」と入力します。
  2. PCに設定されたDNSリゾルバに問い合わせます。
  3. DNSリゾルバはルートDNSサーバーに問い合わせます。
  4. ルートDNSサーバーは「.jp」を管理するTLDネームサーバーの情報を返します。
  5. DNSリゾルバは「.jp」を管理するTLDネームサーバーに問い合わせます。
  6. 「.jp」を管理するTLDネームサーバーは「.co.jp」を管理するネームサーバーの情報を返します。
  7. DNSリゾルバは「.co.jp」を管理するネームサーバーに問い合わせます。
  8. 「.co.jp」を管理するネームサーバーは「example.co.jp」を管理する権威ネームサーバーの情報を返します。
  9. DNSリゾルバは権威ネームサーバーに「www.example.co.jp」について問い合わせます。
  10. 権威ネームサーバーは「www.example.co.jp」のIPアドレスを返します。
  11. DNSリゾルバはこの情報をブラウザに返し、ブラウザは該当IPアドレスのウェブサーバーにアクセスします。
このような再帰的な問い合わせによって、効率的な名前解決が実現されています。
また、パフォーマンス向上のため、DNSリゾルバは一度取得した情報を一定期間キャッシュ(一時保存)します。
これによって、同じドメイン名に対する連続したアクセスを高速に処理できるのです。

まとめ

DNSの名前解決の仕組みと流れを解説しました。

色々なDNSが関わってきて、たらい回しにされている状況は、名前解決の仕組みをわかりづらくしている一因だと思います。

ただ、この仕組みにより世界中に無数にあるドメイン名の名前解決を高速に効率よくできるようになっているのです。

長年使われていることからもわかるように洗練された仕組みで、名前解決は成り立っております。

インフラエンジニアとして、名前解決の仕組みをしっかり理解しておきましょう。