ネームサーバーを変更した

私の家には外部に公開しているサーバがあって、固定IP では無いため DDNS で運用しています。
以前は DNS の更新に Dice を使っていましたが、Linux に乗り換えてからは 自作の Perl スクリプトを使って5分毎に実行させています。

仕組みとしては、ルーターから IP アドレスを取って来て、以前の IP と比べて変化があれば DNSレコードをアップデートしているだけなんですが、IPアドレスが変わったときや、途中でエラーが発生した場合などにメールを送る仕様になっています。

ところが、昨日の夜中(正確には 10日の AM 1:20)、突然大量のエラーメールが届きだしました

この現象、今までも一月に一回くらいの頻度で起こっていましたが、たいてい 1時間せずに復旧しているようで、復旧してから気が付く感じだったので調べようにも良く分かりませんでした。
スクリプトの問題だと思っていた事もあって放置してきたのですが、今回はリアルタイムで気がついたので調べてみることにしました。

エラー内容を調べてみると、前述のスクリプト中で実行している dig で正しい結果が取得できていないようです。

dig は、スクリプトの頭で grimonet.com が登録されているネームサーバー(dns1.name-services.com)に対して直接レコードを参照しに行って、正しく更新されているのか確認するために行っています。
もともと、DDNS の更新がネームサーバーに正しく反映されていないことが何度かあったために追加した機能なのですが、更新が反映されるまでの猶予として 30 分くらい幅を持たせています。
つまり、この問題は 0:50 くらいから発生していいるという事ですね。

dig を手動で走らせてエラーを見ていると、どうやらネームサーバーに接続できてないみたいです。
dns1.name-services.com には dns2-5 のセカンダリのサーバがあるので、そちらに切り替えて実行してみたのですが、どれもタイムアウト。
たまに結果が返ってくることもありますが、かなりの確率で失敗します。

そうこうしているうちに nslookup でもタイムアウトが発生するようになり、最終的には自分のブログなど grimonet.com のサブドメインを持っているサイトにアクセスできなくなりました。

この時点では、私の家の環境やネットワークに問題がある可能性も否定できなかったので DNS Stuff などの外部のサイトから grimonet.com を Lookup してみたのですが、完全にアウト。
dns1.name-services.com ~ dns5.name-services.com 全てでタイムアウトが発生してました。

これは問題ですよ・・・
サイトは諦めるとしても、メールはヤバいです。

ネームサーバの管理元であるEnom のサイトを見てもメンテナンスの情報は特にありませんし、障害の情報もなし。
ちなみに XreaValue Domain にも情報なし。

この時点で、こちらで取れる対処策はネームサーバを変更する事くらい。
Value Domain では ENOM 以外にも、VALUE-DOMAIN独自のネームサーバ(ns1.value-domain.com ~ ns3.value-domain.com)があり、これらを利用することもできます。
実際、xrea.com や value-domain.com は VALUE-DOMAIN独自のネームサーバで管理されているようで、これらは正常に Lookup できていました。

とりあえず、3時を回っていたので一回寝て、朝になっても問題が解消してなければネームサーバを変更することにしました。


朝8時頃、再度 dig / nslookup / DNS Stuff で確認してみたところ、夜中の状態に比べれば幾分マシになっているようですが、まだ不安定な状態であることが判明。
メールに影響が出てくると不味いので、この時点でネームサーバを変更することが決定。

ネームサーバの変更は意外に簡単でした。
Enom から切り替える場合には、あらかじめ Value-Domain のネームサーバ用の設定を書き出すことができるので、ネームサーバを変更した後に、書き出した設定を貼り付けて保存するだけで OK でした。

あとは、スクリプトの dig を使っている部分を修正して完了。

今までは

dig @dns1.name-services.com *.grimonet.com

としていた所を

dig *.grimonet.com +trace

としてみました。

ネームサーバーを直接指定していると、そのサーバ(上記の場合なら dns1.name-services.com)が死んだときにクラスタの他のネームサーバが生きていたとしてもエラーになってしまうので、ルートから辿っていく仕様に修正しました。
これでクラスタで死んでるサーバがあっても通常は問題ないはずです。

まぁ、しばらくは様子見です。

案の定不具合発生・・・
っということで、「ネームサーバーが怪しい…」につづく・・・