私は 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* 呼び出しをキャッシュ サーバー経由で正しくルーティングします。