ノーパスワードでミラーしよう。手順のまとめ。
axfrdnsのようにBIND的ゾーン転送をするんだったら、元々 差分更新とか更新時のみコピーとか考えないので、普通にdjbdnsのdataファイル をコピーすれば良い。
マスターサーバをmike、レプリカサーバをbaliusとする。
~dns/tinydns/root ディレクトリにdataファイルがある。が、ゾーンごとに ファイルを分けて置いた方が保守性が良い。このディレクトリの構成はこんな感 じ。
% cd ~dns/tinydns/root % ls Makefile add-alias6* add-host6* data mkwk.net RCS/ add-childns* add-mx* data.cdb add-alias* add-host* add-ns* iekei.org
Makefile
はこんな感じ。
all : data.cdb data : mkwk.net iekei.org cat $> > $@ data.cdb : data tinydns-data
ま要するに元ファイルを cat
して data
ファイルを作るってだけ。このうち mkwk.net
ファイルに
tinydns表記のゾーンのdataが入っている。これをミラーだ。
SSH公開鍵を作る。いつもの通り。
# su - dns dns% cd dns% ssh-keygen -t dsa -N '' -f .ssh/mkwk-net
できた .ssh/mkwk-net.pub
をマスター(mike)の
~dns/.ssh/authorized_keys
に追加する。
dns% ssh -i .ssh/mkwk-net w
などとやってノーパスワードで行けることを確認する。で、
mkwk.net
を表示するために
dns% ssh -i .ssh/mkwk-net cat mkwk.net
とかやってみよう。うまくできたら
dns% ssh -i .ssh/mkwk-net cat mkwk.net > mkwk.net
で手元にコピーができるはず。
dnsユーザでログインできちゃうのも気持ち悪いので、
mkwk.netファイルをcat
するだけしかできないシェルに変更。
vipwして /var/dns/catdns
とかのシェルに変える。
/var/dns/catdns
ファイルはこんなシェルスクリプトに。
#!/bin/sh set $2 case "$2" in *mkwk.net) cat mkwk.net ;; *) echo $1 ;; esac
解説。ssh経由でこのスクリプトが呼ばれるときは
/var/dns/catdns -c cat mkwk.net
と呼ばれる。このとき $1="-c" $2="cat mkwk.net"
となる。set $2
でコマンドラインが位置パラメータに代入される。
$2
がファイル名になるのでそのパターンによってcatする
ファイルを変える。受け取ったコマンドラインをそのまま起動すると
ゾーンdataファイル以外をcatしちゃったりして危険。
差分更新を期待するにはrsyncだ。たとえばこんなコマンドラインで 更新した場合だけファイルを持って来れる。
# rsync -a dns@ns.mkwk.net:mkwk.net .
これは、マスタサーバ側に対して、
/bin/sh -c rsync --server --sender -a . mkwk.net
というリモートコマンドリクエストが起きる。ということで、 マスターサーバ側では
rsync --server --sender -a . 固定的dataファイル名
というコマンドを起動するようなスクリプトを用意しておけば良い。