再帰DNSとは?

ドメイン名を機械可読IPアドレスに一致させるDNSルックアップでは、DNSツリーをたどるには、DNSサーバーまたはクライアントのいずれかを使用できます。

Share facebook icon linkedin icon twitter icon email icon

リカーシブDNS

学習目的

この記事を読み終えると、以下のことができます。

  • 再帰DNSを定義する
  • 再帰DNSクエリと反復DNSクエリを区別する
  • 再帰DNSクエリに関連する利点とリスクを理解する

再帰DNSとは?

再帰的DNSルックアップは、1つのDNSサーバーが他の複数のDNSサーバーと通信してIPアドレスを探し出して、クライアントに返す場合です。これは、クライアントがルックアップに関与する各DNSサーバーと直接通信する反復DNSクエリとは対照的です。これは非常に技術的な定義ですが、DNSシステムと、再帰と反復の違いを詳しく見ておくと理解に役立ちます。

DNSサーバーとは?

ユーザーがブラウザウィンドウにドメイン名(「cloudflare.com」など)を入力するたびに、DNSルックアップをトリガーします。DNSサーバーと呼ばれる一連のリモートコンピューターは、そのドメインのIPアドレスを見つけてユーザーのコンピューターに返し、正しいWebサイトにアクセスできるようにします。

DNSルックアップを完了するには、いくつかの異なるタイプのDNSサーバーが連携して動作する必要があります。 DNSリゾルバー、DNSルートサーバー、DNS TLDサーバー、およびDNS権限ネームサーバーはすべて、ルックアップを完了するための情報を提供する必要があります。 キャッシュの場合、これらのサーバーの1つは、以前のルックアップ中にクエリへの回答を保存している可能性があり、それをメモリから配信できます。

DNSルックアップの動作の詳細については、DNSサーバーとは?を参照してください。

再帰と反復の違いとは?

再帰と反復は、問題を解決する2つの異なる方法を説明するコンピューターサイエンスの用語です。再帰では、プログラムは条件が満たされるまで繰り返し自身を呼び出しますが、反復では、条件が満たされるまで一連の命令が繰り返されます。この微妙な違いは、コードの説明をすることなく説明するのが難しいですが、重要なことは、再帰は繰り返し自身を呼び出すソリューションであるということです。

たとえば、ジムが自宅で鍵を紛失し、これを見つける体系的な方法を探しているとします。再帰的な解決策は、ジムが鍵を見つけるまで探し続けることです。ジムは鍵探し始め、見つからない場合は、元の指示に戻り、鍵が見つかるまで探し続けます。反復的な解決策は、ジムが1つの部屋を5分間探し、指示に戻って次の部屋を5分間探し、鍵を見つけるか、探す対象の部屋のリストを全て網羅するまでこのサイクルを続けることです。

再帰的DNSルックアップと反復的DNSルックアップの違いを理解するために、再帰と反復を深く理解する必要はありません。再帰的ルックアップでは、DNSサーバーは、クライアント(多くの場合、ユーザーのオペレーティングシステム)に返答できるIPアドレスを得られるまで再帰を実施してDNSサーバーへのクエリを継続します。反復DNSクエリでは、各DNSクエリは問合せ対象の別のDNSサーバーのアドレスをクライアントに直接応答し、クライアントは、DNSサーバーのどれかが指定されたドメインの正しいIPアドレスで応答するまでDNSサーバーのクエリを続けます。

別の言い方をすれば、再帰DNSクエリではクライアントはある意味委任を実行します。クライアントは、DNSリゾルバに、「すみません、このドメインのIPアドレスが必要なので、突き止めてください。判明するまでは戻ってこないでください。」と伝えます。一方、反復クエリでは、クライアントはDNSリゾルバに「すみません、このドメインのIPアドレスが必要なので、ルックアッププロセスの次のDNSサーバーのアドレスを教えてください、そうしたら自分で検索します。」と伝えます。

再帰DNSの利点とは?

一般に、再帰DNSクエリは、反復クエリよりも速く解決する傾向があります。これはキャッシュによるものです。再帰DNSサーバーは、実行するすべてのクエリに対する最終回答をキャッシュし、その最終回答を一定時間( Time-To-Liveとして知られる)保存します。

再帰リゾルバーは、既にキャッシュにあるIPアドレス向けのクエリを受信すると、他のDNSサーバーと通信することなく、キャッシュされた回答をクライアントにすばやく提供できます。a)DNSサーバーが多くのクライアントにサービスを提供している場合、および/またはb)要求されたWebサイトが非常に人気がある場合、キャッシュから応答を迅速に提供する可能性が非常に高くなります。

再帰DNSの欠点とは?

残念ながら、オープンDNSサーバーで再帰DNSクエリを許可すると、攻撃者が DNSアンプ攻撃および DNSキャッシュポイズニングを実行できるため、セキュリティ上の脆弱性が発生します。

再帰DNSサーバーとDNSアンプ攻撃

DNSアンプ攻撃では、攻撃者は通常、マシンのグループ(ボットネットと呼ばれます)を使用して、 スプーフィングされたIPアドレスを使用して大量のDNSクエリを送信します。スプーフィングされたIPアドレスは、偽造の返信アドレスのようなものです。攻撃者は自分のIPからリクエストを送信していますが、応答を被害者に送信する求めます。攻撃を強化するために、攻撃者は増幅と呼ばれる手法も使用します。この手法では、スプーフィングされた要求が非常に長い応答を要求します。被害を受けたサービスは、長くて不要なDNS応答を大量に受け取り、サーバーを混乱させたり、停止させたりする可能性があります。これはDDoS攻撃の一種です。

これは、10代のいたずらのグループがピザ屋に電話をかけ、それぞれが10枚ずつピザを注文するようなものです。配達先住所として、自分の住所ではなく、そんなこととは夢にも思っていない隣人の住所を伝えます。被害者は、大量の不要なピザが次々と配達され、多くの混乱を経験するでしょう。

増幅されたDNSパケットは再帰DNSクエリに対する応答であるため、この種の攻撃を実行するには、再帰クエリを受け入れるDNSサーバーが必要です。

再帰DNSサーバーおよびDNSキャッシュポイズニング攻撃

DNSキャッシュポイズニング攻撃では、再帰DNSサーバーが別のDNSサーバーからIPアドレスを要求すると、攻撃者がその要求を傍受し、偽の応答を返します。これは多くの場合、悪意のあるWebサイトのIPアドレスです。再帰DNSサーバーは、元のクライアントにこのIPアドレスを送信するだけでなく、サーバーは応答をキャッシュに保存します。同じドメイン名のIPを要求するユーザーは、悪意のあるWebサイトに送信されます。一般的なドメイン名であり、一般的なDNSリゾルバである場合、この攻撃は何千人ものユーザーに影響を与える可能性があります。

反復DNSクエリでは、クライアントは各DNSサーバーに直接回答を求めます。攻撃者がクエリに対して偽造された応答を送信できたとしても、影響を受けるのは単一のクライアントのみであり、通常は攻撃者が時間をかける価値はありません。

高速かつ安全なDNSクエリをサポートする方法

CloudflareのマネージドDNSサービスは通常、競合他社のDNSまたはパブリックDNSよりも高速にDNSクエリを解決します。さらに、Cloudflare DNSは、DNSサーバーとクエリを安全に保つために設計された厳格なセキュリティプロトコルであるDNSSECをサポートします。