DNS101
DNSを図と演習で理解する
「レコードは変えたのに、まだ古いサーバに飛ぶ」「メールだけ届かない」— Web の不調のかなりの部分は、名前解決のどこかで起きています。この講座では DNS を丸暗記するのではなく、応答を見たときに「誰が答えたか・何が返ったか・いつまで有効か」を自分で追えるようになることを目指します。図で全体像をつかみ、各章の途中にある小問と計算問題で手を動かしながら進む構成です。
図 → 役割分担 → 計算 → dig
全 42 問
ブラウザ内採点
localStorage 保存
所要
3〜4 時間
問題数
全 42 問
形式
7 章 + 小問 + シミュレータ 2 種
費用
無料
DNS は 1 台の万能サーバではなく、役割の違うサーバ同士のバトンリレーです。まずこの全体像を頭に置くと、以降のすべての章が読みやすくなります。
この講座の特徴
本文のすぐ下に小問
読んだ直後に 1〜3 問ずつ解く構成なので、「分かったつもり」のまま先へ進みにくくなっています。
計算問題で手を動かす
TTL の残り秒数、cache miss の回数、MX 解決の段数、否定応答が消えるまでの待ち時間を、自分で数えます。
シミュレータ 2 種
第 3 章の再帰問い合わせシミュレータと第 5 章の TTL シミュレータで、問い合わせ回数とキャッシュの動きを目で確かめられます。
ブラウザ内採点・登録不要
全 42 問はブラウザ内で採点され、結果はお使いのブラウザの localStorage にだけ保存されます。サーバには何も送信しません。
この講座を貫く 5 つの見方
DNS の応答を読むとき、この講座では毎回同じ 5 つの観点に立ち返ります。章が進むごとに 1 つずつ道具が増えていくイメージです。
1. 誰に聞いているか
スタブ / 再帰リゾルバ / 権威サーバ。利用者が話している相手と、正解を持っている相手は別です。(第 1 章)
2. 委任の境界はどこか
zone cut — 親ゾーンと子ゾーンの責任が分かれる境界。トラブル時は「いまどのゾーンが権威か」に戻ります。(第 2 章)
3. 返答の種類は何か
権威応答 / キャッシュ / referral(次の行き先の案内)/ 否定応答。DNS の返事は「最終答え」だけではありません。(第 3 章)
4. 問いの型は何か
A / AAAA / CNAME / MX / TXT / ... 同じ名前でも、型が違えば答えは変わります。(第 4 章)
5. いつまで有効か
expires_at = fetched_at + TTL。変更がいつ見えるようになるかは、この式で決まります。(第 5 章)章構成
1 導入 — DNS は何に答えているか
5 問。DNS を「名前 + 型」への問い合わせと捉え、4 つの登場人物を区別します。
2 階層と委任 — ゾーンで責任を分ける
5 問。ドメインとゾーンの違い、zone cut、glue を実例で整理します。
3 再帰問い合わせ — 答えに辿り着くまで
6 問。root → TLD → 権威の流れをシミュレータで辿り、キャッシュで何回減るかを数えます。
4 レコード型 — A / AAAA / CNAME / MX / TXT / NS / SOA
6 問。主要な型を「どの問いに答えるか」で読み、CNAME と MX の落とし穴を押さえます。
5 キャッシュと TTL — 速さと鮮度のトレードオフ
6 問。
expires_at = fetched_at + TTL と negative caching を秒単位で手計算します。
6 dig で観察する DNS と DNSSEC の入口
6 問。dig のセクション構造、層別キャッシュの切り分け、DNSSEC の守備範囲を押さえます。
7 総合演習 — ケースで仕上げる
8 問。障害調査を模したケース問題で、全章の知識を横断して使います。
受講のコツ
- 本文 → すぐ下の小問の順で進めてください。まとめて後で解くより、読んだ直後に解くほうが定着します。
- 計算問題は暗算で済ませず、取得時刻・失効時刻・miss が起きる時刻を紙に書き出してください。手で書いた式は障害対応のときそのまま使えます。
- 第 3 章と第 5 章のシミュレータは、小問を解く前後に両方触ってください。数字の意味が体感に変わります。
- 第 7 章のケース問題でつまずいたら、対応する章へ戻って 1〜2 周だけ復習してください。全部やり直す必要はありません。
開始前の前提
- Web アプリや API を触った経験があれば十分です。
- IP アドレス、URL、サーバという単語を見たことがあれば進められます。
- 深いネットワーク理論や暗号理論は不要です。DNSSEC も「何を守り、何を守らないか」の範囲だけ扱います。