Windows ではクライアントのDNSキャッシュはデフォルトで行われていますが、Linux はそうではありません。
そこで、LinuxクライアントでDNSキャッシュを行う方法、nscd と dnsmasq の2通りの説明です。
ここでは Ubuntu 14.04 での設定方法を説明します。
nscdの場合
nscd は、標準Cライブラリから発行される DNS問合せをキャッシュします。
標準Cライブラリ(libc(glibc))からDNS問合せを行うアプリで効果があり、大部分のアプリが該当します。
少数ですが、nslookup や dig コマンドといった直接DNSサーバへ問合せを行うコマンドでは効果がありません。
インストールです。
apt-get install nscd
これで、以降、DNS問合せがキャッシュされます。
DNSキャッシュが効いているかの確認方法
DNS問合せがキャッシュされているかは、root で次のコマンドを実行している状態で、別ターミナルやアプリからDNS問合せを行ってみます。
(終了する場合は、CTRL-C です)
tcpdump dst port 53 -q -n
DNS問合せが行われると、下記のような表示がその都度出ます。
一方、キャッシュが有効だと、初回はDNS問合せで下記の表示が出ますが、2回目以降はDNS問合せが行われず、下記の表示は出ません。
18:49:53.291581 IP 10.0.2.15.13085 > 192.168.1.1.53: UDP, length 39
例えば、次のコマンドを実行すると、2回目はキャッシュが効いていて上記の表示は出ません。
ping www.google.co.jp -c 3
なお、nscd は DNSに限らず名前解決を行えますが、DNSキャッシュを有効にしているのは次の箇所です。
ここを no にすると、DNSキャッシュが無効になります。
/etc/nscd.conf
enable-cache hosts yes
dnsmasqの場合
dnsmasq ではローカルにDNSキャッシュ用のデーモンが立ち上がります。
dnsmasq をインストールすると、DNSサーバの設定ファイル /etc/resolv.conf がローカルの DNSキャッシュデーモンを参照するように書き換えられます。
これにより、大部分のDNS問合せを行うアプリで効果があります。
nscd では効果が無かった、nslookup や dig コマンドでも効果があります。
なお、dnsmasq は NetworkManager の使用の有無でインストールや設定が変わります。
Ubuntu は通常 NetworkManager が使用されています。
NetworkManager 使用の場合
インストールです。
apt-get install dnsmasq-base
注意!!
dnsmasq-base は一旦インストールしたら、アンインストールせずに dnsmasq を無効化して下さい。
アンインストールすると NetworkManager も同時に削除されて、ネットワークが使用不可になります。
dnsmasq の無効化については後述しています。
デフォルトでは DNSキャッシュのサイズが 0 になっており、キャッシュが効いていないので、キャッシュサイズを設定します。
下記を追加します。
/etc/NetworkManager/dnsmasq.d/cache
cache-size=150
設定を反映させるために、NetworkManager を再起動します。
service network-manager restart
これで、以降、DNS問合せがキャッシュされます。
実際にキャッシュが効いているかは、先の nscd の場合の「DNSキャッシュが効いているかの確認方法」を参照して下さい。
参考までに、dnsmasq は次の箇所で、NetworkManager から起動されるように設定されています。
/etc/NetworkManager/NetworkManager.conf
[main] dns=dnsmasq
なお、dnsmasq-base は一旦インストールしたら、アンインストールせずに dnsmasq を無効化して下さい。
アンインストールすると NetworkManager も同時に削除されて、ネットワークが使用不可になります。
dnsmasq の無効化は次の手順で行います。
次のファイルを修正します。
/etc/NetworkManager/NetworkManager.conf
変更前 dns=dnsmasq 変更後 #dns=dnsmasq
NetworkManager を再起動します。
service network-manager restart
これで dnsmasq を無効化出来ました。
NetworkManager を使用していない場合
インストールです。
apt-get install dnsmasq
これで、以降、DNS問合せがキャッシュされます。
実際にキャッシュが効いているかは、先の nscd の場合の「DNSキャッシュが効いているかの確認方法」を参照して下さい。
以上、Linux でDNSキャッシュを行う方法でした。
参考
LinuxのDNSリゾルバはキャッシュはしないのか!知らなかった。。。:なんとなしの日記
nscdが保持しているキャッシュをクリアする – 元RX-7乗りの適当な日々
nscd(8): name service cache daemon – Linux man page
AmazonLinuxでDNSキャッシュを試してみた | Developers.IO
Ubuntu の DNS キャッシュ – plonk123の日記
dnsmasq – ArchWiki
Dnsmasq – Community Help Wiki
How to disable DNSMASQ in ubuntu 12.04(Precise) | Ubuntu Geek
コメント