2008/10/13
LinuxはローカルにDNSキャッシュを持たないことを初めて知った
先日、とあるLinuxマシンをセットアップした時に、"apt-get upgrade"で最新のモジュールをダウンロード・更新していたところ、途中でモジュールがダウンロードできなくなってしまった。
調べてみると、通信はできるけど名前解決が出来ていないことが分かった。
で、しばらくすると名前解決が行えるようになり、ダウンロードが再開された。
Windowsでは暗黙で,Mac OS XではlookupdがDNS解決の結果をキャッシュしていますが,Linuxではキャッシュを行わず,都度DNSサーバへ問い合わせを行ってしまいます。
Ubuntu Weekly Recipe: 第20回 いろいろなキャッシュ:dnsmasq, cache proxy|gihyo.jp … 技術評論社
とのことなので、どうやら、小さいサイズ(数KB〜数十KB)のファイルを連続してダウンロードしていることで、DNSサーバに軽いアタック状態を行ってしまい、問い合わせ異常か何かで一時的に弾かれてしまっているようだ。なんてこったい。
これはあまり良くないなと思ったので、このLinuxマシンでDNSキャッシュを行えるようにするべく、"dnsmasq"をインストールして動かすようにした。
dnsmasqは,簡易DNSキャッシュサーバとして動作させるのに適した,小型のサーバプログラムです。キャッシュサーバとして動作させる場合,DNS の実装として代表的なbindに比べて非常に簡単に設定できます。さらに,上流のDNSサーバとして/etc/resolv.confに書かれたものを利用するため,ほとんど設定が必要なく,デスクトップ環境で使うのに非常に適しています。
Ubuntu Weekly Recipe: 第20回 いろいろなキャッシュ:dnsmasq, cache proxy|gihyo.jp … 技術評論社
とのこと。"/etc/resolv.conf"に上流のサーバも書いておけばいいのか。設定が楽チンなのはとても良いね。
$ sudo apt-get install dnsmasq
Debian/Ubuntuな環境ならインストールは↑のようにAPTコマンド一発で終了。
nameserver 127.0.0.1 nameserver xxx.xxx.xxx.xxx
あとは、"/etc/resolv.conf"を開き、↑のように既にある"nameserver"(1つ or 複数)の先頭に、"nameserver 127.0.0.1"を付け足して保存すれば、とりあえずの設定は完了。
# デフォルトのままだと、他マシンからもDNSサーバとして利用できますので、セキュリティ面はご留意を。
設定前は、↓のように別のDNSサーバを指していましたが、、、
$ dig 〜〜省略〜〜 ;; Query time: 17 msec ;; SERVER: 192.168.0.1#53(192.168.0.1) ;; WHEN: Mon Oct 13 03:12:30 2008 ;; MSG SIZE rcvd: 500
上記設定後は、↓のようにローカルのDNSを指すようになっています。
$ dig 〜〜省略〜〜 ;; Query time: 15 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Oct 13 03:13:15 2008 ;; MSG SIZE rcvd: 500
以上で、LinuxマシンにてDNSキャッシュを利用できるようにする作業が完了。
ただ、もしクライアントマシンのネットワーク設定をDHCPで行っている場合は当然ですが、毎回DHCPサーバから情報を取得するごとに、DNSの情報が書き換えられてしまいます。
# DHCPサーバから情報取得するたびに、"/etc/resolv.conf"が自動生成される。
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行が含まれるようになります。
Ubuntu Weekly Recipe: 第20回 いろいろなキャッシュ:dnsmasq, cache proxy|gihyo.jp … 技術評論社
ので、DHCPを有効にされている方は↑の設定をしておくと良いと思われます。
あと、気になるのはDNSキャッシュの有効期限ですね。"TTL"が短いサイトにアクセスする場合などで問題が出ないように。
私は今のところ、"dnsmasq"をそれほどヘビーに使う予定がないので、この部分までは調べきれていないのですが、設定で制御できないなら、定期的にキャッシュをクリーンする必要がありそうです。
参考
- Ubuntu Weekly Recipe: 第20回 いろいろなキャッシュ:dnsmasq, cache proxy|gihyo.jp … 技術評論社
- Dnsmasq - a DNS forwarder for NAT firewalls.
- 作者: Paul Albitz, Cricket Liu, ポールアルビッツ, クリケットリュウ, 高田広章, 小島育夫, 小舘光正
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2002/02/26
- メディア: 単行本
「この aptitude にはスーパー牛さんパワーなどはありません。」
すると、一番最後の行にこんなメッセージが。
$ aptitude -h 〜〜省略〜〜 この aptitude にはスーパー牛さんパワーなどはありません。
・・・???
誤訳かと思いましてね。訳される前のものを見てみたくなりました。
$ LANG=C aptitude -h 〜〜省略〜〜 This aptitude does not have Super Cow Powers.
(゚д゚;)
なんですか?「スーパー牛さんパワー」って?w
でも、調べてみるとすぐにわかりました。"イースターエッグ"(Easter Eggs)だそうです。
$ aptitude moo このプログラムにはイースターエッグ (隠し機能) はありません。 $ aptitude -v moo このプログラムには本当にイースター・エッグはありませんよ。 $ aptitude -vv moo このプログラムにイースターエッグはないって言わなかったかい? $ aptitude -vvv moo やめてくれ! $ aptitude -vvvv moo わかった、わかった。あんたにイースターエッグをあげればどっか行ってくれるかい? $ aptitude -vvvvv moo わかったよ。あんたの勝ちだ。 /----\ -------/ \ / \ / | -----------------/ --------\ ---------------------------------------------- $ aptitude -vvvvvv moo これが何なのか? もちろんウワバミに食べられた象だよ。 $ aptitude -vvvvvvv moo これが何なのか? もちろんウワバミに食べられた象だよ。
おぉぉ、aptitudeにこんなお茶目な一面があったなんて。
しかし、、、結局「スーパー牛さんパワー」って何だったんだろうか・・・?
$ apt-get moo (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ ...."Have you mooed today?"...
あぁ、これのことだったのか。apt-getで同じことをやると出現です。