VPCのAWSEC2でUbuntu14.04インスタンスを実行します。これらは、VPCが提供するネームサーバーを使用します。プロセスによる各DNSルックアップは、VPCネームサーバーに送信されます。私たちのプロセスは多くのルックアップを実行し、一部は失敗して、プロセスがブロックされます。
すべてのマシンにローカルキャッシュDNSリゾルバーをインストールしてこれを修正したいと思います。このリゾルバーは127.0.0.1:53
をリッスンし、ローカルプロセスにサービスを提供します。リゾルバーは/etc/resolv.conf
にリストされます。つまり、DHCPを介して動的に提供されるVPCネームサーバーの代わりにnameserver 127.0.0.1
を使用します。
これには、bind9
、nscd
、dnsmasq
、dnscache
などの代替プログラムがたくさんあります。しかし、/etc/resolv.conf
を手動で管理する方法はたくさんあるようです。ファイルを読み取り専用としてマークするか、/etc/network/interfaces
を編集するか、/etc/dhcp/dhclient.conf
を編集します。どちらがお勧めですか?
もう1つの要件があります。ローカルリゾルバーは、DNS情報の信頼できる機関であるVPCネームサーバーにルックアップを転送します。ただし、リストしたプログラムはこのように動作しないようです。代わりに、ルックアップを事前構成されたルートネームサーバーに転送します。
理論的には、dhclient-script
、resolvconf
、またはそのようなものをカスタマイズすることで、これを機能させることができます。 DHCPが提供するネームサーバーIPを取得し、それをローカルDNSリゾルバーの構成に挿入してから、ローカルDNSリゾルバーデーモンを再起動するフックを追加します。しかし、これはかなり毛深いので、私はそれを避けたいと思います。 (Ubuntu 14.04のデフォルトのスクリプトには、nscd
とdnscache
に関する知識が組み込まれているようで、私が望むことを実行できる可能性がありますが、非常に不明確です。)
buntu 14.04でローカルキャッシングDNSリゾルバーを実行する「祝福された」方法はどれですか?特に、ローカルリゾルバーをデフォルトのDHCPネームサーバーに転送するにはどうすればよいですか?
最も簡単な方法はおそらく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 *呼び出しを正しくルーティングします。