web-dev-qa-db-ja.com

Ubuntu 14.04でローカルキャッシュDNSリゾルバーを実行するにはどうすればよいですか?

VPCのAWSEC2でUbuntu14.04インスタンスを実行します。これらは、VPCが提供するネームサーバーを使用します。プロセスによる各DNSルックアップは、VPCネームサーバーに送信されます。私たちのプロセスは多くのルックアップを実行し、一部は失敗して、プロセスがブロックされます。

すべてのマシンにローカルキャッシュDNSリゾルバーをインストールしてこれを修正したいと思います。このリゾルバーは127.0.0.1:53をリ​​ッスンし、ローカルプロセスにサービスを提供します。リゾルバーは/etc/resolv.confにリストされます。つまり、DHCPを介して動的に提供されるVPCネームサーバーの代わりにnameserver 127.0.0.1を使用します。

これには、bind9nscddnsmasqdnscacheなどの代替プログラムがたくさんあります。しかし、/etc/resolv.confを手動で管理する方法はたくさんあるようです。ファイルを読み取り専用としてマークするか、/etc/network/interfacesを編集するか、/etc/dhcp/dhclient.confを編集します。どちらがお勧めですか?

もう1つの要件があります。ローカルリゾルバーは、DNS情報の信頼できる機関であるVPCネームサーバーにルックアップを転送します。ただし、リストしたプログラムはこのように動作しないようです。代わりに、ルックアップを事前構成されたルートネームサーバーに転送します。

理論的には、dhclient-scriptresolvconf、またはそのようなものをカスタマイズすることで、これを機能させることができます。 DHCPが提供するネームサーバーIPを取得し、それをローカルDNSリゾルバーの構成に挿入してから、ローカルDNSリゾルバーデーモンを再起動するフックを追加します。しかし、これはかなり毛深いので、私はそれを避けたいと思います。 (Ubuntu 14.04のデフォルトのスクリプトには、nscddnscacheに関する知識が組み込まれているようで、私が望むことを実行できる可能性がありますが、非常に不明確です。)

buntu 14.04でローカルキャッシングDNSリゾルバーを実行する「祝福された」方法はどれですか?特に、ローカルリゾルバーをデフォルトのDHCPネームサーバーに転送するにはどうすればよいですか?

1
jameshfisher

最も簡単な方法はおそらくnscdです。

デフォルトの設定を使用して、nscdをインストールします。

/etc/nsswitch.confを更新し、cacheの前にdnsをホスト行に追加します。 (編集:この部分は、ほとんどのLinuxディストリビューションで使用されているglibcには適用されませんが、fbsdでは必要です)

hosts: files cache dns

テスト

tcpdump -v -n 'port 53'
getent hosts superuser.com

Nscdのアップストリームを更新するために、/ etc/resolve.confをマングルしたり、dhcpリゾルバーをキャプチャしたりする必要はありません。 nsswitchは、glibcの一部であるため、キャッシュサーバーを介してgethost *呼び出しを正しくルーティングします。

1
Andrew Domaszek