DNSキャッシュについて混乱しています。小さなフォワードプロキシサーバーを作成していて、LinuxシステムでOS DNSキャッシュを使用したい。
私が正しく理解していれば、ブラウザレベルでDNSキャッシングがあります。次に、OSレベルでDNSキャッシングがあります(WindowsにはDNSキャッシングがあります。Linuxディストリビューションにデフォルトであるかどうかはわかりません)。
では、ブラウザ/ proxy_serverはOS DNSキャッシングをどのように使用しますか? DNSキャッシングについては、プロキシ内でLinuxを使用するのではなく、Linuxに依存できるかどうかを確認しようとしています。
ありがとう
Linux(およびおそらくほとんどのUnix)では、 nscd がインストールされて実行されていない限り、OSレベルのDNSキャッシュはありません。それでも、nscdのDNSキャッシング機能は、少なくともDebianでは 壊れている であるため、デフォルトでは無効になっています。実際の結果は、ご使用のLinuxシステムがOSレベルのDNSキャッシングを実行しない可能性が非常に高いことです。
アプリケーションに独自のキャッシュを実装することもできます( diegows のコメントによると、Squidの場合と同様です)が、それはお勧めしません。それは多くの作業であり、間違いを犯すのは簡単です(nscdが間違いを犯しました!!!)、おそらく専用DNSキャッシュほど簡単に調整できず、アプリケーションの外部に既に存在する機能を複製します。
DNSクエリの負荷が問題になるほど大きいか、外部DNSサーバーへのRTTが問題になるほど長いために、ソフトウェアを使用するエンドユーザーがDNSキャッシュを必要とする場合、次のようなキャッシュDNSサーバーをインストールできます。 nbound アプリケーションと同じマシンで、応答をキャッシュし、ミスを通常のDNSリゾルバーに転送するように構成されています。
LinuxでDNSキャッシングに使用できる他の2つのソフトウェアパッケージを次に示します。
DNS転送およびキャッシュ用のソフトウェアを構成した後、/ etc/resolv.confでシステムのDNSリゾルバーを127.0.0.1に設定します。
システムでNetworkManagerを使用している場合は、dns=dnsmasq
の/etc/NetworkManager/NetworkManager.conf
オプションを使用するか、接続設定を自動(アドレスのみ)に変更してから/etc/NetworkManager/dispatcher.d
ディレクトリのスクリプトを使用できます。 DHCPネームサーバーを取得するには、DNSネームサーバーをDNSキャッシュソフトウェアでDNS転送サーバーとして設定し、構成の再読み込みをトリガーします。
ここでは、dnsmasqを使用した DebianでのDNSキャッシング の例を利用できます。
構成の要約:
# Ensure you add this line
DNSMASQ_OPTS="-r /etc/resolv.dnsmasq"
# Your preferred servers
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 2001:4860:4860::8888
nameserver 127.0.0.1
次に、dnsmasqを再起動します。
DNS 1.1.1.1を使用したベンチマークテスト:
for i in {1..100}; do time Dig slashdot.org @1.1.1.1; done 2>&1 | grep ^real | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'
ローカルキャッシュDNSを使用したベンチマークテスト:
for i in {1..100}; do time Dig slashdot.org; done 2>&1 | grep ^real | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'
FirefoxにはDNSキャッシュが含まれています。 DNSキャッシュを無効にするには:
無効にすると、FirefoxはOSが提供するDNSキャッシュを使用します。