web-dev-qa-db-ja.com

Linuxは失敗したDNSサーバーを再試行し続けます

/etc/resolv.conf内のサーバーの1つに到達できない場合は常に、Linux/glibc/whateverはしばらく再試行しないほど賢くありません。これにより、多くのサービスが利用できなくなります。これは、多くのサービスがすべての着信接続(SSHなど)で逆ルックアップを実行し、最初のDNSサーバークエリのタイムアウトのためにハングするためです。

Ubuntuボックスが使用するDNSサーバーについてスマートにするにはどうすればよいですか? Digクエリに応答しないサーバーのiptablesにREJECTルールを挿入する毎分実行されるbashスクリプトをハックすることはできますが、そのようにはしたくありません...

ところで、Windowsはこれを適切に行うと言われています。

編集:これを/etc/resolv.conf(または/etc/resolvconf/resolv.conf.d/base)に入れることで少し回避しました:

options timeout:2 rotate

まだ完璧ではありませんが、より実行可能です。

5
Halfgaar

DNSサーバーが利用できなくなるのはなぜですか?それは私たちが修正に焦点を当てるべき問題です...

確定的な再試行順序が必要な場合は、rotateディレクティブを省略してください。 rotateは基本的にラウンドロビンルックアップを提供しますが、これは状況に望ましくない結果をもたらす可能性があります。

私のDNS/etc/resolv.confは次のようになりがちです:

search blah.net client.blah.net
options timeout 1
nameserver 172.16.2.14
nameserver 172.16.2.18

それを除けば、あなたdoは、ローカルマシンでキャッシングDNSサービスを使用するか、 ネームサーバーキャッシングデーモン)を有効にするオプションもあります。 (nscd)。これは、信頼性の低いDNSリゾルバーに伴う遅延を緩和するのに役立ちます。

5
ewwhite

うーん。私のシステムでこれと同じ問題に遭遇しました。プライマリDNSサーバーがオフラインになると、システム全体がせいぜい信じられないほど遅くなります。

実際、私はかなり前にこれについて同様の質問をしました: プライマリDNSサーバー障害のDNS/resolve.conf設定? 。そこには本当に良い答えがいくつかありました。

編集するだけで終わりました/etc/resolv.confタイムアウト値が低くなります。 (options timeout:1)主に、最も効果的ではなく、最も簡単な回避策だったためです。この変更は、サーバーがデッドリゾルバーを待つ時間を短縮することを意味します。ルックアップには10秒ではなく2秒かかります。バッチ以外のことを行おうとすると、これはひどいことですが、少なくともサービス障害はほとんど発生しません。

3