DNS委任チェーンの確認方法
目的
あるドメイン(例: subdomain.test.net)に対して、親ゾーン(test.net)側にNS委任レコードがまだ残っているかを確認する手順です。委任先が既に存在しない/削除されたリソースを指している場合、Dangling DNS(サブドメインテイクオーバーのリスク)の判定に使えます。
ステップ1: 親ゾーンの権威ネームサーバーを特定する
まず test.net 自体を管理している権威DNSサーバーがどこかを確認します。
$ dig test.net in ns
; <<>> DiG 9.20.18-1ubuntu2.1-Ubuntu <<>> test.net in ns
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: xxxx
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 3
;; QUESTION SECTION:
;test.net. IN NS
;; ANSWER SECTION:
test.net. 521 IN NS nsX-XX.example-dns.net.
...
;; ADDITIONAL SECTION:
nsX-XX.example-dns.net. 521 IN A 203.0.113.10
...
ポイント:
-
ANSWER SECTIONに返ってきたNSレコードが、test.netを実際に管理している権威DNSサーバーです。 -
ADDITIONAL SECTIONに、そのネームサーバーのIPアドレスも一緒に返ってくるため、次のステップでそのIPを直接使えます。 - ここでは特にオプションを付けず通常の(再帰)クエリで構いません。目的は「どのプロバイダーが権威DNSを運用しているか」を知ることだけだからです。
ステップ2: その権威サーバーに対して、非再帰(+norec)でサブドメインのNSを直接尋ねる
ステップ1で得たIPアドレス(例: 203.0.113.10)を使い、そのサーバー自身に「サブドメインについて何を知っているか」を直接聞きます。
$ dig +norec @203.0.113.10 subdomain.test.net in ns
; <<>> DiG 9.20.18-1ubuntu2.1-Ubuntu <<>> +norec @203.0.113.10 subdomain.test.net in ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: xxxx
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1
;; QUESTION SECTION:
;subdomain.test.net. IN NS
;; AUTHORITY SECTION:
subdomain.test.net. 86400 IN NS ns1-xx.otherprovider-dns.com.
subdomain.test.net. 86400 IN NS ns2-xx.otherprovider-dns.net.
...
ポイント:
-
+norec(non-recursive)を付けることで、問い合わせ先サーバーに「自分が直接知っている情報だけを返答してください(代理で他を調べないでください)」と指示します。 -
AUTHORITY SECTIONにNSレコードが返ってきた場合、それは親ゾーン(test.net)側が今もそのサブドメインを別のネームサーバー群に「委任している」ことを意味します。 - つまり、この応答が空でなければ、「NS委任レコードが親ゾーン側にまだ残っている」ことが確定します。
この2ステップで分かること
| ステップ | 確認できること |
|---|---|
①dig test.net in ns
|
親ゾーンの権威DNSがどのプロバイダーか(例: Akamai、Route53、Azure DNSなど) |
②dig +norec @<親の権威IP> subdomain.test.net in ns
|
親ゾーン側にサブドメインへのNS委任レコードが今も存在するか否か |
②で権威サーバーから直接NSレコードが返ってくる場合、それは「キャッシュに残っている古い情報」ではなく、親ゾーンの設定として現在も実際に委任されていることの直接的な証拠になります。この点が、通常の(再帰)nslookup との大きな違いです。再帰クエリだとキャッシュを経由してしまい、「今この瞬間に権威サーバーが何を答えるか」を正確に切り分けられません。
補足:委任先が「生きている」かどうかの追加確認
上記②で得られたNSサーバー(例: ns1-xx.otherprovider-dns.com)に対して、さらに以下のように問い合わせると、委任先で実際にゾーンが稼働しているか(=乗っ取られている可能性があるか)を確認できます。
$ dig +norec @ns1-xx.otherprovider-dns.com subdomain.test.net in a
-
aa(Authoritative Answer)フラグ付きでレコードが返ってくれば、委任先に実体のあるゾーンが存在していることになります。もしそのレコードが自社の管理していないIPを指していれば、Dangling DNS/乗っ取りの疑いが強まります。