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サーバのサービスもやってるので、複数のサービスをつかえばマスタもセカンダリも無料でネームサーバが上げられるんじゃないかと思います。あと、無料サービスなんで、もしかしたら制限(セカンダリドメイン数)とかあるかもしれませんがよくしらべてないす。