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

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

私は VPC 内の AWS EC2 で Ubuntu 14.04 インスタンスを実行しています。これらは、VPC が提供するネームサーバーを使用します。プロセスによる各 DNS ルックアップは、VPC ネームサーバーに送信されます。プロセスは多数のルックアップを実行しますが、一部は失敗し、結果としてプロセスがブロックされます。

これを修正するには、各マシンにローカル キャッシュ DNS リゾルバをインストールします。このリゾルバは をリッスンし127.0.0.1:53、ローカル プロセスにサービスを提供します。リゾルバは にリストされます。つまり、 DHCP 経由で動的に提供される VPC ネームサーバーの代わりに/etc/resolv.confを使用します。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で、おそらく私が望むことを実行しますが、非常に不明確です。)

Ubuntu 14.04 でローカル キャッシュ DNS リゾルバを実行するための「最適な」方法はどれですか? 特に、ローカル リゾルバをデフォルトの DHCP ネームサーバーに転送するにはどうすればよいでしょうか?

答え1

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

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

/etc/nsswitch.conf を更新し、hosts 行の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* 呼び出しをキャッシュ サーバー経由で正しくルーティングします。

関連情報