- PR -

WindowsDNSで再帰クエリの禁止

投稿者投稿内容
すーずき
会議室デビュー日: 2004/11/29
投稿数: 5
投稿日時: 2004-11-29 12:06
お世話になります。


クライアントからある名前のIP解決をするにあたり、
クライアントのIPアドレスごとに違うIPを返す要件があります。

上位にBINDがあるので、VIEWステートメントを利用して、IPアドレスの解決を
行うことができると思うのですが、その場合、
クライアントが直接上位のBINDに問い合わせを行う必要があります。


クライアントはDC(Windows2000)上のDNSをプライマリに設定しており、
そのDNSで再帰クエリを禁止したいのですが、
GUIで見られる再帰を使用しない、再帰を無効にする では
要件を満たすことができません。




クライアントからの問い合わせで、自分で解決できない場合
上位のDNSをクライアントに紹介するだけの構成を作ることは可能でしょうか
(WindowsDNSでVIEW機能が使えればもっとよいのですが)。


アドバイスいただけると幸いです。

まるちねす
ぬし
会議室デビュー日: 2004/04/28
投稿数: 302
投稿日時: 2004-11-29 12:49
http://premium.nikkeibp.co.jp/win2000/special/trouble/index5.shtml

クライアントが同じWindows DNSを参照している状態で、同一ホスト名に対して
引けるIPアドレスをそれぞれ別物にするのって不可能ではないでしょうか。
同一ホスト名に対してcnameなど複数のレコードがあれば、ラウンドロビン
でかわりばんこに違うアドレスを返すことはできるでしょうが。

Windows DNS がクライアントのプライマリDNSになっていてセカンダリがBINDだと
した場合、プライマリDNSがオンラインでかつ、自分がゾーン情報を持たず、
上位DNSへも問い合わせず、結果クライアントにIPアドレスが見つからない
という結果を返した場合、クライアントはセカンダリDNSに問い合わせるのではなく、
そのようなIPアドレスは存在しない。ってことになり、問い合わせを終了してしまう
はずです。

しかし、
プライマリDNSがオフラインでいかなるクエリも処理することができない状態
ならば、セカンダリDNSに問い合わせます。
すなわち、ゾーンやホストごとにDNSを使い分けるのって無理っぽいです。
(Windows DNS がプライマリの場合)


UNIX互換OSには詳しくないのですが、上記URL内に次のような記述があります。

BIND 9では、viewステートメントを使用して、問い合わせ元クライアントや問い合わせ先ドメイン名によって見せるゾーンを変更したり、別々のフォワーダを指定したりでき、これも1つの解決方法です(Microsoft DNSサーバーには今のところそのような機能は実装されていません)。しかし、この機能に頼り過ぎると、無計画にActive Directoryドメインを作成し、互いに分断された複数の名前空間が社内に乱立することになります。

ということでBINDをプライマリにすればご希望のことができるのではないでしょうか。
綾瀬
ぬし
会議室デビュー日: 2002/07/31
投稿数: 393
お住まい・勤務地: どっちも3階
投稿日時: 2004-11-29 13:59
こんにちは。

環境が無いので思いつきで書きますが。

Win2000のDNSで「ある名前」についてはAレコードとかではなくて、
NSレコードを定義して上位のbindを指定するのはどうでしょうか。
再帰クエリを禁止にしてたらクライアントが自分からそのbindに対して
引きに行ってくれないかな、とちょっとだけ期待して。

あとは、Win2000のDNSもbindにしちゃうってのもアリかもしれませんが、
これはさすがに乱暴すぎますかね。

まるちねす
ぬし
会議室デビュー日: 2004/04/28
投稿数: 302
投稿日時: 2004-11-29 17:00
NT 4.0 SP4以降やWindows 2000のリゾルバでは、平行して複数のDNSサーバーへ問い合わせを行うなど様々な改良が行われています。
http://premium.nikkeibp.co.jp/win2000/special/trouble/index5.shtml


引用:
プライマリDNSがオンラインでかつ、自分がゾーン情報を持たず、
上位DNSへも問い合わせず、結果クライアントにIPアドレスが見つからない
という結果を返した場合、クライアントはセカンダリDNSに問い合わせるのではなく、
そのようなIPアドレスは存在しない。ってことになり、問い合わせを終了してしまう
はずです。



この部分の訂正です。2000ではセカンダリにも問い合わせを行うような
一文があるのですが・・・・・
検証不足なためダメダメなレスをつけてしまいましてもうしわけありませんです。
すーずき
会議室デビュー日: 2004/11/29
投稿数: 5
投稿日時: 2004-11-29 18:04
#長文失礼します。

お世話になります。
まるちねすさん、綾瀬さん、お忙しいところありがとうございます。


今回の環境についてなのですが、複数サイトでそれぞれADがたっています。
シングルドメイン環境で、クライアントのDDNS登録が必須なため、
ADのマルチマスター機能がどうしても必要になり、
残念ながらBINDへの移行は検討できません。


以下は私の検証内容です(DCのDNSをDNS、BINDをBINDと表記しています。
また、すべてこちらのテスト環境でのこと、ご承知置きください)。


クライアント(XP)はプライマリDNSとして自サイトのADを見ています。
VIEW機能のためのBINDはあるひとつのサイトにあり、
クライアントのセカンダリDNSとして設定します。


1.DNSでBINDへのフォワードを設定すると必ずDNSが自分でクエリしてしまい、
 クライアントのアドレスでのクエリはできません。

フォワード設定をはずして
2.DNSでルート(.)のゾーンを持たせてみるとDNSは問い合わせに対し
 自分の知らないものは存在しない、と自信を持ってNo such name を返します。
 クライアントはクエリは成功なので、処理を終了します
 (プライマリからの返事を待ち切れず、先にセカンダリに聞きにいくことがあります)。

3.DNSでルートのゾーンを持たせず、フォワードも設定がない場合、
 DNSは名前解決が不完全と判断し、Server failure を返します。
 クライアントはクエリが失敗したと判断してセカンダリにクエリを投げます。



上記3だと、あらかじめエラーを利用するような設計である点はさておき、
問題は解決だと思ったのですが、このあと、クライアントはどこでなにを覚えているのか
プライマリのDNSに問い合わせを行わなくなってしまいます
(はじめからセカンダリに問い合わせに行ってしまいます)。

BINDにDNSのセカンダリをやらせても
毎度サイト越えのクエリは大変なことになってしまいます。



綾瀬さんにアドバイスいただいたNSレコードを作ってというのは、
私の勘違いでなければ、ゾーンはあるのにレコードがないということで、
2.と同じ状況になってしまいました。



以上が現状です。


引き続き、なにかございましたらよろしくお願いいたします。
zousan
大ベテラン
会議室デビュー日: 2004/11/09
投稿数: 129
投稿日時: 2004-11-29 20:04
BINDのセカンダリを各サイトに置いて、各サイトのMS−DNSのフォワード先に指定する、しかないのでしょうか、WANトラフィックを下げるには。

この方法だと、すーずきさんは当然ご存知なわけですよね。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-11-30 00:58
こんばんわ.

bind で機能を満たせて Microsoft DNS service では満たせないなら,
いっそ bind で DDNS と resource record を引き受けたら如何でしょうか?
一応どちらも bind で support してますし...
zousan
大ベテラン
会議室デビュー日: 2004/11/09
投稿数: 129
投稿日時: 2004-11-30 11:16
それで実現できない主な機能は、
・マルチマスタ複製(bindはマスタのみ更新可能)
・セキュリティで保護された動的更新

ですから、大丈夫ではないでしょうか。

スキルアップ/キャリアアップ(JOB@IT)