[俺日記]

qmail on Mac OS X(not Mac OS X Server) 8回目/dnscacheを設定する。 / 2003-06-19 (木)

まず今回はMac OS XのGUIに戻ります。

ネットワークの設定を開きますと、内蔵 EthernetとかAirMacとか内蔵モデムとか表示されている「表示」というメニューがあります。このメニューの一番下には「ネットワークポート設定」という項目がありますので、それを選びます。チェックボックスとポートの名前が左側のボックスに、「新規...」「複製」「削除...」の三つのボタンが右に配置されています。ここで、内蔵イーサネット(何でもいいですけど、今使ってる奴)を選択して「複製」ボタンを押します。名前を付けろ、と要求されますので、何でもいいので適当に付けましょう(名前は重要でないです)。

さて、表示メニューで今複製した奴を選んで下さい。ここでIPアドレスを10.0.0.100に設定します、あとはコピー元と同じで構いません。終わったら「今すぐ適用」ボタンを押して保存します。

これでひとつのネットワークポートに二つのIPアドレスを持たせる作業は終了です。Terminalに戻りましょう。

dnscacheの設定には/usr/local/bin/dnscache-confを使います。終わり(嘘)。←しつこい
dnscache-confを単独で実行すると

% /usr/local/bin/dnscache-conf
dnscache-conf: usage: dnscache-conf acct logacct /dnscache [ myip ]

と表示されます。tinydns-confとほぼ同じですね。tinydnsと同様、

acct=dnscacheを実行するアカウント
logacct=dnscacheのログを取るアカウント
/dnscache=dnscacheが使うディレクトリ
myip=dnscacheが使うIPアドレス

です。こいつらを与えてやると、dnscache-confが最低限の設定をやってくれると言う寸法です。つーことで、

acct=dnscache
logacct=dnslog
/dnscache=/var/dnscache
ip=10.0.0.100

で設定しましょう。dnslogはtinydnsの使い回しです。tinydnsと同様、任意の名前で構いません。注意点も一緒です。

ではグループとユーザの作成です。shellをroot権限で動かしましょう。

% sudo ${SHELL}

グループをNetInfoに登録します。

# niload group . <<END
dnscache:*:532:
END

ユーザを登録します。

# niload passwd . <<END
dnscache:*:7503:532::0:0::/noexistent:/sbin/nologin
END

tinydnsのときとほとんど同じですね。登録したら、確認します。

# nidump group .|grep dnscache
dnscache:*:532:
# nidump passwd .|grep dnscache
dnscache:*:7503:532::0:0::/noexistent:/sbin/nologin

確認できたら、

# dnscache-conf dnscache dnslog /var/dnscache 10.0.0.100

と入力します。たぶん実行自体は一瞬で終わると思います(何も表示されません)。

では/var/dnscacheに移動しましょう。

# cd /var/dnscache

/var/dnscacheの中はこんな感じ。
drwxr-sr-x 7 root wheel 238 Jun 18 13:29 env/
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/CACHESIZE
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/DATALIMIT
-rw-r--r-- 1 root wheel 11 Jun 18 13:29 env/IP
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/IPSEND
-rw-r--r-- 1 root wheel 19 Jun 18 13:29 env/ROOT
drwxr-sr-x 5 root wheel 170 Jun 18 13:29 log/
drwxr-sr-x 2 dnslog dnslog 68 Jun 18 13:29 log/main/
-rwxr-xr-x 1 root wheel 50 Jun 18 13:29 log/run*
-rw-r--r-- 1 dnslog dnslog 0 Jun 18 13:29 log/status
drwxr-sr-x 4 root wheel 136 Jun 18 13:29 root/
drwxr-sr-x 3 root wheel 102 Jun 18 13:29 root/ip/
-rw------- 1 root wheel 0 Jun 18 13:29 root/ip/127.0.0.1
drwxr-sr-x 3 root wheel 102 Jun 18 13:29 root/servers/
-rw-r--r-- 1 root wheel 164 Jun 18 13:29 root/servers/@
-rwxr-xr-x 1 root wheel 141 Jun 18 13:29 run*
-rw------- 1 root wheel 128 Jun 18 13:29 seed

./envの中にはenvdirコマンドによってdnscacheに渡される環境変数が入っています。ファイル名が変数名、中身がその値です。ここには5つファイルがあります。IPはdnscacheがリクエストを待ち受けるIPアドレスです。

# cat env/IP
10.0.0.100

ROOTはdnscacheを動かすときにdnscacheがchrootするディレクトリです。

# cat env/ROOT
/var/dnscache/root

こんな感じですね。IPSEND,DATALIMIT,CACHESIZEはデフォルトで問題ないと思いますので、今回はいじりません。いじりたい人はここじゃなく他で調べた方がいいと思います:-)

./rootには2つのディレクトリがあります。
./root/ipには127.0.0.1という名前の空ファイルがあります。dnscacheは、ここにあるファイルの名前に一致するIPアドレスからのリクエストにしか返答しません。つまり、デフォルトでは自分自身(127.0.0.1)にしか返答しないわけです。今回は他のクライアントにも返答しますから、クライアントのIPアドレスを登録してやりましょう。登録は空ファイルを作るだけなので、簡単です。

# cd /var/dnscache/root/ip
# touch 10.0.0.101 10.0.0.102 ...

このように、全部のマシンの分ファイルを作ってもいいのですが、マシンを増やしたときにまた作業いなきゃいけません。それが面倒だ、という時は

# touch 10.0.0

とすることで、10.0.0で始まるIPアドレスからのリクエストを受け付けるようになります。ちなみに、今回の例だと

# touch 10

でもOKです。これだと10で始まるIPアドレスなら何でもOKになります。

./root/serversには@という名前のファイルがあります。これはDNS問い合わせの基点となるルートサーバのIPアドレスが書かれているのですが、実は最近変更になったサーバがあります。djbdnsのパッケージに含まれている@ファイルの内容は古いんで、これは更新しましょう。

# /usr/local/bin/dnsq ns . a.root-servers.net|grep additional|sort|awk '{print $5}' > /var/dnscache/root/servers/@

また、*.dyndns.example.jpの問い合わせが外に行かないように設定します。dnscacheは、@の他にファイルがあると、そのファイル名をドメイン名に含む問い合わせをそのファイルの中に書かれているIPアドレスに問い合わせます。そうでない場合はルートネームサーバを使って通常通りの解決を行います。今回は

dyndns.example.jp宛の問い合わせは10.0.0.101で受けるので、

# echo 10.0.0.101 > dyndns.example.jp
# echo 10.0.0.101 > 10.in-addr.arpa

とします。これで、*.dyndns.example.jpの問い合わせと、10.x.y.zの問い合わせは外ではなく10.0.0.101に行くようになります。

さて、これで設定が出来ました。dnscacheを稼動してみましょう。

# ln -s /var/dnscache /service

最大5秒待つとdaemontoolsがdnscacheを起動してくれます。

# svstat /service/dnscache /service/dnscache/log
/service/dnscache: up (pid 18042) 14 seconds
/service/dnscache/log: up (pid 18041) 14 seconds

秒数が0または1でpidが毎回変わるようだと失敗しています。設定を見直しましょう。秒数が順調に増えていれば起動していると思われます。

起動出来ていればroot権限での作業は終了です。CTRL+Dを入力してroot権限のシェルを終了させましょう。

ちゃんと名前が引けるかどうか確認してみましょう。

% dig @10.0.0.100 apple.com mx

(略)
;; ANSWER SECTION:
apple.com. 3h59m41s IN MX 10 mail-in2.apple.com.
apple.com. 3h59m41s IN MX 20 mail-in1.apple.com.
apple.com. 3h59m41s IN MX 30 mail-in.asia.apple.com.
apple.com. 3h59m41s IN MX 30 mail-in.euro.apple.com.
(略)

引けたかな?引けるのを確認したらネットワークの設定にあるDNSサーバのIPアドレスを10.0.0.100にして、ブラウザやメーラで接続出来るか確認してみましょう。

さて、次回はいよいよqmailのインストールです。気合い入れて行くぜー。←やる気無さげ