Webサイトにアクセスする際、私たちはブラウザに「www.example.com」のようなドメイン名を入力します。しかし、コンピュータ同士が通信するためにはIPアドレスが必要です。このドメイン名からIPアドレスへの変換を担うのがDNS(Domain Name System)です。

本記事では、DNSの仕組みについて以下の内容を解説します。

  • DNSの役割と名前解決の基本概念
  • ドメイン名の階層構造とFQDNの仕組み
  • DNSクエリの流れ(再帰クエリと反復クエリ)
  • DNSサーバーの種類と役割
  • 主要なDNSレコードの種類と用途(A/AAAA/CNAME/MX/TXT)
  • nslookupとdigコマンドによるDNS問い合わせの実践

この記事を読むことで、ドメイン名からIPアドレスへの変換プロセスを理解し、DNSレコードの役割を説明できるようになります。

前提条件

本記事を理解するために、以下の知識があることを前提としています。

  • IPアドレスの基本的な概念を理解している(前々回記事参照)
  • OSI参照モデルまたはTCP/IPモデルの概要を把握している

実行環境

DNSの動作確認には以下の環境を使用します。

OS 確認コマンド
Windows 10/11 nslookup
macOS nslookup または dig
Linux dig または nslookup

特別なソフトウェアのインストールは不要です。標準でインストールされているコマンドを使用します。

期待される学習成果

本記事を読み終えると、以下のことができるようになります。

  1. DNSの役割と名前解決の仕組みを説明できる
  2. ドメイン名の階層構造を理解し、FQDNを正しく読み解ける
  3. 再帰クエリと反復クエリの違いを区別できる
  4. 主要なDNSレコード(A/AAAA/CNAME/MX/TXT)の用途を説明できる
  5. nslookupやdigコマンドでDNSレコードを確認できる

DNSとは何か

DNS(Domain Name System)は、ドメイン名とIPアドレスを対応付ける分散型データベースシステムです。インターネットの「電話帳」に例えられることが多く、人間が覚えやすいドメイン名を、コンピュータが理解できるIPアドレスに変換します。

graph LR
    A["ブラウザ"] -->|"www.example.com"| B["DNSサーバー"]
    B -->|"93.184.216.34"| A
    A -->|"HTTPリクエスト"| C["Webサーバー<br/>93.184.216.34"]
    
    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#e8f5e9

DNSが必要な理由

IPアドレスは数字の羅列であり、人間にとって覚えにくいものです。一方、ドメイン名は意味のある文字列であり、記憶しやすく入力ミスも減らせます。

形式 特徴
IPアドレス 93.184.216.34 コンピュータが理解できる、覚えにくい
ドメイン名 www.example.com 人間が理解しやすい、覚えやすい

DNSは1983年に開発され、それ以前はHOSTSファイルと呼ばれるテキストファイルで名前とIPアドレスの対応を管理していました。インターネットの拡大に伴い、分散型のシステムであるDNSが必要となりました。

名前解決とは

ドメイン名からIPアドレスを取得するプロセスを名前解決(Name Resolution)または正引きといいます。逆に、IPアドレスからドメイン名を取得することを逆引き(Reverse DNS Lookup)といいます。

種類 変換方向
正引き(Forward Lookup) ドメイン名 → IPアドレス www.example.com → 93.184.216.34
逆引き(Reverse Lookup) IPアドレス → ドメイン名 93.184.216.34 → www.example.com

ドメイン名の階層構造

ドメイン名は階層構造を持っており、右から左に向かって上位から下位へと構成されています。各階層はドット(.)で区切られます。

ドメイン名の構成要素

「www.example.com」というドメイン名を例に、各構成要素を見てみましょう。

graph TB
    subgraph "ドメイン名の階層構造"
        ROOT["ルート(.)"]
        TLD["トップレベルドメイン<br/>(com)"]
        SLD["セカンドレベルドメイン<br/>(example)"]
        HOST["ホスト名<br/>(www)"]
    end
    
    ROOT --> TLD
    TLD --> SLD
    SLD --> HOST
階層 名称 説明
最上位 ルートドメイン . すべてのドメインの起点(通常は省略)
第1階層 TLD(トップレベルドメイン) com 用途や国を示すドメイン
第2階層 SLD(セカンドレベルドメイン) example 組織やサービスを示すドメイン
第3階層以下 サブドメイン/ホスト名 www 特定のサービスやサーバーを示す

トップレベルドメイン(TLD)の種類

TLDは大きく分けて以下の種類があります。

種類 略称 説明
分野別TLD gTLD com, net, org, info 用途や分野を示す汎用ドメイン
国コードTLD ccTLD jp, us, uk, de 国や地域を示すドメイン
新gTLD ngTLD tokyo, shop, blog 2012年以降に追加された新しいgTLD
インフラ用TLD - arpa DNSインフラ用の特殊ドメイン

FQDN(完全修飾ドメイン名)

FQDN(Fully Qualified Domain Name)とは、ルートドメインからホスト名まですべてを含む完全なドメイン名です。厳密にはルートドメインを示す末尾のドット(.)を含みます。

www.example.com.

日常的にはルートドメインのドット(.)は省略されますが、DNS設定ファイルなどでは明示的に記述することがあります。

DNSサーバーの種類と役割

DNSの仕組みを理解するためには、複数の種類のDNSサーバーがどのように連携しているかを把握する必要があります。

DNSサーバーの分類

graph TB
    subgraph "クライアント側"
        STUB["スタブリゾルバ<br/>(PC・スマホ)"]
    end
    
    subgraph "キャッシュサーバー"
        FULL["フルサービスリゾルバ<br/>(キャッシュDNSサーバー)"]
    end
    
    subgraph "権威サーバー"
        ROOT["ルートDNSサーバー"]
        TLD_S["TLDサーバー<br/>(.com)"]
        AUTH["権威DNSサーバー<br/>(example.com)"]
    end
    
    STUB --> FULL
    FULL --> ROOT
    FULL --> TLD_S
    FULL --> AUTH
    
    style STUB fill:#e3f2fd
    style FULL fill:#fff3e0
    style ROOT fill:#e8f5e9
    style TLD_S fill:#e8f5e9
    style AUTH fill:#e8f5e9
サーバー種類 役割
スタブリゾルバ DNSクエリを発行するクライアント PC、スマートフォン
フルサービスリゾルバ 再帰的にDNSを問い合わせ、結果をキャッシュ 8.8.8.8(Google DNS)、1.1.1.1(Cloudflare DNS)
ルートDNSサーバー TLDサーバーの情報を返す 世界に13系統存在
TLDサーバー 各TLDを管理し、権威サーバーの情報を返す .comサーバー、.jpサーバー
権威DNSサーバー ドメインのDNSレコードを実際に管理 各組織が運用するDNSサーバー

フルサービスリゾルバ(キャッシュDNSサーバー)

フルサービスリゾルバは、クライアントからのDNSクエリを受け取り、必要に応じて複数のDNSサーバーに問い合わせを行い、最終的な結果をクライアントに返します。問い合わせ結果はキャッシュされ、同じクエリに対しては高速に応答できます。

代表的なパブリックDNSサービスには以下があります。

サービス名 プライマリDNS セカンダリDNS
Google Public DNS 8.8.8.8 8.8.4.4
Cloudflare DNS 1.1.1.1 1.0.0.1
OpenDNS 208.67.222.222 208.67.220.220
Quad9 9.9.9.9 149.112.112.112

権威DNSサーバー

権威DNSサーバーは、特定のドメインに関するDNSレコードを管理し、そのドメインに関する問い合わせに対して正式な回答を返します。ドメインを取得すると、そのドメインのDNSレコードを管理する権威DNSサーバーを指定します。

DNSクエリの流れ

Webブラウザにドメイン名を入力してから、IPアドレスが解決されるまでの流れを見てみましょう。

再帰クエリと反復クエリ

DNSの問い合わせには2種類のクエリ方式があります。

クエリ種類 説明 使用される場面
再帰クエリ(Recursive Query) 最終的な回答を要求する クライアント → フルサービスリゾルバ
反復クエリ(Iterative Query) 次に問い合わせるべきサーバーを返す フルサービスリゾルバ → 各DNSサーバー

名前解決の詳細な流れ

「www.example.com」のIPアドレスを解決する際の具体的な流れを見てみましょう。

sequenceDiagram
    participant Client as クライアント
    participant Resolver as フルサービスリゾルバ
    participant Root as ルートDNSサーバー
    participant TLD as TLDサーバー(.com)
    participant Auth as 権威DNSサーバー(example.com)
    
    Client->>Resolver: www.example.comのIPは?(再帰クエリ)
    
    Note over Resolver: キャッシュを確認
    
    Resolver->>Root: www.example.comのIPは?(反復クエリ)
    Root-->>Resolver: .comサーバーに聞いて(参照応答)
    
    Resolver->>TLD: www.example.comのIPは?(反復クエリ)
    TLD-->>Resolver: example.comの権威サーバーに聞いて(参照応答)
    
    Resolver->>Auth: www.example.comのIPは?(反復クエリ)
    Auth-->>Resolver: 93.184.216.34です(権威応答)
    
    Note over Resolver: 結果をキャッシュ
    
    Resolver-->>Client: 93.184.216.34です

この流れを段階的に説明します。

  1. クライアントからの問い合わせ: ブラウザがフルサービスリゾルバに「www.example.com」のIPアドレスを再帰クエリで問い合わせる
  2. キャッシュの確認: フルサービスリゾルバは自身のキャッシュを確認し、キャッシュがあればそれを返す
  3. ルートDNSサーバーへの問い合わせ: キャッシュがない場合、ルートDNSサーバーに反復クエリを送信する
  4. TLDサーバー情報の取得: ルートDNSサーバーは「.com」を管理するTLDサーバーの情報を返す
  5. TLDサーバーへの問い合わせ: TLDサーバーに問い合わせを行う
  6. 権威DNSサーバー情報の取得: TLDサーバーは「example.com」を管理する権威DNSサーバーの情報を返す
  7. 権威DNSサーバーへの問い合わせ: 権威DNSサーバーに問い合わせを行う
  8. 最終回答の取得: 権威DNSサーバーが「www.example.com」のIPアドレス(93.184.216.34)を返す
  9. 結果のキャッシュと返却: フルサービスリゾルバは結果をキャッシュし、クライアントに返す

ローカルキャッシュの役割

上記の流れで毎回すべてのサーバーに問い合わせを行うわけではありません。以下の箇所でキャッシュが利用されます。

キャッシュ場所 説明
ブラウザキャッシュ ブラウザが独自に保持するDNSキャッシュ
OSキャッシュ OSのDNSリゾルバが保持するキャッシュ
hostsファイル ローカルに定義された名前解決情報
フルサービスリゾルバのキャッシュ ISPや組織のDNSサーバーが保持するキャッシュ

DNSレコードの種類

権威DNSサーバーは、さまざまな種類のDNSレコードを管理しています。各レコードには特定の役割があります。

主要なDNSレコード一覧

レコード種類 用途 値の例
A ドメイン名をIPv4アドレスにマッピング 93.184.216.34
AAAA ドメイン名をIPv6アドレスにマッピング 2606:2800:220:1:248:1893:25c8:1946
CNAME ドメイン名の別名を定義 www.example.com → example.com
MX メールサーバーを指定 mail.example.com(優先度10)
TXT 任意のテキスト情報を格納 v=spf1 include:_spf.google.com ~all
NS ドメインの権威DNSサーバーを指定 ns1.example.com
SOA ドメインの管理情報を定義 プライマリNS、連絡先、シリアル番号など
PTR 逆引き用レコード(IPアドレス → ドメイン名) www.example.com

Aレコード

Aレコードは最も基本的なDNSレコードで、ドメイン名とIPv4アドレスを対応付けます。

example.com.    IN    A    93.184.216.34
www.example.com.    IN    A    93.184.216.34

1つのドメイン名に複数のAレコードを設定することも可能です。これはラウンドロビンDNSと呼ばれ、負荷分散に使用されます。

AAAAレコード

AAAAレコード(クアッドAレコード)は、ドメイン名とIPv6アドレスを対応付けます。

example.com.    IN    AAAA    2606:2800:220:1:248:1893:25c8:1946

IPv6アドレスは128ビットであり、IPv4の32ビット(Aレコード)の4倍であることから「AAAA」と名付けられました。

CNAMEレコード

CNAMEレコード(Canonical Name)は、ドメイン名の別名(エイリアス)を定義します。

www.example.com.    IN    CNAME    example.com.
blog.example.com.    IN    CNAME    example.com.

CNAMEレコードを使用すると、複数のサブドメインを1つのホストに向けることができます。ただし、CNAMEレコードには以下の制約があります。

  • CNAMEレコードは他のレコードと共存できない(同じ名前でAレコードやMXレコードを持てない)
  • ゾーンの頂点(example.com自体)にはCNAMEを設定できない

MXレコード

MXレコード(Mail Exchanger)は、ドメイン宛てのメールを受け取るサーバーを指定します。優先度(preference)を設定でき、数値が小さいほど優先度が高くなります。

example.com.    IN    MX    10    mail1.example.com.
example.com.    IN    MX    20    mail2.example.com.

この例では、mail1.example.com(優先度10)が優先的に使用され、利用できない場合はmail2.example.com(優先度20)が使用されます。

TXTレコード

TXTレコードは、任意のテキスト情報を格納するためのレコードです。以下のような用途で使用されます。

用途 説明
SPF 送信元メールサーバーの認証 v=spf1 include:_spf.google.com ~all
DKIM メールの電子署名 公開鍵情報
DMARC メール認証ポリシー v=DMARC1; p=reject
ドメイン所有権の確認 Google Search Consoleなどの認証 google-site-verification=xxxxx
example.com.    IN    TXT    "v=spf1 include:_spf.google.com ~all"

NSレコード

NSレコード(Name Server)は、ドメインの権威DNSサーバーを指定します。

example.com.    IN    NS    ns1.example.com.
example.com.    IN    NS    ns2.example.com.

通常、冗長性を確保するために複数のNSレコードを設定します。

nslookupコマンドでDNSを確認する

nslookupコマンドは、DNSの問い合わせを行うための基本的なツールです。Windows、macOS、Linuxで利用可能です。

基本的な使い方

1
nslookup www.example.com

実行結果の例を示します。

Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   www.example.com
Address: 93.184.216.34
項目 説明
Server 問い合わせに使用したDNSサーバー
Address DNSサーバーのIPアドレスとポート番号
Non-authoritative answer キャッシュからの応答であることを示す
Name 問い合わせたドメイン名
Address 解決されたIPアドレス

特定のレコードタイプを指定する

nslookupでは、-typeオプションを使って特定のレコードタイプを問い合わせることができます。

1
2
3
4
5
6
7
8
# MXレコードを問い合わせる
nslookup -type=MX gmail.com

# TXTレコードを問い合わせる
nslookup -type=TXT example.com

# NSレコードを問い合わせる
nslookup -type=NS example.com

特定のDNSサーバーを指定する

特定のDNSサーバーを使って問い合わせを行うこともできます。

1
2
3
4
5
# Google Public DNSを使用して問い合わせ
nslookup www.example.com 8.8.8.8

# Cloudflare DNSを使用して問い合わせ
nslookup www.example.com 1.1.1.1

digコマンドでDNSを確認する

digコマンド(Domain Information Groper)は、より詳細なDNS情報を取得できるツールです。macOSとLinuxに標準でインストールされています。Windowsでは、WSL(Windows Subsystem for Linux)やBINDパッケージをインストールすることで使用できます。

基本的な使い方

1
dig www.example.com

実行結果の例を示します。

; <<>> DiG 9.18.18 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com.               IN      A

;; ANSWER SECTION:
www.example.com.        86400   IN      A       93.184.216.34

;; Query time: 23 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Tue Jan 07 23:00:00 JST 2026
;; MSG SIZE  rcvd: 60
セクション 説明
HEADER クエリのステータスとフラグ
QUESTION SECTION 問い合わせた内容
ANSWER SECTION 応答結果(レコードの値とTTL)
Query time 応答にかかった時間
SERVER 使用したDNSサーバー

特定のレコードタイプを問い合わせる

1
2
3
4
5
6
7
8
# Aレコードを問い合わせる
dig www.example.com A

# MXレコードを問い合わせる
dig example.com MX

# すべてのレコードを問い合わせる
dig example.com ANY

短縮形式で表示する

詳細な情報が不要な場合は、+shortオプションを使用します。

1
dig www.example.com +short

実行結果の例を示します。

93.184.216.34

DNSの問い合わせ経路を確認する

+traceオプションを使用すると、ルートDNSサーバーからの問い合わせ経路を確認できます。

1
dig www.example.com +trace

このコマンドにより、ルートDNSサーバー、TLDサーバー、権威DNSサーバーへの問い合わせが順番に表示され、名前解決の流れを実際に確認できます。

DNSのセキュリティに関する補足

DNSは1983年に設計されたプロトコルであり、セキュリティ上の考慮が十分ではありませんでした。現在では以下のようなセキュリティ強化技術が利用されています。

技術 説明
DNSSEC DNSレコードに電子署名を付与し、改ざんを検知
DoH(DNS over HTTPS) DNS通信をHTTPS経由で暗号化
DoT(DNS over TLS) DNS通信をTLS経由で暗号化

これらの技術については、次回以降の記事で詳しく解説します。

まとめ

本記事では、DNSの仕組みについて基礎から解説しました。

  • DNSの役割: ドメイン名からIPアドレスへの変換(名前解決)を行う分散型データベースシステム
  • ドメイン名の階層構造: ルートドメイン、TLD、SLD、サブドメインで構成される
  • DNSサーバーの種類: スタブリゾルバ、フルサービスリゾルバ、権威DNSサーバーが連携して名前解決を行う
  • クエリの種類: クライアントは再帰クエリ、フルサービスリゾルバは反復クエリを使用
  • DNSレコード: A、AAAA、CNAME、MX、TXTなど、用途に応じたレコードが存在
  • 確認コマンド: nslookupやdigコマンドでDNSの動作を確認可能

次回記事「DNSキャッシュとTTLの仕組みを理解する」では、DNSキャッシュの詳細な動作、TTL(Time To Live)の役割、キャッシュのクリア方法、DNS伝播の遅延について解説します。

参考リンク