🐶

ドメイン名とIPアドレスをつなぐDNSの仕組みについて

に公開

はじめに

インターネットを利用する際、私たちは「www.example.com」のようなドメイン名を入力するだけで目的のWebサイトにアクセスできます。この便利な仕組みを支えているのが、DNS(Domain Name System)です。

本記事では、DNSの基本的な仕組みについて、初心者の方にもわかりやすく解説します。具体的には、以下のトピックを扱います。

本記事で学べること:

  • IPアドレスとドメイン名の関係性
  • DNSが分散管理システムとして設計された背景
  • ドメイン名の階層構造と委任の仕組み
  • 名前解決のプロセス
  • ネームサーバーとキャッシュDNSサーバーの違い

DNSの基礎をしっかり理解することで、今後のインフラ構築やトラブルシューティングに役立つはずです。

IPアドレスとドメインの関係

IPアドレスとドメインの必要性

パソコンやスマートフォンなど、ネットワークに接続された機器(ホスト)は、互いに通信を行っています。この通信を実現するために必要なのがIPアドレスです。

IPアドレスは、通信したい相手を特定したり、通信してきた相手を判別したりするために利用されます。例えば、192.168.1.12001:0db8:85a3::8a2e:0370:7334のような数値の並びで表現されます。

しかし、IPアドレスには大きな問題があります。

  • 数値の羅列なので人間が覚えにくい
  • 管理者が変更してしまうこともある

そこで登場するのがドメインです。example.comgoogle.comのような、人間にとって覚えやすい名前を使って通信相手を指定できます。

つまり、こういう状況が生まれました。

  • コンピューター:IPアドレスを使って通信相手を識別したい
  • 人間:ドメインを使って通信相手を指定したい

この両者を結びつける仕組みが必要です。それがDNS(Domain Name System)です。
DNSの詳細については後ほど説明します。

DNSの歴史:集中管理から分散管理へ

初期のインターネットでは、IPアドレスとドメインの対応表をSRI-NIC(Stanford Research InstituteのNetwork Information Center)というアメリカの組織が一元管理していました。

しかし、インターネットの急速な普及に伴ってホストの数が爆発的に増加すると、一つの組織がすべてを管理することが限界になりました。

そこで考案されたのが分散管理の仕組みです。

分散管理の仕組み

イメージとしては、大企業の組織構造に似ています。

  • 会社全体を一人の管理者が管理するのではなく
  • 部署ごとに管理担当者を配置し
  • それぞれが自分の担当範囲を管理する

DNSも同様に、複数の組織が分担して管理するようになりました。

ただし、重要なポイントがあります。管理の頂点は一つに保つことで、ドメインが世界中で一意であることを保証しています。この階層構造によって、同じドメイン名が重複することなく、インターネット全体で秩序を保つことができるのです。

引用元:JPRS用語辞典|TLD(トップレベルドメイン)

ドメイン名とは

DNSの階層構造において、階層によって分割されたそれぞれの名前空間の範囲ドメインと呼び、その範囲を示す名前をドメイン名と呼びます。

ドメイン名の一意性

ドメイン名が世界中で一意(唯一無二)になる仕組みは、各階層で名前の重複を防ぐことで実現されています。

例えば:

  • jpドメインの中にexampleという名前は一つだけ(example.jp)
  • co.jpドメインの中にexampleという名前は一つだけ(example.co.jp)
  • それぞれの階層で重複を防ぐことで、最終的にwww.example.co.jpは世界で唯一のドメイン名になる

ドメインの委任

上位のドメインが下位のドメインに管理権限を譲ることを委任と呼びます。

例えば:

  • jpドメインがco.jpドメインを管理する権限を委任
  • co.jpドメインがexample.co.jpドメインを管理する権限を委任

この委任の仕組みによって、階層的な分散管理が実現されています。

ドメイン名とIPアドレスの紐付け

このドメイン名とIPアドレスを紐づけることで、ドメイン名はインターネット上のホストを特定するための識別子として利用できるようになります。

ドメイン名の構造

ドメイン名はドット(.)で区切られた階層構造になっています。

実は、すべてのドメイン名はルートから始まっています。普段は省略されていますが、正式には以下のような形式です:

www.example.co.jp.
                 ↑
            ルート(.)

完全な形式をFQDN(Fully Qualified Domain Name: 完全修飾ドメイン名)と呼びます。

  • 省略形: www.example.co.jp
  • 完全形: www.example.co.jp. (末尾にドット)

右から左に読むと:

  1. . (ルート) - DNSの最上位
  2. jp - トップレベルドメイン
  3. co - セカンドレベルドメイン
  4. example - 組織のドメイン
  5. www - ホスト名

DNS(Domain Name System)とは

DNSは、ドメイン名とIPアドレスを管理するシステムです。ユーザーからの要求に応じて、ドメイン名に対応するIPアドレスを探し出してくれます。この処理を名前解決といいます。

ゾーンとネームサーバー

それぞれのドメインはネームサーバーによって管理されています。委任されたドメインは、委任先のネームサーバーが管理することになります。

この委任によって管理を任された範囲ゾーンといいます。

引用元:JPRS用語辞典|ゾーン

ネームサーバーが管理する情報

ネームサーバーは、自分が管理するゾーンについて以下の2つの情報を持っています。

1) そのゾーンに存在するホストのドメイン名とIPアドレス

それぞれのゾーンのネームサーバーが、ドメイン名とIPアドレスの対応付けを管理します。

例えば、example.jpゾーンネームサーバーは:

  • www.example.jp のIPアドレスは 192.0.2.1

といった情報を管理しています。

2) 委任の情報

委任先(子)のネームサーバーの情報で、委任元(親)のネームサーバーが管理します。

これは「委任先はこのネームサーバーです」という情報です。

例えば:

  • ルートはjpがどのネームサーバーで管理されているか知っている
  • ルートはjpを委任しているため、jpのネームサーバー情報のみを知っている
  • example.jpというドメイン名の情報を問われた場合、jpの委任先を案内する

同様に、jpexample.jpを委任しているため、example.jpのネームサーバー情報のみを知っています。

委任の連鎖による名前解決

このように、委任先をルートから順にたどっていくことで、最終的に目的のドメイン名(例:example.jp)のIPアドレスを管理するネームサーバーにたどり着くという仕組みが、DNSにおける名前解決の基本です。

具体的な流れ:

  1. ルートのネームサーバーに問い合わせ → jpのネームサーバー情報を取得
  2. jpのネームサーバーに問い合わせ → example.jpのネームサーバー情報を取得
  3. example.jpのネームサーバーに問い合わせ → www.example.jpのIPアドレスを取得

親は子の委任情報を管理し、委任先を案内する役割を担うことで、階層的な分散管理と名前解決を実現しているのです。

引用元:JPRS用語辞典|応答

DNSサーバーの種類と役割

DNSの名前解決には、主に2種類のDNSサーバーが関わっています。

1. ネームサーバー

ネームサーバーは、自分が管理するゾーンの情報を正式に提供するサーバーです。

主な役割:

  • 管理対象となるゾーン情報を保持
  • ドメイン名とIPアドレスの対応関係を管理
  • 委任情報(下位のネームサーバー情報)を管理

例:

  • ルートサーバー: ルートゾーンを管理し、TLD(.jp, .comなど)のネームサーバー情報を提供
  • TLDのネームサーバー: 例えば.jpを管理し、example.jpのネームサーバー情報を提供
  • 2LDのネームサーバー: 例えばexample.jpを管理し、www.example.jpのIPアドレス情報を提供

2. キャッシュDNSサーバー

キャッシュDNSサーバーは、クライアントからの問い合わせを受けて、ネームサーバーに代わって名前解決を行うサーバーです。

主な役割:

  • クライアントからの名前解決要求を受け付ける
  • ネームサーバーに再帰的に問い合わせを行う
  • 一度取得した情報をキャッシュ(一時保存)しておく

キャッシュの仕組みとメリット

キャッシュDNSサーバーは、過去に問い合わせた結果を一定時間保存しています。

動作の流れ:

  1. 初回の問い合わせ

    • クライアントからwww.example.jpの問い合わせを受ける
    • キャッシュに情報がないため、ネームサーバーに順次問い合わせ
    • ルートサーバー → TLDサーバー → example.jpのネームサーバー
    • 取得した結果をクライアントに返し、同時にキャッシュに保存
  2. 2回目以降の同じ問い合わせ

    • 別のクライアント(または同じクライアント)からwww.example.jpの問い合わせを受ける
    • キャッシュに情報があるため、すぐに応答
    • ネームサーバーへの問い合わせが不要

キャッシュのメリット:

  • 応答速度の向上: ネームサーバーへの問い合わせが不要になるため、高速に応答できる
  • ネットワーク負荷の軽減: ネームサーバーへのトラフィックが削減される
  • ネームサーバーの負荷軽減: 同じ問い合わせが何度も来ても、キャッシュサーバーで処理される

ただし、キャッシュにはTTL(Time To Live: 生存時間)が設定されており、一定時間が経過すると情報が破棄されます。これにより、IPアドレスの変更などの情報が適切に反映される仕組みになっています。

名前解決のコマンド実例

実際にdigコマンドを使って名前解決の流れを確認してみましょう。今回はwww.yahoo.co.jpのIPアドレスを調べる例を示します。

1. 通常の名前解決

まず、通常通りキャッシュDNSサーバーを使って名前解決をしてみます。

# Cloudflare Public DNS(1.1.1.1)を使って名前解決
dig www.yahoo.co.jp @1.1.1.1

# 結果の一部
ANSWER SECTION:
www.yahoo.co.jp.    300    IN    CNAME    edge12.g.yimg.jp.
edge12.g.yimg.jp.   60     IN    A       182.22.16.251

2. 再帰的な名前解決の追跡

+traceオプションを使うと、ルートサーバーから順に名前解決の過程を追跡できます。

# ルートから順に名前解決を追跡
dig +trace www.yahoo.co.jp

# ① ルートサーバーへの問い合わせ
Received 1170 bytes from 1.1.1.1
.                518400  IN   NS   a.root-servers.net.
.                518400  IN   NS   b.root-servers.net.
# (以下、他のルートサーバー省略)

# ② jpドメインのネームサーバーへの問い合わせ  
jp.              172800  IN   NS   a.dns.jp.
jp.              172800  IN   NS   b.dns.jp.
jp.              172800  IN   NS   c.dns.jp.
jp.              172800  IN   NS   d.dns.jp.
# (以下、他のjpサーバー省略)
Received 825 bytes from 198.41.0.4

# ③ yahoo.co.jpドメインのネームサーバーへの問い合わせ
yahoo.co.jp.     86400   IN   NS   ns01.yahoo.co.jp.
yahoo.co.jp.     86400   IN   NS   ns02.yahoo.co.jp.
yahoo.co.jp.     86400   IN   NS   ns11.yahoo.co.jp.
yahoo.co.jp.     86400   IN   NS   ns12.yahoo.co.jp.
Received 650 bytes from 203.119.1.1#53(a.dns.jp) in 18 ms

# ④ 最終的な答え
www.yahoo.co.jp. 300    IN    CNAME   edge12.g.yimg.jp.
Received 72 bytes from 118.151.254.133

3. 特定のレコードタイプを指定した問い合わせ

IPv6アドレス(AAAAレコード)の問い合わせ

# IPv6アドレスを問い合わせる
dig www.yahoo.co.jp AAAA

# 結果
ANSWER SECTION:
www.yahoo.co.jp.    300    IN    CNAME   edge12.g.yimg.jp.
edge12.g.yimg.jp.   60     IN    AAAA    2406:2000:ec:c58::3001

メールサーバー(MXレコード)の問い合わせ

# yahoo.co.jpのメールサーバーを調べる
dig yahoo.co.jp MX

# 結果
ANSWER SECTION:
yahoo.co.jp.    1800    IN    MX    10 mx1.mail.yahoo.co.jp.
yahoo.co.jp.    1800    IN    MX    10 mx2.mail.yahoo.co.jp.
yahoo.co.jp.    1800    IN    MX    10 mx3.mail.yahoo.co.jp.
yahoo.co.jp.    1800    IN    MX    10 mx5.mail.yahoo.co.jp.

ネームサーバー(NSレコード)の問い合わせ

# yahoo.co.jpのネームサーバーを調べる
dig yahoo.co.jp NS

# 結果
ANSWER SECTION:
yahoo.co.jp.    86400   IN    NS    ns01.yahoo.co.jp.
yahoo.co.jp.    86400   IN    NS    ns02.yahoo.co.jp.
yahoo.co.jp.    86400   IN    NS    ns11.yahoo.co.jp.
yahoo.co.jp.    86400   IN    NS    ns12.yahoo.co.jp.

4. 逆引き(IPアドレスからドメイン名を調べる)

# 182.22.16.251のドメイン名を調べる
dig -x 182.22.16.251

# 結果
ANSWER SECTION:
251.16.22.182.in-addr.arpa. 300 IN PTR edge12.g.yimg.jp.

5. ネームサーバーへの直接問い合わせ

キャッシュサーバーを介さず、ネームサーバーに直接問い合わせることもできます。

# yahoo.co.jpのネームサーバーに直接問い合わせ(再帰無効)
dig www.yahoo.co.jp @ns01.yahoo.co.jp +norecurse

# 結果
ANSWER SECTION:
www.yahoo.co.jp.    300    IN    CNAME   edge12.g.yimg.jp.
AUTHORITY SECTION:
g.yimg.jp.          300    IN    NS      gns01.yahoo.co.jp.
g.yimg.jp.          300    IN    NS      gns02.yahoo.co.jp.

コマンド解説

  • dig:DNSの問い合わせを行うコマンド
  • @1.1.1.1:問い合わせ先のDNSサーバーを指定(省略時はOSの設定を使用)
  • +trace:ルートサーバーから順に名前解決の過程を表示
  • +norecurse:再帰的な問い合わせを無効にする(ネームサーバーへの直接問い合わせ時に使用)
  • AAAA:IPv6アドレスのレコードタイプを指定
  • MX:メールサーバーのレコードタイプを指定
  • NS:ネームサーバーのレコードタイプを指定
  • CNAME:別名(エイリアス)のレコードタイプ
  • -x:逆引き(IPアドレス→ドメイン名)を行う

補足:CNAMEレコードについて

上記の例でwww.yahoo.co.jpedge12.g.yimg.jpというCNAMEレコードを返しています。CNAMEは「Canonical Name」の略で、あるドメイン名が別のドメイン名の別名(エイリアス)であることを示します。

この仕組みにより、実際のIPアドレスはedge12.g.yimg.jpで管理しつつ、ユーザーは覚えやすいwww.yahoo.co.jpでアクセスできるようになっています。

このように、digコマンドを使うことで、DNSの名前解決の仕組みを実際に確認することができます。特に+traceオプションは、本記事で説明した階層的な名前解決の流れを視覚的に理解するのに役立ちます。

最後に

本記事では、DNS(Domain Name System)の基本的な仕組みについて解説しました。

DNSは、私たちが日常的に利用しているインターネットの根幹を支える技術です。以下の重要なポイントを理解していただけたかと思います:

  • 人間とコンピューターの架け橋 - 人間が覚えやすいドメイン名と、コンピューターが使用するIPアドレスを結びつける
  • 階層的な分散管理 - ルートから始まる階層構造により、世界規模でドメイン名の一意性を保証
  • 委任による責任分散 - 各階層で管理権限を委任することで、スケーラブルなシステムを実現
  • 2種類のDNSサーバーの役割分担 - ネームサーバーが正式な情報を管理し、キャッシュDNSサーバーが効率的な名前解決を提供

今回は基本的な仕組みの解説でしたが、この記事がDNSの仕組みを理解する一助となれば幸いです。

Discussion