djbdns同士のdataミラー

ノーパスワードでミラーしよう。手順のまとめ。

ステップ1 単純コピー

axfrdnsのようにBIND的ゾーン転送をするんだったら、元々 差分更新とか更新時のみコピーとか考えないので、普通にdjbdnsのdataファイル をコピーすれば良い。

マスターサーバをmike、レプリカサーバをbaliusとする。

mikeのdataファイル

~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が入っている。これをミラーだ。

balius側からログイン準備

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

で手元にコピーができるはず。

mike側で専用シェルにする

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しちゃったりして危険。

ステップ2 - rsyncにする

差分更新を期待するにはrsyncだ。たとえばこんなコマンドラインで 更新した場合だけファイルを持って来れる。

# rsync -a dns@ns.mkwk.net:mkwk.net .

これは、マスタサーバ側に対して、

/bin/sh -c rsync --server --sender -a . mkwk.net

というリモートコマンドリクエストが起きる。ということで、 マスターサーバ側では

rsync --server --sender -a . 固定的dataファイル名

というコマンドを起動するようなスクリプトを用意しておけば良い。


Generated with mkdiary.rb
yuuji@example.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]