DNSをキャッシュすると速くなる。

一年で一番嫌いな季節がやってきます。梅雨から夏にかけては嫌いです。東京暑いし。
・・・まぁ、冬が好きかと聞かれると、「雪が降らなければ」という雪国の人間らしい(?)答えが返るわけですが。

さて、w3m爆速化計画(何)を実行していましたところ、polipoの設定を弄るのに併せて、
DNSをローカルにキャッシュすることで、今迄の数倍(体感です)の速度を手にいれることができました。

どこかで(どこかは忘れましたが)、linuxDNSをローカルにキャッシュしないため、リクエストの度にDNSサーバに問い合わせを行うので、その分遅くなるという
話を聞いたことがあり、その際dnsmasqというのを知りました。

存在は知っていても今迄使ったことは無かったのですが、Gentooなら

emerge dnsmasq

で一発導入が可能でしたので入れてみました。かなり快適でございます。
通常の使用なら特に問題ありませんが、DHCPな環境の場合、起動の度に(正確にはDHCPからIPアドレスを受け取った時)/etc/resolv.confがリセットされてしまいます。
この場合、毎回先頭行にnameserver 127.0.0.1を記述しなければならないので、非常に面倒です。

で、毎回起動時に上記を設定する方法ですが、とりあえずdnsmasqのmanを読んだ限りでは、次のようにやればよいようです。

まず、/etc/resolv.dnsmasq というファイルを作成し、次の内容を記述します。

# touch /etc/resolv.dnsmasq
# echo nameserver 127.0.0.1 > /etc/resolv.dnsmasq

そして、/etc/dnsmasq.conf のresolv-file=の行の先頭から # を削除して、次のように編集します。

resolv-file=/etc/resolv.dnsmasq /etc/resolv.conf

一つめに記述したresolv.dnsmasqのアドレス(この場合はループバックアドレス)とdnsmasqがbindして、その次の/etc/resolv.confに記述されている
nameserverをupstreamとして利用します。

・・・いや、よくわかってないんですけどね(汗
つまりDNSに問い合わせが走ると、最初にdnsmasqが走り、キャッシュされていればそれをそのまま返し、キャッシュされておらず、/etc/hostsにも無い場合には、
upstreamとして登録されたDNSサーバにforwardする、という処理になります。

この設定をしておくと、最初の一回以外はDNS問い合わせの必要が無くなるため、基本的にパフォーマンスが上がります。
それに加え、polipoのパイプライン処理とかでさらに爆速になります。

firefoxとかと組み合わせてもかなりの速度が期待できると思います。動画とDropbox専用なので私は特に設定していませんが・・・。

ここちがくね?などありましたら遠慮なく指摘してやってください。