daemontoolsとかdjbdnsをRPMで入れる

bindより設定が分かりやすいのが気に入ってdjbdnsを使ってます。毎度毎度ビルドするのも効率悪いし、かと言ってyumに入るようなことはないので、RPMを拾ってきて環境整えます。そのへんの設定メモ。もちろん環境によって設定値は異なるので、そのへんは読み替えてください。

■インストール

http://www.qmail.org/rpms/RPMS/RPMがあるので、

をそれぞれ拾ってきて入れる。

これだけだとmanが入らないので、http://www.qmailtoaster.org/SRPMからアーカイブを取得して、/usr/local/share/man/man8/ に手動でコピー。

自分でビルドした場合はdaemontoolsが自動で起動するけど、RPMでインストールした場合は手動で起動する必要あり。

sudo svscan /service &

サーバ起動時の自動起動設定も入ってないので、/etc/inittabに以下の行を追加。

SV:123456:respawn:/command/svscanboot

これも手動ビルドした時は自動で入ってたと思う。

あと、ユーザの追加とかもRPMではやってないので、そのへんも自分で。

sudo groupadd -g 800 dns
sudo useradd -u 800 -g dns -M -d /var/dns -s /sbin/nologin dnslog
sudo useradd -u 801 -g dns -M -d /var/dns -s /sbin/nologin dnscache
sudo useradd -u 802 -g dns -M -d /home/tinydns -s /bin/bash tinydns

tinydnsユーザは対になるDNSサーバにscpするのでhomeディレクトリを作る。scpするだけなので、/home/tinydns/ にはssh鍵だけ置けばいい。

sshの制限は、今のところ公開鍵にno-pty付けて端末取得不可にするのと、fromでIP制限かける程度です。~/.ssh/authorized_keysにこんな感じで書く。

no-pty,from="アクセスを許可するIP" ssh-rsa …

fromはホスト名で書いた方が分かりやすいかなとも思ったけど、ウチではsshd_configでUseDNS noしてるのでIPで。

本来的にはコマンド固定するか、シェルをscp-onlyにした方がいいんだろうけど、ひとまずこれで。

■dnscacheの設定

dnscacheはlocalhostで稼働させます。

sudo dnscache-conf dnscache dnslog /etc/dnscache 127.0.0.1

標準だとログの容量が小さいので、/etc/dnscache/log/runを

#!/bin/sh
exec setuidgid dnslog multilog t s3000000 n10 ./main

に変更(s3000000 n10を追加)。

daemontoolsにサービス登録して完了。

sudo ln -s /etc/dnscache /service/

■tinydnsの設定

tinydnsはグローバルIPで稼働させます。

sudo tinydns-conf tinydns dnslog /etc/tinydns サーバのIP

dnscacheと同様、log/runに「s3000000 n10」を追加。

#!/bin/sh
exec setuidgid dnslog multilog t s3000000 n10 ./main

同じく、daemontoolsにサービス登録。

sudo ln -s /etc/tinydns /service/

2台のDNSサーバ(仮にs1,s2とする)でお互いにscpできるように設定。

sudo chown tinydns:dns /etc/tinydns/root
sudo chown tinydns:dns /etc/tinydns/root/data

既にmake実行してdata.cdbができてる場合は、そいつも。

make時に対になるサーバに自動でゾーン情報をscpするよう、Makefileを変更。

data.cdb: data
        /usr/local/bin/tinydns-data
        sudo -H -u tinydns scp /etc/tinydns/root/data /etc/tinydns/root/data.cdb s2:/etc/tinydns/root/

これで、s1でsudo makeすればs2も勝手に更新される。s2のMakefileはs1にscpするように書けば、どちらでも作業可能。

「sudo -H -u tinydns make」でmake実行した方がお行儀よさそうだけど、まぁ面倒なんで。

と、こんな感じでやってますという未来の自分用のメモ。