DNS — インターネットの電話帳

上級の解説は準備中のため、上級の内容を表示しています。

概要 — まず全体をつかむ

中級では名前解決の流れ・キャッシュ・レコードを見ました。上級では、誰が答えを持つのか・どうたどるのか・その答えが本物だとどう保証するのか(DNSSEC)・盗聴からどう守るのか(暗号化DNS)という「信頼と防御の仕組み」を掘り下げます。

詳細 — 1段階ずつ追う

権威サーバとリゾルバ——本人と代理人

DNSの登場人物は役割で3つに分かれます。混同すると全体像がぶれます。

  • スタブリゾルバ※1 — あなたの端末に組み込まれた最小の窓口。自分では探さず、フルサービスリゾルバに丸投げする
  • フルサービスリゾルバ※2 — 実際に世界中をたどって答えを集める代理人。キャッシュを持つのもここ(キャッシュDNSサーバとも呼ぶ)
  • 権威サーバ※3 — そのドメインの答えを正式に保持する本人。ゾーン(管理範囲)ごとにプライマリとセカンダリで冗長化する

つまり「端末が代理人に頼み、代理人が本人に聞く」二段構えです。答えを持っているのは常に権威サーバで、リゾルバはあくまで探して控える係にすぎません。

登場人物メモ:

  • ※1 スタブリゾルバ — 端末側の最小窓口。探索はせず丸投げする
  • ※2 フルサービスリゾルバ — 階層をたどって答えを集めキャッシュする代理人
  • ※3 権威サーバ — ゾーンの答えを正式に持つ本人。プライマリ/セカンダリで冗長化

ルートからたどる——反復問い合わせと再帰

中級で見た「ルート→TLD→権威」の流れを、問い合わせの種類まで正確にします。ここは取り違えやすい要所です。

  • 再帰問い合わせ — 端末(スタブ)がフルサービスリゾルバへ出す「答えそのものを持ってきて」という依頼。受けた側が最後まで責任を持つ

  • 反復問い合わせ — リゾルバがルート・TLD・権威へ順に出す「次はどこに聞けばいい?」という問い合わせ。各サーバは紹介(委任)だけを返す

  • ルートサーバ — 世界の目次。.com などTLDの権威の在りかを返す(13系統の名前で運用され、実体はAnycastで多数)

  • TLDサーバ.com の目次。example.com の権威の在りかを返す

  • 権威サーバexample.com 本人。最終的なレコードを返す

アニメーション『DNSの名前解決(再帰)』を開く
あなた(リゾルバ)ルートサーバTLDサーバ(.com)権威サーバ(example.com)
  • あなた(リゾルバ)名前からIPを調べる係。知らなければ上位へ聞きに行く
  • ルートサーバ住所帳の最上位(世界の目次)。「.com」の担当を教えてくれる
  • TLDサーバ(.com)「.com」を束ねる担当。「example.com」の担当を教えてくれる
  • 権威サーバ(example.com)この名前の最終回答(Aレコード)を持つサーバ
「▶ 再生」で通しで見るか、「次へ」で1手ずつ進めてください。
0 / 7

要点は「再帰は端末→リゾルバの1回だけ・リゾルバから上位への往復はすべて反復」という非対称です。リゾルバが階層を上りながら委任をたどり、最後に得た答えを1つにまとめて端末へ返します。

キャッシュ・TTL・ネガティブキャッシュ・レコード

毎回ルートからたどるのは重いので、リゾルバは答えをTTLの間だけ控えます。控えるのは「見つかった答え」だけではありません。

  • ポジティブキャッシュ — 見つかった答え(例 Aレコード)をTTLの間だけ保持
  • ネガティブキャッシュ※4 — 「その名前は存在しない(NXDOMAIN)」という否定の結果も一定期間キャッシュする。無駄な再問い合わせを防ぐため、期間はそのゾーンのSOAレコードの値で決まる

答えは用途別のレコードとして管理されます。中級のA/AAAA/CNAME/MXに加え、上級では土台となる3つを押さえます。

  • A/AAAA — 名前に対するIPv4/IPv6アドレス
  • CNAME — 別名(この名前は別の名前のエイリアス
  • MX — メールの宛先サーバ
  • NS — そのゾーンの権威サーバを指すレコード。委任はこれで表現される
  • TXT — 任意の文字列。SPFやドメイン所有証明などに使う
  • SOA — ゾーンの管理情報(プライマリ・シリアル番号・各種TTL)。ネガティブキャッシュの期間もここ

登場人物メモ:

  • ※4 ネガティブキャッシュ — 「存在しない」という結果の控え。SOAの値で期間が決まる

DNSSEC——署名で答えの正当性を守る

素のDNSには弱点があります。返ってきた答えが本物か確かめる手段がないのです。ここを埋めるのが DNSSEC です。

  • 権威サーバは各レコードに RRSIG(署名)を付け、検証用の公開鍵を DNSKEY で公開する
  • 上位ゾーンは子ゾーンの鍵の指紋を DS レコードとして持ち、「この子の鍵は正しい」と保証する
  • こうしてルート→TLD→権威と署名が数珠つなぎになり(信頼の連鎖)、応答が改ざんされていないことをたどって検証できる

考え方は 電子署名 とまったく同じで、「秘密鍵で署名し公開鍵で検証する」を階層に適用したものです。重要なのは、DNSSECは暗号化ではないという点。答えは平文のまま流れ、守るのは「盗聴」ではなく「すり替え」です。

キャッシュポイズニングと対策

DNSSECが必要な理由が、キャッシュポイズニング(キャッシュ汚染)です。

  • 攻撃の筋 — リゾルバが権威に問い合わせている隙に、攻撃者が偽の応答を先回りで送り込む。当たればリゾルバは偽IPをキャッシュし、以後その名前のアクセスが攻撃者のサーバへ吸い込まれる
  • なぜ成立しうるか — 素のDNSはUDPで、応答の正しさをトランザクションID送信元ポートの一致でしか確かめない。ここが推測されると偽装が通る(カミンスキー型攻撃)
  • 当座の対策 — トランザクションIDと送信元ポートをランダム化し、偽応答を当てにくくする
  • 根本の対策DNSSEC。署名を検証すれば、たとえ偽応答が先に届いても「署名が合わない」として捨てられる

つまりポート乱数化は「当たりにくくする」確率的な守り、DNSSECは「偽物を数学的に弾く」本質的な守り、という違いです。

Anycast——同じIPを世界中に置く

ルートサーバや大規模DNSは、Anycastで運用されます。

  • 同じIPアドレスを世界中の複数拠点から広告し、利用者は経路的に最も近い拠点へ自動的に届く
  • 効果は3つ——低遅延(近い拠点に当たる)・負荷分散(拠点で分ける)・DDoS耐性(攻撃も拠点ごとに吸収される)
  • 「13のルートサーバ」が世界の膨大なアクセスを捌けるのは、実体がAnycastで数百拠点に散っているからです

暗号化DNS——DoHとDoT

DNSSECは「答えの正しさ」を守りますが、やり取り自体は丸見えです。誰がどのサイトを引いたかは経路上で観測できてしまいます。これを隠すのが暗号化DNSです。

  • DoT(DNS over TLS)— DNSをTLSで包む。専用ポート853を使い、DNSだと分かる形のまま暗号化する
  • DoH(DNS over HTTPS)— DNSをHTTPSに載せる。ポート443で普通のWeb通信に紛れるため、DNSだけを狙って遮断・監視しにくい
  • どちらも守るのは経路上の盗聴・改ざんであり、DNSSEC(出自の署名)とは目的が別・両立可能

この名前解決はページ表示の第一歩です。引いたIPで実際に接続・注文・組み立てへ進む全体像は URLを開くと何が起きるか でたどれます。

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. DNSSECが提供する保証として正しいのは?

2. 暗号化DNS(DoH/DoT)とDNSSECの違いとして正しいのは?

3. 再帰問い合わせと反復問い合わせの関係として正しいのは?

4. 「その名前は存在しない(NXDOMAIN)」というネガティブキャッシュの保持期間を決めるのはどれ?

5. キャッシュポイズニングに対する「送信元ポートのランダム化」と「DNSSEC」の位置づけとして正しいのは?

6. ルートサーバや大規模DNSで使われるAnycastの説明として正しいのは?

7. 親ゾーンが子ゾーンの権威サーバを指し示し、委任を表現するのに使うレコードの種類を英字2文字で答えてください。

8. DoH(DNS over HTTPS)が普通のWeb通信に紛れるために使うポート番号を数字で答えてください。