DNSフォワーダーでループする?DNSサーバーでフォワードをお互いに設定すると

DNSサーバーAとDNSサーバーBに対し

  • DNSサーバーAのフォワーダーをDNSサーバーBに設定
  • DNSサーバーBのフォワーダーをDNSサーバーAに設定し

DNSサーバーAにフォワードするDNSクエリを問い合わせたら、フォワーダーのループはどのようになるでしょうか?

 

結論、無限ループせずにDNSクエリが失敗となる

image

上記のようなDNSふぁわーだーのループ構造を作った上で、DNSクエリをnslookupしたところ、
結果的に、クエリの数は増えましたがDNSクエリの無限ループはしなかったです。

DNSループは起きないんですね。

LinuxでDNSフォワーダーループ環境を構築した結果

  • CentOS Linux 7.3.1611
  • bind 9.9.4-37.el7

でDNSサーバーAとDNSサーバーBで構築。
DNSサーバーAから127.0.0.1に対し、nslookupでwww.aaa.comのクエリを送った結果、以下のようになった。

image

  1. 127.0.0.1へクエリを送り
  2. 2回フォワーダーによるループが発生
  3. 127.0.01へ再送されて
  4. 2回フォワーダーによるループが発生
  5. 127.0.01へ再再送、再再送されて
  6. 1回フォワーダーによるループが発生し終了。

少し謎めいた動きではありますが、
一回のnslookupのクエリに対し、9回のDNSのやり取りが発生しました。

 

WindowsでDNSフォワーダーループ環境を構築した結果

  • Windows Server 2012 R2
  • 役割と機能の追加よりDNS

でDNSサーバーAとDNSサーバーBで構築。
DNSサーバーAから127.0.0.1に対し、nslookupでwww.bbb.comのクエリを送った結果、以下のようになった。

image

テストは、

nslookup

server 127.0.0.1

set type=A

www.bbb.com.

を実行した結果です。

Windowsのクエリログの方が非常にわかりやすい表示ですね

  1. 127.0.0.1からDNSサーバーAがクエリを受けた
  2. DNSサーバーAからDNSサーバーBにクエリをフォワードした。
  3. DNSサーバーBからDNSサーバーAにクエリをフォワードした。
  4. DNSサーバーAから127.0.0.1に失敗を送る。
  5. DNSサーバーAからDNSサーバーBに失敗を送る。
  6. DNSサーバーBからDNSサーバーAに失敗が届く
  7. DNSサーバーBからDNSサーバーAに失敗が届く

IPアドレスの横のIDを確認すると、すべてのクエリに対し失敗が伝えられたことがわかる。
一回のnslookupのクエリに対し、7回のDNSのやり取りが発生しましたが、DNSフォワードの無限ループは起きませんでした。

 

WindowsサーバーでDNSクエリログを取得する設定方法

image

DNSサーバーを右クリックし、「プロパティ」を開く。
「デバックのログ」タブを開き、

  • 「デバックのためにパケットのログを記録する」にチェックを入れ
  • 「ファイルへのパスと名前」にログファイルのパスを書き

「OK」ボタンを押します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です