現在私の所有しているサーバーの一部ではPowerDNSでDNSサーバーを立てているのですが設立当初からマスタ・スレイブの同期が怪しかったのですが、DNSレコードはあんまり書き換えないからいいやという事で放置してきました。
しかしあまり放置プレイするのも良くないのでいい加減に調べてみる事にしました。
症状はマスターを更新してもスレイブの転送されないという物だったのですが、スレイブのDNSサーバーで下記のようなメッセージが出力されている事に気づきました。
Feb 11 20:56:25 localhost pdns[28256]: Domain wakegawakaranaiyo.info more recent than master, our serial 4294967295 > their serial 2012021185
※wakegawakaranaiyo.infoは架空のドメインです。
エラーメッセージではスレイブのシリアルがマスタよりも新しいと出ています。試しにdigで確認してみるとマスターとは全く違うシリアルに化けていました。
# dig @localhost wakegawakaranaiyo.info wakegawakaranaiyo.info SOA ns1.wakegawakaranaiyo.info. root.wakegawakaranaiyo.info 4294967295 60 900 604800 1200
マスターDNSのSOAレコードは下記のようになっていました。
wakegawakaranaiyo.info SOA ns1.wakegawakaranaiyo.info root.wakegawakaranaiyo.info 2012021188 60 900 604800 1200
実はこの時、SOAレコードのMNAME、RNAMEの最後にドットを忘れていたのです。
ドットを追加した所無事に動き始めました。
という事でSOAレコードでドットを忘れるとレプリケーションが狂う要因になるようです。
ただしこのドットですが、動いた後に再現する為にわざと忘れてみたりしたのですが、今度はなぜかシリアルが化ける現象は再現しませんでした。後シリアルの書式はYYYYMMDDnnが良いみたいです。初めYYYYMMDDHHMMなどという書式でやっていたのですが、これでもシリアルが化けてうまく同期できませんでした。ただしこちらは別の要因かもしれません。
とりあえず解決はしたもののはっきりしない点がいくつか残ったのでもう少し暇がある時に調べてみる必要がありそうです。