Ubuntu Weekly Recipe
第20回 いろいろなキャッシュ:dnsmasq, cache proxy
Ubuntuを利用していく上で,一時的なデータをキャッシュすることで体感速度や利便性を向上させることができます。今回はターミナルからの設定に慣れることも兼ねて,キャッシュ関連の設定を行うレシピを紹介します。
preloadの利用
第8回で紹介したpreloadも一種のキャッシュです。詳細な使い方は第8回を参照してください。
DNSのキャッシュ――dnsmasqを使う
Webブラウザなどを用いてインターネットアクセスを行う場合,システム側では暗黙でDNS解決を行い,ホスト名からIPアドレスを取得しています。Windowsでは暗黙で,Mac OS XではlookupdがDNS解決の結果をキャッシュしていますが,Linuxではキャッシュを行わず,都度DNSサーバへ問い合わせを行ってしまいます。
ローカルでdnsmasqというDNSサーバを稼働させることで,これらのキャッシュと同等の処理を行わせよう,というのがこのレシピです。
ただし,極端に帯域が狭い環境でもない限り,最悪ケースでも100ms程度で名前解決が行えるはずですから,体感速度にはほとんど影響しません。ただし,DNSサーバへの負荷を下げることができますから,無意味ではありません。
dnsmasqのインストール
今回紹介するdnsmasqは,簡易DNSキャッシュサーバとして動作させるのに適した,小型のサーバプログラムです。キャッシュサーバとして動作させる場合,DNSの実装として代表的なbindに比べて非常に簡単に設定できます。さらに,上流のDNSサーバとして/etc/resolv.confに書かれたものを利用するため,ほとんど設定が必要なく,デスクトップ環境で使うのに非常に適しています。
dnsmasqのインストールは次のように行います。まずパッケージをインストールしましょう。
$ sudo apt-get install dnsmasq
dnsmasqは他のPCから参照することもできますが,今回はローカルでのみ動作させますので,/etc/dnsmasq.confの「listen-address=127.0.0.1」という行のコメントアウトを解除します。
--- /etc/dnsmasq.conf.orig
+++ /etc/dnsmasq.conf
@@ -87,7 +87,7 @@
#except-interface=
# Or which to listen on by address (remember to include 127.0.0.1 if
# you use this.)
-#listen-address=127.0.0.1
+listen-address=127.0.0.1
# If you want dnsmasq to provide only DNS service on an interface,
# configure it as shown above, and then use the following line to
# disable DHCP on it.
設定ファイルを修正したら,dnsmasqを再起動します。操作を行うと,以下の例のような表示が出力されるはずです。
なお,多くのホストにアクセスする場合は,cache-sizeパラメータを大きくし,キャッシュする容量を増やしておいた方がよいでしょう。
$ sudo /etc/init.d/dnsmasq restart * Restarting DNS forwarder and DHCP server dnsmasq ...done.
dnsmasqが正しく動作していることを確認するため,digコマンドを用いて出力を確認しましょう。「example.com. 66989 IN A 208.77.188.166」といった出力が得られれば問題ありません。
$ dig @127.0.0.1 example.com
resolv.conf/dhclient.confの設定
このままでは通常の名前解決にはdnsmasqは利用されませんので,resolv.confを修正します。/etc/resolv.confには「nameserver」で始まる既存のエントリがいくつか記述されているはずですが,以下のように,それらの先頭に「nameserver 127.0.0.1」を追加します。
nameserver 127.0.0.1
nameserver 208.77.188.166
これでシステムが利用するDNSサーバとして127.0.0.1(自ホスト)で動作しているdnsmasqが使われるようになります。以下のように,digコマンドの“SERVER”が127.0.0.1になったことを確認してください(ちなみに,nameserverを追加する前にdigを行った場合,SERVERは既存のDNSサーバを指しているはずです)。
$ dig | grep 127.0.0.1 ;; SERVER: 127.0.0.1#53(127.0.0.1)
また,デスクトップ環境として一般的な,DHCPクライアントとして利用する環境では/etc/resolv.confは起動時に(厳密にはDHCPによるアドレス取得のたびに)自動的に生成されます。逆に言えば,先ほど行ったnameserver行の追加を,都度行う必要があります。
これでは非常に使いにくいので,DHCPクライアントの設定を行い,生成されるresolv.confにnameserver 127.0.0.1行を自動的に追加するようにします。
/etc/dhcp3/dhclient.confにコメントアウトされた状態でサンプルとして入力されていますが,「prepend domain-name-servers 127.0.0.1;」という行を有効にしてください。これにより,以降自動生成されるresolv.confにはnameserver 127.0.0.1行が含まれるようになります。
DNSキャッシュのクリア
dnsmasqを利用している場合,DNSのキャッシュのクリアを任意のタイミングで行う必要が出てくる場合があります。典型的なのは,DNSラウンドロビンで構成されたサーバ群にアクセスする場合です(特に,yahoo.comなどの高度なDNSラウンドロビン制御を行っているサイトの場合,キャッシュがクリアできないと「詰む」ことがあります)。
そのような場合は,以下のコマンドでキャッシュをクリアすることが可能です。
$ sudo /etc/init.d/dnsmasq force-reload
Ubuntu Weekly Recipe
- 第107回 HandBrakeでリッピングしたDVDをNetWalkerで再生する
- 第106回 PulseAudioでリモートスピーカを使う
- 第105回 Acer Aspire Timeline 1410でUbuntu 9.10を動かす
- 第104回 標準搭載予定のPiTiViでビデオ編集
- 第103回 Deja Dupで簡単バックアップ
- 第102回 ImageMagickでコマンドラインから画像加工
- 第101回 玄柴(KURO-SHEEVA)ファーストインプレッション
- 第100回 Ubuntuを中心とした情報環境の紹介
- 第99回 uimを使用する
- 第98回 FreeNXでリモート・デスクトップ環境を実現する
- 2009年10月23日号 9.10のRC・UWN#164・今週のセキュリティアップデート
- 2009年9月18日号 NetWalkerの先行販売・9.10のAlpha 6・9.10の新機能(『ほぼ』確定版)その3・カウントダウンバナー・10.04のUDS・Firefoxのセキュリティアップデート
- 2009年9月10日号 9.10の新機能(『ほぼ』確定版)その2・Ubuntu Oneのサイト変更・UNRのUI完成・UWN#158
- 2009年9月4日号 9.10 Alpha5のリリース・9.10の新機能(『ほぼ』確定版)その1・Ubuntu Developer Week・UWN#157・Full Circle Magazine #28
- 2009年8月28日号 NetWalker PC-Z1,9.10のFeature Freeze・Encrypted swapのサポート・単位系の統一・UWN#156・Chromiumのx64サポート


