MacOSXでWebサイト開発しやすいようにDNSサーバを動かしてみた

 iTunes Store(Japan)
この記事の所要時間: 415

ローカル環境でサイトの開発をする際にVirtualHostでサイトを立ち上げ、ホスト名をhogehoge.localhostとつけることが多いですが、サイトにアクセスするためには、
・/etc/hostsにURLを記述する
・DNSサーバを用意し、個々のサイトを登録する
・サイトごとに異なるポート番号を振る
などあるかと思います。

以前は、ローカルネットワーク向けにWindows Server 2008 R2でDNSサーバを設置していました(前編後編)が、そのネットワーク外に移動した場合、ネットワークから外れる場合は、/etc/hostsに都度記述していましたが、いちいち登録するのが面倒なので、ローカルマシン内にDNSサーバを立てることにしました。あと、ローカルにキャッシュされるので少なからず名前解決のレスポンスは通常よりは速くなるかと思ったのでw

さて、Lionに収録されているDNSサーバはBIND 9.7.3(2011/09/11現在)で、/usr/sbinに「named」としてインストールされています。

$ named -v
BIND 9.7.3
$ which named
/usr/sbin/named

named を起動しようとしても /etc/rndc.key が存在しないため、起動しに失敗してしまいます。そのため、事前に /etc/rndc.key を生成しておく必要があります。

$ sudo rndc-confgen -a
Password:
wrote key file "/private/etc/rndc.key"

次に、ルートネームサーバの情報が記述されたファイル(ルートサーバリストファイル)を更新します。Lionにはすでにファイルがあるのですが、2010年6月17日現在の情報なので最新の情報を取得しておきます。

$ cd /var/named
$ sudo mv named.ca named.old
$ sudo curl -O ftp://ftp.rs.internic.net/domain/named.root
$ sudo mv named.root named.ca

次に、hogehoge.localhostが解決できるようにゾーンファイルを記述します。

$ cd /var/named
$ sudo vi localhost.zone

ただし、サイトを作成するたびにゾーンファイルを修正するのは面倒なのでワイルドカード(*.localhost)で解決できるように指定します。

$TTL    86400
$ORIGIN localhost.
@                       1D IN SOA       @ root (
                                        43              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                        1D IN NS        @
                        1D IN A         127.0.0.1
*                       1D IN A         127.0.0.1       ; ←この行を追加

注意:Serialは適度に現状より大きい数字を与えてください。
追加したら起動しますが、バックグランドで動作させたいので launchctl を使って起動させます。

$ sudo launchctl load -F /System/Library/LaunchDaemons/org.isc.named.plist

ちなみに、停止させるためには以下のコマンドを投下します。

$ sudo launchctl unload -F /System/Library/LaunchDaemons/org.isc.named.plist

これでローカルマシン内にDNSサーバを設置したため、*.localhostへのアクセスが自宅内に設置しなくても大丈夫になり、開発はしやすくなりました。