再帰問い合わせと反復問い合わせの違いとは?DNS名前解決の流れを理解する

再帰問い合わせと反復問い合わせ

再帰問い合わせと反復問い合わせの違い

DNSの名前解決を学習していると、「再帰問い合わせ(Recursive Query)」と「反復問い合わせ(Iterative Query)」という用語が登場します。

DNSがドメイン名からIPアドレスを調べる際には、複数のDNSサーバが連携して動作します。その際に利用される問い合わせ方式が再帰問い合わせと反復問い合わせです。

DNSサーバの構築やトラブルシューティングを行う際には、この2つの違いを理解しておくことが重要です。

本記事では、それぞれの仕組みや実際の通信の流れについて解説します。

DNS問い合わせには2種類ある

DNSの問い合わせ方式は大きく分けると次の2種類です。

  • 再帰問い合わせ(Recursive Query)
  • 反復問い合わせ(Iterative Query)

どちらも最終的には同じ名前解決を行いますが、問い合わせを行う主体が異なります。

再帰問い合わせとは

再帰問い合わせとは、「最終的な答えを取得して返してください」という問い合わせ方式です。

通常、クライアントPCはキャッシュDNSサーバに対して再帰問い合わせを行います。


PC
↓
キャッシュDNSサーバ
↓
最終結果を返す

クライアントは途中経過を気にする必要がありません。

例えば次の問い合わせです。


www.example.com のIPアドレスは?

キャッシュDNSサーバは最終的なIPアドレスを取得するまで処理を続けます。

クライアントは1回問い合わせるだけで済みます。

再帰問い合わせの流れ

キャッシュDNSサーバにキャッシュが無い場合です。


PC
↓
キャッシュDNS
↓
ルートDNS
↓
TLD DNS
↓
権威DNS
↓
IPアドレス取得
↓
PCへ応答

この一連の処理をキャッシュDNSサーバが代行します。

そのためクライアント側は非常にシンプルになります。

反復問い合わせとは

反復問い合わせとは、「自分が知っている情報だけ返します」という問い合わせ方式です。

ルートDNSサーバやTLD DNSサーバは反復問い合わせで動作しています。

例えばルートDNSサーバに次の問い合わせを行ったとします。


www.example.com のIPアドレスは?

ルートDNSサーバはIPアドレスを知りません。

その代わりに次のような情報を返します。


.com を管理しているDNSサーバはこちらです

つまり次に問い合わせるべきDNSサーバを教えてくれます。

反復問い合わせの流れ


キャッシュDNS
↓
ルートDNS

回答
↓
.com のDNSはこちら

キャッシュDNS
↓
TLD DNS

回答
↓
example.com のDNSはこちら

キャッシュDNS
↓
権威DNS

回答
↓
93.184.216.34

問い合わせる側が順番にたどっていくのが特徴です。

なぜ2種類あるのか

もしルートDNSサーバが再帰問い合わせに対応していた場合、世界中の名前解決処理をルートDNSサーバ自身が行う必要があります。

これは現実的ではありません。

そこで、ルートDNSサーバやTLD DNSサーバは反復問い合わせのみを担当します。

名前解決の負荷はキャッシュDNSサーバ側へ分散されています。

実際の名前解決での利用例

DNSでは両方の問い合わせ方式が組み合わされています。


PC
↓ 再帰問い合わせ
キャッシュDNS

キャッシュDNS
↓ 反復問い合わせ
ルートDNS

キャッシュDNS
↓ 反復問い合わせ
TLD DNS

キャッシュDNS
↓ 反復問い合わせ
権威DNS

最終結果取得
↓
PCへ応答

これが一般的なDNS名前解決の流れです。

digコマンドで確認する

通常の問い合わせです。


dig www.example.com

問い合わせの経路を確認したい場合は次のようにします。


dig +trace www.example.com

このコマンドでは、ルートDNS、TLD DNS、権威DNSを順番にたどる様子が確認できます。

Wiresharkで見る問い合わせ

WiresharkでDNS通信をキャプチャすると、DNS QueryとDNS Responseを確認できます。


dns

フィルタを設定するとDNS通信のみ表示できます。

企業ネットワークではクライアントとキャッシュDNSサーバ間の再帰問い合わせが主に観察されます。

BINDでの再帰設定

BINDでは再帰問い合わせを制御できます。

options {
    recursion yes;
};

キャッシュDNSサーバとして動作させる場合は有効にします。

権威DNSサーバでは無効化することもあります。

options {
    recursion no;
};

よくあるトラブル

再帰問い合わせが無効

キャッシュDNSサーバで再帰問い合わせが無効になっていると名前解決できません。

オープンリゾルバ

誰でも再帰問い合わせできる状態は危険です。

DDoS攻撃に悪用される可能性があります。

フォワーダ設定ミス

フォワーダと再帰問い合わせの設定を誤ると名前解決ループが発生することがあります。

実務で覚えておくべきポイント

  • PCはキャッシュDNSへ再帰問い合わせを行う
  • キャッシュDNSはルートDNSへ反復問い合わせを行う
  • ルートDNSは次の問い合わせ先を教えるだけ
  • TLD DNSも同様に次の問い合わせ先を返す
  • 権威DNSが最終的な回答を持つ

この流れを理解すると、DNS障害の切り分けが容易になります。

まとめ

再帰問い合わせは「最終的な答えを取得して返す問い合わせ方式」です。

一方、反復問い合わせは「自分が知っている範囲の情報だけ返す問い合わせ方式」です。

DNSではクライアントからキャッシュDNSへの問い合わせに再帰問い合わせが利用され、キャッシュDNSからルートDNS・TLD DNS・権威DNSへの問い合わせに反復問い合わせが利用されています。

DNSの仕組みを理解する上で、この2つの違いは非常に重要な知識です。名前解決の流れを理解すると、DNSサーバ構築やトラブルシューティングの理解も深まります。