web-dev-qa-db-ja.com

resolv.confオプションが尊重されない

Resolv.conf内に「optionsrotate」ディレクティブを実装して、そのファイルにリストされているネームサーバーを介してDNSルックアップをローテーションさせることを望んでいました。私が理解しているように、それがこの指令のポイントです。これまでに試したどのシステムでも動作しません。ファイル内の最初のネームサーバーディレクティブを常に使用し、エラーがない限り残りを無視します。

DNSサーバーを模倣し、要求に関係なく常に同じ偽の192.168.1.1アドレスで応答する偽のDNS pythonスクリプトを使用してテストしました。ファイルの最初に配置すると、常に次の場所に移動します。このサーバーと2番目に配置された場合、ファイルは "options rotate"ディレクティブに含まれています。

# cat /etc/resolv.conf
search some.toplevel
options rotate
nameserver 10.0.0.2 <- fake python DNS server
nameserver 10.0.0.3 <- real DNS server

偽のDNSサーバーPythonスクリプトを使用

また、DigコマンドとHostコマンドを使用しました。彼らがresolvライブラリを利用していることを確認しました。私はこれをCentOS5.6と、関連パッケージのまったく異なるバージョンを使用した個人のubuntuで試しました。私はここで完全に困惑しています、これについていくつかの助けが必要です。

4
CarpeNoctem

これについてのヒントは http://docstore.mik.ua/orelly/networking_2ndEd/dns/ch06_01.htm :にあります。

つまり、リゾルバーのインスタンスは、resolv.conf内のファーストネームサーバーを最初に照会しますが、次に検索するドメイン名については、2番目のネームサーバーを最初に照会します。

ほとんどのプログラムはリゾルバーを初期化し、名前を検索して終了するため、多くのプログラムはこれを利用できないことに注意してください。ローテーションは、繰り返されるpingコマンドには影響しません。たとえば、各pingプロセスはリゾルバーを初期化し、resolv.conf内の名サーバーにクエリを実行してから、リゾルバーを再度使用する前に終了します。 pingを連続して呼び出すたびに、前のネームサーバーが使用したネームサーバーがわからないか、pingが以前に実行されたことがわかりません。ただし、sendmailデーモンなど、多数のクエリを送信する長期間有効なプロセスは、ローテーションを利用できます。

10
ott--

'Dig'コマンドと 'Host'コマンドは1つのクエリしか実行しないため、クエリをローテーションすることはできません。ローテーションには、複数のクエリを発行するプログラムが必要です。 (これは文字通りのローテーションであり、ランダムな配布ではありません。最初のクエリは最初のサーバーに送信され、2番目のクエリは2番目のサーバーに送信されます。)

ほとんどのプログラムはリゾルバーを初期化し、名前を検索して終了するため、多くのプログラムはこれを利用できないことに注意してください。ローテーションは、繰り返されるpingコマンドには影響しません。たとえば、各pingプロセスはリゾルバーを初期化し、resolv.conf内の名サーバーにクエリを実行してから、リゾルバーを再度使用する前に終了します。 pingを連続して呼び出すたびに、前のネームサーバーが使用したネームサーバーがわからないか、pingが以前に実行されたことがわかりません。ただし、sendmailデーモンなど、多数のクエリを送信する長期間有効なプロセスは、ローテーションを利用できます。 -- O'Reilly、DNSおよびBind

4
David Schwartz