[俺日記]

qmail on Mac OS X(not Mac OS X Server) 7回目/tinydnsを設定する。 / 2003-06-18 (水)

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

% /usr/local/bin/tinydns-conf
tinydns-conf: usage: tinydns-conf acct logacct /tinydns myip

なんて表示されますね。これは、

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

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

acct=tinydns
logacct=dnslog
/tinydns=/var/tinydns
ip=10.0.0.101

で設定しましょう。任意の名前で構いませんが、その場合は以下の説明を読み替えてください。その場合は、エディタにでもコピーして置換すると間違いが少ないと思います。

まずはグループとユーザの作成です。niloadというコマンドを使って、NetInfoにグループとユーザを登録します。

まずshellをroot権限で動かしましょう。

% sudo ${SHELL}

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

# niload group . <<END
tinydns:*:530:
dnslog:*:531:
END

次に、ユーザを登録します。

# niload passwd . <<END
tinydns:*:7501:530::0:0::/noexistent:/sbin/nologin
dnslog:*:7502:531::0:0::/noexistent:/sbin/nologin
END

530,531,7501,7502は任意の数字で構いませんが、他のグループ・ユーザのIDと重複しない事と、ここで同じ数字が入っているところは必ず一致させておく必要があります。

nidump passwd .

または

nidump group .

でそれぞれユーザ・グループの設定が確認できます。/etc/passwdや/etc/groupに書く必要はありませんし、書いても反映されませんのでご注意を。

登録したら、確認します。

# nidump group .|grep dns
tinydns:*:530:
dnslog:*:531:
# nidump passwd .|grep dns
tinydns:*:7501:530::0:0::/noexistent:/sbin/nologin
dnslog:*:7502:531::0:0::/noexistent:/sbin/nologin

確認できたら、

# tinydns-conf tinydns dnslog /var/tinydns 10.0.0.101

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

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

# cd /var/tinydns

/var/tinydnsの中はこんな感じ。
drwxr-sr-x 4 root wheel 136 Jun 17 10:13 env/
-rw-r--r-- 1 root wheel 11 Jun 17 10:13 env/IP
-rw-r--r-- 1 root wheel 18 Jun 17 10:13 env/ROOT
drwxr-sr-x 5 root wheel 170 Jun 17 10:13 log/
drwxr-sr-x 2 dnslog dnslog 68 Jun 17 10:13 log/main/
-rwxr-xr-x 1 root wheel 50 Jun 17 10:13 log/run*
-rw-r--r-- 1 dnslog dnslog 0 Jun 17 10:13 log/status
drwxr-sr-x 9 root wheel 306 Jun 17 10:13 root/
-rw-r--r-- 1 root wheel 44 Jun 17 10:13 root/Makefile
-rwxr-xr-x 1 root wheel 77 Jun 17 10:13 root/add-alias*
-rwxr-xr-x 1 root wheel 79 Jun 17 10:13 root/add-childns*
-rwxr-xr-x 1 root wheel 76 Jun 17 10:13 root/add-host*
-rwxr-xr-x 1 root wheel 74 Jun 17 10:13 root/add-mx*
-rwxr-xr-x 1 root wheel 74 Jun 17 10:13 root/add-ns*
-rw-r--r-- 1 root wheel 0 Jun 17 10:13 root/data
-rwxr-xr-x 1 root wheel 98 Jun 17 10:13 run*

./logはログが置かれるディレクトリです。tinydnsの場合は、中を見ることはあってもいじることはまずないので省略。ログを見るときは

# tail -f /var/tinydns/log/main/current | tai64nlocal

とするとリアルタイムで見られます。リアルタイムで見ないなら

# tai64nlocal < /var/tinydns/log/main/current | less

などとするといいでしょう。

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

# cat env/IP
10.0.0.101

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

# cat env/ROOT
/var/tinydns/root

こんな感じですね。とくにいじる必要はありませんが、tinydnsを動かすIPアドレスを変更するときは変更する必要があります(tinydns-confを使ったほうが楽ですね)。

./rootには最初7つファイルがあります。この中で一番大事なのは、tinydnsが提供する情報を収めたdataという名前のファイルです。./rootでmakeを実行するとMakefileにしたがって、dataからdata.cdbというファイルが作られます。
主なデータは./rootにあるadd-*スクリプトで生成することが出来ます(もちろん手動でもOKです)。dataは単なるテキストなので、viなどのエディタで直接編集することも可能ですし、sed/awk/perl/rubyなどのスクリプトで編集するのも簡単です。

ということで、さくさく登録しましょう。
なお、ネットワークの諸設定ですが、今回は以下のような構成であると仮定して行います。適当に読み替えたりエディタで置換して:-)作業してください。

IPアドレス=10.0.0.0/255.0.0.0(クラスA)
ドメイン名=dyndns.example.jp
で、登録するホストは
10.0.0.101=server.dyndns.example.jp
10.0.0.201=client1.dyndns.example.jp
10.0.0.202=client2.dyndns.example.jp
10.0.0.203=client3.dyndns.example.jp
10.0.0.204=client4.dyndns.example.jp
10.0.0.205=client5.dyndns.example.jp
の6つ。
また、

DNSコンテンツサーバ=10.0.0.101=server.dyndns.example.jp
SMTP&POPサーバ =10.0.0.101=server.dyndns.example.jp
DNSキャッシュサーバ=10.0.0.100=dnscache.dyndns.example.jp

とします。10.0.0.100はserver.dyndns.example.jpのマシンの内蔵イーサネットポートを複製したもの(次回以降解説)で、DNSキャッシュサーバとして稼動させるためにあります。

# cat <<END >data
.dyndns.example.jp::server.dyndns.example.jp:259200
+10.in-addr.arpa::server.dyndns.example.jp:259200
@dyndns.example.jp::server.dyndns.example.jp::86400
+dyndns.example.jp:10.0.0.101:86400
=server.dyndns.example.jp:10.0.0.101:86400
=dnscache.dyndns.example.jp:10.0.0.100:86400
=client1.dyndns.example.jp:10.0.0.201:86400
=client2.dyndns.example.jp:10.0.0.202:86400
=client3.dyndns.example.jp:10.0.0.203:86400
=client4.dyndns.example.jp:10.0.0.204:86400
=client5.dyndns.example.jp:10.0.0.205:86400
END

まぁこんな感じでしょうか。
なお、2行目は10.0.0.0/255.0.0.0なネットワークなので10.in-addr.arpaですが、たとえば192.168.0.0/255.255.255.0だったら
.0.168.192.in-addr.arpa〜
になります。

あとは/var/tinydns/rootでmakeを実行するだけです。

# make

dataを編集したら必ずmakeを実行しましょう。でないとせっかくの変更が反映されません。ちなみに、makeを実行するのはtinydnsを起動していても大丈夫です。

さて、設定が出来たらtinydnsを稼動してみましょう。

# ln -s /var/tinydns /service

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

# svstat /service/tinydns /service/tinydns/log
/service/tinydns: up (pid 17042) 4 seconds
/service/tinydns/log: up (pid 17041) 4 seconds

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

# dig @10.0.0.101 dyndns.example.jp ns
# dig @10.0.0.101 dyndns.example.jp mx
# dig @10.0.0.101 client1.dyndns.example.jp a

ちゃんと引けてますかね?次回はDNSキャッシュサーバdnscacheを設定します。