dig で観察する DNS と DNSSEC の入口
dig の出力をセクション単位で読めるようになり、DNSSEC が何を守り何を守らないかを誤解なくつかむ。
dig — ここまでの全部を「目で見る」道具
第 5 章までで、DNS 応答を読むための概念は揃いました。誰が答えたか(第 1〜2 章)、何が返ったか(第 3〜4 章)、いつまで有効か(第 5 章)。この章では、それを実際の応答として観察する標準ツール dig を使えるようにします。
DNS の調査で最初にやるべきは、管理画面を開くことではなく実際の問い合わせ結果を見ることです。設定した「つもり」と、世界に返っている「現実」は、キャッシュや委任ミスでしばしば食い違うからです。dig の使い方で大事なのはオプションの暗記ではなく、出力の 4 つのセクションが何を表すかを知っていることです。
$ dig www.example.com A
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31201
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;www.example.com. IN A
;; ANSWER SECTION:
www.example.com. 300 IN A 203.0.113.10
| 見る場所 | 意味 | 最初に確認する観点 |
|---|---|---|
| status | NOERROR / NXDOMAIN / SERVFAIL などの結果 | 名前自体がないのか、型だけないのか(第 3 章の区別) |
| ANSWER | 最終 RRset。数字は TTL — キャッシュ応答なら残り秒数、権威サーバへの直接問い合わせなら設定値そのもの | 期待する名前・型・値が本当にあるか |
| AUTHORITY | NS や SOA などの補助情報 | referral なのか、否定応答(SOA が載る)なのか |
| ADDITIONAL | glue などの補助アドレス | 次へ進む足がかりが添えられているか |
覚えておくと便利な形を 2 つだけ: dig @8.8.8.8 www.example.com A のように @ で問い合わせ先を指定できます。再帰リゾルバに向ければ「このリゾルバのキャッシュには何が入っているか」、権威サーバに向ければ「権威はいま何を配っているか」を確かめる形です。リゾルバ相手に数秒おきに 2 回引いて TTL の数字が減っていれば、その答えはキャッシュ — 第 5 章の理屈を目で確認できます。結果の値だけ欲しいときは +short が便利です。
小問 6-1 — dig の最小限を読む
オプション暗記より先に、出力のどこに何が載るかを押さえます。
Q30. dig の出力で、最終的に得られた RRset が最も直接載る場所はどこですか。
ANSWER セクションが最終 RRset の置き場所です。QUESTION は聞いた内容の復唱、AUTHORITY は NS / SOA などの補助情報、ADDITIONAL は glue などの足がかりです。「ANSWER にあるか、AUTHORITY に何が載っているか」の 2 点だけで多くの状況が読めます。
Q32. dig の status: NXDOMAIN が直接意味するものはどれですか。
NXDOMAIN は「その名前がない」です。「名前はあるが型がない」(NODATA)の場合は status: NOERROR のまま ANSWER が空になり、AUTHORITY に SOA が載るのが典型です。第 3 章の区別が dig の画面上ではこう見える、という対応です。
+trace — フルミスの旅を再演する
dig +trace は、再帰リゾルバのキャッシュに頼らず root から委任を辿り直します。第 3 章のシミュレータで見たフルミス経路を、実物の DNS で再演するオプションだと考えてください。
$ dig +trace www.example.com A
. 518400 IN NS a.root-servers.net.
com. 172800 IN NS a.gtld-servers.net.
example.com. 900 IN NS ns1.example.com.
www.example.com. 300 IN A 203.0.113.10
各行は「どのゾーンが、誰に案内したか」の記録です。途中に古い NS や身に覚えのない委任先が現れたら、レコードの中身より先に委任の境界(zone cut)を疑います。「キャッシュ越しの眺め(普通の dig)」と「権威直行の眺め(+trace)」を見比べられることが、調査での大きな武器になります。
小問 6-2 — +trace で委任を辿る
どこで referral を受けたかを追えると、委任ミスの発見が速くなります。
Q31. dig +trace を使う主な目的として最も近いものはどれですか。
+trace は再帰リゾルバのキャッシュを使わず、root から委任を辿り直します。つまり第 3 章のフルミス経路を目の前で再演してくれるオプションです。委任先の NS が古い・親と子で食い違う、といった zone cut の事故はここで見つかります。
dig で見えるのは DNS 層だけ
「レコードを直したのに、サイトの表示が変わらない」— このとき DNS 層の外側も疑う必要があります。名前解決の先には、HTTP のレスポンスキャッシュ、CDN の edge cache、TLS のセッションと証明書、とそれぞれ独立した寿命を持つ層が積み重なっているからです。
- DNS 層 — 名前 → 値の解決結果。寿命は TTL。dig で観察できるのはここだけ。
- HTTP / CDN 層 — コンテンツそのもののキャッシュ。寿命は
Cache-Controlや CDN の設定で決まる。 - TLS 層 — 証明書の有効期限やセッション再利用。DNS とは無関係に振る舞う。
切り分けの手順は単純です。まず dig で DNS が新しい値を返しているかを確認する。このとき 1 つだけ注意 — 影響を受けている利用者と同じ経路で確認することです。ブラウザの DoH 設定や OS のキャッシュ、別ホストからの dig では、利用者と違うリゾルバの答えを見ている可能性があります。@ でその利用者が使うリゾルバを指定して引くのが確実です。同じ経路で新しい値が返っていれば原因は DNS より上の層、返っていなければ第 5 章の TTL 計算と委任の確認に戻る。この一手で、調査の半分が終わります。
小問 6-3 — DNS の TTL と他の層のキャッシュ
「直したのに直らない」の切り分けは、層を分けることから始まります。
Q29. DNS の TTL と、ブラウザの HTTP キャッシュや CDN の TTL の関係として正しいものはどれですか。
名前解決(DNS)、コンテンツ(HTTP / CDN)、接続(TLS)はそれぞれ独立したキャッシュや有効期限を持ちます。dig で観察できるのは DNS 層だけ。「DNS は新しい値を返しているのに表示が古い」なら、原因は DNS より上の層にあります。
DNSSEC — 何を守り、何を守らないか
最後に、dig の出力にしばしば顔を出す DNSSEC を「守備範囲の理解」に絞って押さえます。DNSSEC は DNS データに電子署名を付け、受け取った側が「この RRset は本当にそのゾーンの管理者が出したもので、途中で改ざんされていないか」を検証できるようにする仕組みです。
登場する型は最低限、次の 3 つで足ります。
dig +dnssec を付けると、署名付きの応答を要求できます。
$ dig +dnssec www.example.com A
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41203
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;www.example.com. IN A
;; ANSWER SECTION:
www.example.com. 300 IN A 203.0.113.10
www.example.com. 300 IN RRSIG A 13 3 300 20260601000000 (
20260501000000 12345 example.com.
abcDEF... )
注目するのは 3 点です。
flags: ... ad— Authenticated Data。問い合わせた再帰リゾルバが署名検証に成功した印。flags: do(OPT 内) — DNSSEC OK。クライアントが署名付き応答を要求した印。RRSIG行 — 直前の RRset(ここでは A)への署名。アルゴリズム(13 = ECDSA P-256)、署名の有効期間、鍵 ID(12345)が読み取れます。署名には有効期限があるため、更新運用が止まると期限切れで解決不能になる — DNSSEC 特有の障害はたいていこれです。
小問 6-4 — DNSSEC の守備範囲
「署名による検証」であって「暗号化による秘匿」ではない — ここを外さないように。
Q33. DNSSEC が提供するものにあてはまらないものはどれですか。
DNSSEC は「この答えは本物のゾーン管理者が出したもので、途中で書き換えられていない」ことを検証します。一方、誰が何を問い合わせたかは平文のまま流れます。秘匿が必要なら DoT / DoH という別の仕組みの出番です。
Q34. DS レコードの役割として最も近いものはどれですか。
DS は親ゾーン側に置かれ、子ゾーンの DNSKEY と結びつきます。委任(第 2 章)が NS で名前解決のバトンを渡すのと並走して、DS が信頼のバトンを渡す — 検証チェーンはこうして root から下のゾーンへつながります。
この章で持ち帰ること
- 調査は管理画面より先に dig で「現実に何が返っているか」を見る。読む場所は status / ANSWER / AUTHORITY / ADDITIONAL
+traceはフルミス経路の再演。委任の事故は普通の dig ではなく +trace で見つかる- dig で見えるのは DNS 層だけ。HTTP / CDN / TLS のキャッシュは別に切り分ける
- DNSSEC は署名による検証(起源認証・完全性)であって、暗号化による秘匿ではない
道具はすべて揃いました。最終章では、実際の障害を模したケース問題で総仕上げをします。