パソコン鳥のブログ

アクセスカウンタ

zoom RSS Linux で DNSキャッシュ

<<   作成日時 : 2016/03/01 20:00   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

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


テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Linux で DNSキャッシュ パソコン鳥のブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる