Linux が resolv.conf にリストされているバックアップ DNS サーバーにフェイルオーバーするまでの時間を調整する

Linux が resolv.conf にリストされているバックアップ DNS サーバーにフェイルオーバーするまでの時間を調整する

resolv.conf現在、私は次のようなプレーンな Linux 構成を使用しています。

nameserver 123.123.123.123
nameserver 8.8.8.8

123.123.123.123 がダウンすると、DNS クエリが不可能になり、遅くなります。Linux は毎回最初のクエリを再試行すると思います。Linux をこれに対してより賢くする方法はありますか? ヘルス チェックか何かでしょうか? それとも、どのようにresolv.conf動作するべきかを私が誤解していますか?

答え1

ewwhite の素晴らしい回答に加えて、いくつか補足があります。

これを追加することができます/etc/resolv.conf

options timeout:1 attempts:1 rotate

デフォルトは時間:5、試行回数:2です

何が起こるかというと、ローテート オプションがない場合、リゾルバ ライブラリは/etc/resolv.conf上から下にリストされているネームサーバーを使用しようとします。ローテートがある場合は、ラウンドロビン選択を行います。リゾルバがリストの一番下まで移動し、サーバーが X 秒以内に応答しない場合 (X はタイムアウト パラメータと見なします)、ラウンドロビン選択のプロセス全体を Y-1 回 (Y は試行回数) 繰り返します。

ただし、resolv.conf のオプションをテストする際には、dig などのコマンドは使用しないよう注意してください。これらのコマンドは、リゾルバ ライブラリを回避し、ネーム サーバーに直接問い合わせます。getent hosts を使用する方が適しています。glibc リゾルバを使用するものはすべて、/etc/resolv.confファイルに従わなければならないことに注意してください。

答え2

これは で説明されていますman resolv.conf

タイムアウト オプションの 1 つを試して、デフォルトを 5 秒から 1 秒に下げてみてください...

options timeout:1
nameserver 123.123.123.123
nameserver 8.8.8.8

しかし、実際には、DNS には非常に多くの回復力があるため、低解像度のタイムアウトなしでも問題ありません。より優れたパブリック DNS を選択したり、独自の内部リゾルバを実行したりすることは可能ですか?

関連情報