Linux での DNS キャッシングに使用できる他の 2 つのソフトウェア パッケージを次に示します。
- dnsmasq
- 縛る
DNS 転送とキャッシュ用にソフトウェアを構成したら、/etc/resolv.conf でシステムの DNS リゾルバーを 127.0.0.1 に設定します。
システムが NetworkManager を使用している場合は、dns=dnsmasq
を使用してみてください。 /etc/NetworkManager/NetworkManager.conf
のオプション または、接続設定を [自動 (アドレスのみ)] に変更して、/etc/NetworkManager/dispatcher.d
でスクリプトを使用することもできます。 ディレクトリを取得して DHCP ネームサーバーを取得し、DNS キャッシュ ソフトウェアで DNS 転送サーバーとして設定してから、構成の再読み込みをトリガーします。
Linux (およびおそらくほとんどの Unix) では、nscd がインストールされて実行されていない限り、OS レベルの DNS キャッシュはありません。それでも、nscd の DNS キャッシング機能は、壊れているため、少なくとも Debian ではデフォルトで無効になっています。実際の結論としては、あなたの Linux システムは OS レベルの DNS キャッシングをまったく行わない可能性が非常に高いということです。
アプリケーションに独自のキャッシュを実装することもできます (diegows のコメントによると、Squid で行ったように) が、私はそれをお勧めしません。これは大変な作業であり、間違えやすい (nscd が間違っている!!!)、専用の DNS キャッシュほど簡単に調整できない可能性が高く、アプリケーションの外部に既に存在する機能を複製します。
DNS クエリの負荷が問題になるほど大きい、または外部 DNS サーバーへの RTT が問題になるほど長いために、ソフトウェアを使用するエンド ユーザーが DNS キャッシングを必要とする場合、Unbound などのキャッシング DNS サーバーをインストールできます。アプリケーションと同じマシンで、応答をキャッシュし、ミスを通常の DNS リゾルバーに転送するように構成します。
ここに、dnsmasq を使用した Debian での DNS キャッシングの例があります:ローカル DNS キャッシング、ManageaCloud に関する記事。
構成の概要:
/etc/default/dnsmasq
# Ensure you add this line
DNSMASQ_OPTS="-r /etc/resolv.dnsmasq"
/etc/resolv.dnsmasq
# Your preferred servers
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 2001:4860:4860::8888
/etc/resolv.conf
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 フォワーダー (dnsmasq) を使用したベンチマーク テスト:
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}'