dnsmasqによるDNSキャッシュサーバ


はじめに

せっかく24時間稼働させているWebサーバマシンがあるのだから、DNSとしても働かせたいなぁと思ったのですが、BINDは少々大げさすぎるからもっとシンプルなDNS無いのかなぁって思ってた。そしたらdnsmasqという、DNSキャッシュとして動くアプリがあることが判明。Windows端末のDNS設定をこいつを使うように設定すれば、名前解決のレスポンス改善が期待出来る。ってことで入れてみることに決定。

Ports(/dns/dnsmasq)からインストール

portinstallというコマンドを使って、dnsmasqというツールをインストールします。既にPortsはCVSupで最新の状態にあると思いますので、下記の様にコマンドを入力すればインストールされるハズです。

$ cd /usr/ports/
$ portinstall -L /var/log/ports/ dns/dnsmasq

これでdnsmasqというツールがインストールされたと思います。

お次はdnsmasqの設定

設定と言っても簡単なこと。
/usr/local/etc/dnsmasq.conf.exampleというファイルを、/usr/local/etc/dnsmasq.confとするだけ。

$ cd /usr/local/etc
$ cp dnsmasq.conf.example dnsmasq.conf

一応エディタで開いてみると、なんだかよく分からない。だからとりあえずそのままにしておく。

dnsmasqの実行

dnsmasqの実行ファイル本体は、/usr/local/sbin/dnsmasqにあるみたい。
おもむろに下記のように入力して、dnsmasqを起動してみました。

$ /usr/local/sbin/dnsmasq
$ cd /var/run
$ ls

これでdnsmasq.pidが生成されていたら、dnsmasqの起動は成功だと思います。

resolv.confの記述変更

せっかくDNSキャッシュサービスを導入した訳ですから、まずは自前で名前解決させないと意味がないですよね。
というわけで/etc/resolv.confを記述変更します。

domain sasapurin.com
nameserver 127.0.0.1  ←まずは自分で名前解決させる
nameserver 210.153.1.1  ←自前で名前解決出来なかった場合は、プロバイダのプライマリDNSを使う
nameserver 210.153.1.9  ←プロバイダのプライマリDNSでダメだった時は、セカンダリDNSを使う

dnsmasqを自動起動させる(rc.dに登録する)

実行コマンドをシェルで記述しておいて、それを/usr/local/etc/rc.d/に置いておけば、FreeBSDを再起動した時に自動的にスタートアップしてくれるってのは、ずいぶん前に覚えた知識。簡単なシェルスクリプトを書いて、/usr/local/etc/rc.d/配下に置いておく。

$ cd /usr/local/etc/rc.d
$ touch dnsmasq.sh
$ ee dnsmasq.sh

#!/bin/sh
/usr/local/sbin/dnsmasq

これで準備OK。

クライアント(Windows端末等)のDNS設定を変更

さてさて、本当にDNSキャッシュの効果があるのか検証してみることに。
Windows端末のネットワークプロパティで、TCP-IPで使うDNSのアドレスを、dnsmasqが動いているマシンのIPアドレスに変更。
これで名前解決出来るなら動作OK、名前解決出来ないならなにか問題ありと判断。

実際にやってみたら上手く行きました。インターネットブラウザを使って色々なサイトを適当に訪れてみる。
一回目はキャッシュに情報が無いので、プロバイダのDNSに問い合わせているハズだから少し待たされる。
しかし二回目に同じサイトにアクセスすると...おおっ一瞬で名前解決されたみたい。どうやら成功だ。