DNS NOTIFYを受け取ってくれる無料のセカンダリDNSサービスと、NOTIFYを送るスクリプト
個人所有のドメインのDNSサーバは、マスタは自宅サーバ(djbdns)でセカンダリはXNameの無料のセカンダリネームサーバのサービスを使っていました。
それなりに動いてくれていたXNameですが、不満な点が1つありました。それは、マスタを変更したときのゾーン情報の伝搬に時間がかかる点です。XNameは数台のセカンダリネームサーバを提供していて、伝搬速度はサーバによってもタイミングによってもばらばらですが、早いときは数十分、遅いときは5,6時間たってようやく更新されることもありました。
XNameもDNS NOTIFY受けてくれたらいいのになーなんて思いつつも、個人所有ドメインでそんなシビアなサービスもしてないので、ま、いっかーと思っていたんですが、先日、EveryDNS.netがダウンして巷でわーぎゃーわーぎゃーな騒ぎになったときに、ちょろっと調べてみたらいくつかDNS NOTIFYを受け付けてくれる無料のセカンダリDNSサービスをやってることをみつけたので、そのひとつのEditDNSを試してみることにしました。
追記
2010/1/1からセカンダリDNSサービスは有料になるそうです。
あとはDNS NOTIFYを送るツールが必要です。自分が使っているのはdjbdnsなので同梱されていません。ぐぐると tinydns-notifyというPerlスクリプトがあったのですが、NOTIFYを送る先のネームサーバやゾーンの指定がいまいち自分のほしいものとは違ったので、そこを書き換えたスクリプトを作りました。
あとでぐぐぐったらNOTIFYを送るツールがなんこがみつかったので、用途があえばそっちを使ってもいいと思います。
マスタの更新には、make installと実行すると、レコードが列挙されたテキストファイル片をいくつかcatして、dataを作り、tinydns-dataでdata.cdbを作り、マスタのサーバにscpする、というMakefileを書いて使っていたので、scpしたあとにsend-dns-notifyを実行してEditDNSのネームサーバにNOTIFYを送るようにしました。注意するのは、send-dns-notifyを実行するのはマスタのホストで実行するのと、もしマスタのホストが複数のIPアドレスを持っている場合は、send-dns-notifyの-bオプションでセカンダリからのゾーン転送要求を受け取る(=axfrdnsがlistenしている)IPアドレスを指定する点です。
いまのところEditDNSのネームサーバは、NOTIFYを送ればほぼすぐにゾーン情報を取りに来てくれるので、いつ更新されるのかとヤキモキしなくていいので快適です。
ちなみに、EditDNSのネームサーバにはUSとEUにあるのですが、自分が計った限りでは、USにあるネームサーバのほうが応答速度が早かったので、DNS NOTIFYは全ネームサーバに送りつつも、NSレコードにはUSのサーバのみを書いてます。
ちなみに、XNameもEditDNSもマスタDNSサーバのサービスもやってるので、複数のサービスをつかえばマスタもセカンダリも無料でネームサーバが上げられるんじゃないかと思います。あと、無料サービスなんで、もしかしたら制限(セカンダリのドメイン数)とかあるかもしれませんがよくしらべてないす。