10日で覚えるネットワークDay 6: DNS(ドメインネームシステム)

Day 6: DNS(ドメインネームシステム)

今日学ぶこと

  • DNSの役割と重要性
  • DNSの階層構造(ルート、TLD、権威、リカーシブリゾルバ)
  • DNSレコードの種類(A、AAAA、CNAME、MX、NS、TXT、SOA、PTR)
  • DNS名前解決の流れ(再帰クエリと反復クエリ)
  • DNSキャッシュとTTL
  • digとnslookupコマンド
  • DNSセキュリティ(DNSSEC、DoH/DoT)

DNSとは何か

DNS(Domain Name System) は、人間が読みやすいドメイン名(例:www.example.com)をコンピュータが理解できるIPアドレス(例:93.184.216.34)に変換するシステムです。インターネットの「電話帳」とも呼ばれます。

flowchart LR
    subgraph Human["人間が入力"]
        A["www.example.com"]
    end
    subgraph DNS["DNS"]
        B["名前解決"]
    end
    subgraph Machine["コンピュータが使用"]
        C["93.184.216.34"]
    end
    A --> B --> C
    style Human fill:#3b82f6,color:#fff
    style DNS fill:#8b5cf6,color:#fff
    style Machine fill:#22c55e,color:#fff

なぜDNSが必要なのか

観点 IPアドレス直接 DNS使用
覚えやすさ 93.184.216.34 は覚えにくい example.com は覚えやすい
サーバー変更 IPが変わると全員に通知が必要 DNS側で更新すれば自動反映
負荷分散 1つのIPに固定 複数IPに振り分け可能
柔軟性 低い 高い

DNSがなければ、すべてのWebサイトにIPアドレスでアクセスする必要があり、インターネットの利用は非常に不便になります。


DNSの階層構造

DNSは分散型のデータベースであり、階層的な構造を持っています。

flowchart TB
    subgraph Root["ルートDNSサーバー"]
        R[".(ルート)"]
    end
    subgraph TLD["TLDサーバー"]
        T1[".com"]
        T2[".jp"]
        T3[".org"]
    end
    subgraph Auth["権威DNSサーバー"]
        A1["example.com"]
        A2["example.jp"]
        A3["example.org"]
    end
    R --> T1
    R --> T2
    R --> T3
    T1 --> A1
    T2 --> A2
    T3 --> A3
    style Root fill:#ef4444,color:#fff
    style TLD fill:#f59e0b,color:#fff
    style Auth fill:#22c55e,color:#fff

各階層の役割

ルートDNSサーバー

DNSの最上位に位置するサーバーです。世界に13のルートサーバー群(A~M)があり、エニーキャストにより実際には数百台のサーバーが稼働しています。TLDサーバーの場所を知っています。

TLD(Top-Level Domain)サーバー

.com.jp.org などのトップレベルドメインを管理するサーバーです。

TLDの種類 説明
gTLD(汎用) .com, .org, .net 用途を問わない
ccTLD(国別) .jp, .uk, .de 国・地域に紐づく
sTLD(スポンサー付き) .edu, .gov, .mil 特定組織向け
新gTLD .app, .dev, .tokyo 2012年以降に追加

権威DNSサーバー

特定のドメインのDNSレコードを実際に保持しているサーバーです。example.com のIPアドレスなどの最終的な回答を返します。

リカーシブリゾルバ(キャッシュDNSサーバー)

クライアントからのクエリを受け取り、必要に応じて上位のサーバーに問い合わせを行うサーバーです。ISPやGoogle Public DNS(8.8.8.8)、Cloudflare DNS(1.1.1.1)などがこれにあたります。


DNSレコードの種類

DNSサーバーには、さまざまな種類のレコードが格納されています。

レコード 正式名称 内容
A Address ドメイン → IPv4アドレス example.com → 93.184.216.34
AAAA Quad-A ドメイン → IPv6アドレス example.com → 2606:2800:220:1:...
CNAME Canonical Name ドメインの別名 www.example.com → example.com
MX Mail Exchange メールサーバー指定 example.com → mail.example.com
NS Name Server 権威DNSサーバー指定 example.com → ns1.example.com
TXT Text テキスト情報(SPF等) "v=spf1 include:..."
SOA Start of Authority ゾーンの管理情報 シリアル番号、TTL等
PTR Pointer IPアドレス → ドメイン(逆引き) 34.216.184.93 → example.com

主要レコードの詳細

Aレコードは最も基本的なレコードで、ドメイン名をIPv4アドレスにマッピングします。

example.com.    IN    A    93.184.216.34

CNAMEレコードは、あるドメイン名を別のドメイン名のエイリアス(別名)として設定します。

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

MXレコードは、メールの配送先を指定します。優先度(数値が小さいほど高い)を持ちます。

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

TXTレコードは、テキスト情報を格納します。SPF(メール送信元認証)やドメイン所有権の確認などに使われます。

example.com.    IN    TXT    "v=spf1 include:_spf.google.com ~all"

DNS名前解決の流れ

ブラウザでURLを入力してからWebページが表示されるまでの間に、DNS名前解決が行われています。

再帰クエリと反復クエリ

sequenceDiagram
    participant Client as クライアント
    participant Resolver as リカーシブリゾルバ
    participant Root as ルートサーバー
    participant TLD as TLDサーバー
    participant Auth as 権威サーバー

    Client->>Resolver: www.example.com は?(再帰クエリ)
    Note over Resolver: キャッシュ確認 → なし
    Resolver->>Root: www.example.com は?(反復クエリ)
    Root-->>Resolver: .com のTLDサーバーはこちら
    Resolver->>TLD: www.example.com は?(反復クエリ)
    TLD-->>Resolver: example.com の権威サーバーはこちら
    Resolver->>Auth: www.example.com は?(反復クエリ)
    Auth-->>Resolver: 93.184.216.34 です
    Note over Resolver: 結果をキャッシュ
    Resolver-->>Client: 93.184.216.34 です
クエリの種類 動作 使用場面
再帰クエリ リゾルバが最終回答を返すまで責任を持つ クライアント → リゾルバ
反復クエリ 次の問い合わせ先を教えて段階的に解決 リゾルバ → 各DNSサーバー

名前解決の全体の流れ

  1. ブラウザがローカルキャッシュを確認
  2. OSのDNSキャッシュを確認
  3. hostsファイルを確認
  4. リカーシブリゾルバに問い合わせ(再帰クエリ)
  5. リゾルバがキャッシュを確認
  6. キャッシュになければ、ルート → TLD → 権威の順に問い合わせ(反復クエリ)
  7. 結果をキャッシュして返答

DNSキャッシュとTTL

TTL(Time To Live)

TTLは、DNSレコードがキャッシュに保持される時間(秒)です。

example.com.    3600    IN    A    93.184.216.34
                ^^^^
                TTL = 3600秒(1時間)
TTL設定 秒数 メリット デメリット
短い(60秒) 60 変更が素早く反映 DNSクエリが増加
中程度(1時間) 3600 バランスが良い 変更反映に最大1時間
長い(24時間) 86400 DNSクエリ減少 変更反映が遅い

キャッシュの階層

flowchart TB
    subgraph Cache["DNSキャッシュの階層"]
        A["ブラウザキャッシュ"]
        B["OSキャッシュ"]
        C["ルーターキャッシュ"]
        D["ISPのリゾルバキャッシュ"]
    end
    A -->|miss| B -->|miss| C -->|miss| D
    style Cache fill:#3b82f6,color:#fff

キャッシュを利用することで、DNSの問い合わせ回数が削減され、名前解決が高速化されます。


digとnslookupコマンド

nslookup

nslookupは、DNS問い合わせを行う基本的なコマンドです。

# Basic A record lookup
nslookup example.com

# Specify record type
nslookup -type=MX example.com

# Use a specific DNS server
nslookup example.com 8.8.8.8

出力例:

Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   example.com
Address: 93.184.216.34

dig

dig(Domain Information Groper)は、より詳細なDNS情報を取得できるコマンドです。

# Basic query
dig example.com

# Query specific record type
dig example.com MX

# Short output format
dig +short example.com

# Trace the full resolution path
dig +trace example.com

# Query a specific DNS server
dig @8.8.8.8 example.com

# Reverse DNS lookup
dig -x 93.184.216.34

digの出力の読み方

;; QUESTION SECTION:
;example.com.                   IN      A

;; ANSWER SECTION:
example.com.            3600    IN      A       93.184.216.34

;; AUTHORITY SECTION:
example.com.            86400   IN      NS      a.iana-servers.net.

;; Query time: 25 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
セクション 内容
QUESTION 問い合わせた内容
ANSWER 回答(IPアドレス等)
AUTHORITY 権威サーバーの情報
ADDITIONAL 追加情報
Query time 応答にかかった時間

DNSセキュリティ

DNSの脆弱性

従来のDNSには、いくつかのセキュリティ上の問題があります。

flowchart TB
    subgraph Threats["DNSの脅威"]
        A["DNSスプーフィング<br/>偽の応答を返す"]
        B["DNSキャッシュポイズニング<br/>キャッシュに偽情報を注入"]
        C["DNS増幅攻撃<br/>DDoSに悪用"]
        D["盗聴<br/>クエリ内容の傍受"]
    end
    style Threats fill:#ef4444,color:#fff

DNSSEC(DNS Security Extensions)

DNSSECは、DNS応答にデジタル署名を追加することで、応答の改ざんを検知する仕組みです。

要素 説明
RRSIG リソースレコードのデジタル署名
DNSKEY 署名検証に使う公開鍵
DS 子ゾーンの鍵のハッシュ(信頼の連鎖)
NSEC/NSEC3 レコード不存在の証明
flowchart TB
    subgraph DNSSEC["DNSSECの信頼の連鎖"]
        Root["ルートゾーン<br/>トラストアンカー"]
        TLD[".com ゾーン<br/>DS + DNSKEY"]
        Domain["example.com ゾーン<br/>DS + DNSKEY"]
        Record["Aレコード<br/>RRSIG で署名"]
    end
    Root -->|DS| TLD -->|DS| Domain -->|RRSIG| Record
    style DNSSEC fill:#22c55e,color:#fff

DNS over HTTPS(DoH)とDNS over TLS(DoT)

従来のDNSクエリは平文で送信されるため、盗聴のリスクがあります。DoHとDoTは、DNSクエリを暗号化する技術です。

項目 従来のDNS DoT DoH
ポート 53(UDP/TCP) 853(TCP) 443(TCP)
暗号化 なし TLS HTTPS
ブロック検知 容易 可能(専用ポート) 困難(HTTPS混在)
対応サービス 全DNS Cloudflare, Google等 Cloudflare, Google等

まとめ

今日学んだことの整理

トピック キーポイント
DNSの役割 ドメイン名をIPアドレスに変換する「電話帳」
階層構造 ルート → TLD → 権威サーバーの分散構造
レコード種類 A、AAAA、CNAME、MX、NS、TXT、SOA、PTR
名前解決 再帰クエリ(クライアント→リゾルバ)と反復クエリ(リゾルバ→各サーバー)
キャッシュとTTL TTLで保持期間を制御、複数階層でキャッシュ
コマンド dig(詳細)とnslookup(基本)
セキュリティ DNSSEC(改ざん検知)、DoH/DoT(暗号化)

重要ポイント

  1. DNSはインターネットの基盤:ほぼすべての通信がDNSの名前解決から始まる
  2. 階層的で分散的:単一障害点を避け、スケーラブルな設計
  3. キャッシュが性能の鍵:TTLの設定は運用面で重要な判断
  4. セキュリティの進化:DNSSEC、DoH、DoTにより安全性が向上

練習問題

基礎レベル

  1. DNSの主な役割を説明し、なぜIPアドレスではなくドメイン名を使うのか理由を3つ挙げてください。
  2. 以下のDNSレコードの種類と用途を答えてください:A、CNAME、MX、TXT
  3. 再帰クエリと反復クエリの違いを説明してください。

中級レベル

  1. dig +trace example.com の出力を読み、名前解決の各ステップで何が起きているかを説明してください。
  2. TTLを60秒に設定した場合と86400秒に設定した場合のメリット・デメリットを比較してください。
  3. CNAMEレコードとAレコードの使い分けについて、CDNを利用する場合の例を挙げて説明してください。

上級レベル

  1. DNSSECの信頼の連鎖(Chain of Trust)の仕組みを、ルートゾーンから末端のレコードまで説明してください。
  2. DNS over HTTPSがネットワーク管理者にとって問題となる理由と、その対策を議論してください。
  3. 実際のドメイン(例:google.com)について、dig コマンドを使ってA、MX、NS、TXTレコードをすべて調べ、その結果を分析してください。

参考リンク


次回予告

Day 7: HTTPとWebの仕組み では、Webブラウジングの裏側で動いているHTTPプロトコルを学びます。HTTPメソッド、ステータスコード、ヘッダーの役割を理解し、HTTP/1.1からHTTP/3までの進化を追います。