たった一つのDNSレコード漏れから起きる大事件

  • このエントリーをはてなブックマークに追加

DNSレコードをしっかり設定していますか?

ヘッドライン

今日発生したトラブルですが、自社のドメインをホスティングサービスから、自社管理の仮想化サーバーへ移転しました。
移転したのは2週間ほど前でしたが、どうにも様子がおかしい。。。
そして、本日大事件が発生しました。

きっかけは上司のからのコメントで

今日、いつもなら届いている銀行からのメールが届かないんだよね。
ちょっとチェックしてみてくれる?

と、指示がありました。
いつも届いているのに、今日は届かないなんてありえないだろ~
と思いながらも一通りチェックしてみることにしました。
と、その前に、私自身は、重要なメールをすでに新サーバーで受信していますし、旧サーバーのメールサーバーにも一応つなぎながら毎日チェックしていますが、古いほうに届いている様子もなく。。。
そもそも、昨日まで普通に受信できていたメールが今日からまた古いほうにメールを送るという逆行は普通に考えたらありえないはずで。。。
なので、上司の勘違いではないか。
と思いました。
ただ、10通に1通ほどですが、まだ旧サーバーにメールが届くことがあって、少し不安が残っていました。

今まであまり経験したことがない事象

1~3日程度、新・旧サーバーに交じりながらメールが届くということは無きにしも非ずで、それは、DNSレコードのキャッシュが残っているプロバイダなどのDNSでは、確認することもなく旧サーバーへ接続を試みている可能性があるからです。
ただ、それにしても、キャッシュの保有時間を考えたら、どんなに遅くても、1~2週間程度ですべての情報が新しい情報に書き換わるはずと思っていましたが、もう、3週間目に突入しているのにたまに旧サーバーにメールが届くことがあります。
なんだかおかしいなと思いながら、上司のメールアドレスの旧サーバーに、Webmailでログインしてみたところ、案の定、旧サーバーに銀行のメールが届いていました。
また、今まで銀行のメールが届いていたのに今日に限って届いていないと発言していましたが、実はこの事実が間違っていました。

届くには届いていたが、銀行のシステムでサブメールアドレスを登録しており、そのメールはプロバイダ支給のメールアドレスで、届いていたメールはそちらに到着したメールでした。
結果として、独自ドメインのメールに関しては、ずっと旧サーバーに届いていました。
要は、メールの移転がうまくいっていない。という事実です。

これはまずいと。言うことで調べていくが、当初はまったく見当がつきません。

ドメイン取得会社(レジストラのコンパネ)にて、ドメインのNS指定をns.独自ドメインと、ns2.独自ドメインという、旧来の別のDNSから新しいDNSへ変更しているので、その時点で1日もあれば引きに行くDNSサーバーは変更されるはず。
そして、新しいDNSサーバーに設定されているレコードは、すべてのホスト名に対して新しいサーバーのIPアドレスが設定されています。
状況として、今すぐではなく数日後にはこの設定で反映し、メールは全て新サーバーへ到着する予定です。

が、なぜかいくつかのメールが3週間ほど経過しているにもかかわらず旧来のサーバーに届いています。
うーむ。。。

旧サーバーに来たらまずはDNS的に新しいIPを返すように設定

最初からしておけばよかったのですが、今までトラぶったことがないという過信から、そんな設定をしなくても2~3日もすれば反映するだろうと考え、設定していませんでした。
もしお客様の物であればやれることはすべてやっていたのですが、自社のものであるという緩さと、週末なので、2~3日は別に問題がないというなんというか、甘さが出ました。

本来移転する際には、旧サーバーのDNSレコードをTTLなどの時間短縮と同時に、当ドメインに設定されている全てのAレコードを新しいIPに設定しておくことで、旧サーバーのDNSサーバーに仮に見に来ても新しいIPを返してくれる。

ので、設定しておけば、ここまでトラブルが長引かなかったのかもしれないと今更ながら設定。
これで問題は解決したと思っていました。(実際は全く別の原因でしたが。。。)

しかし、どうにもやっぱり調子が悪いのです。
というか、この移転したドメインに限りなのですが、メールが到着するまでに妙なブランク時間があり、10分ほど遅れて到着する。
お客様と、電話でやり取りしながら、お客様が【今メール送りました】というメールが到着するのに早くて1~2分、一般的に5~10分遅れます。
私はITの世界で生きているので、この1~2分、5~10分が致命的だと感じました。
ちなみにですが、同じサーバーの中で別のドメインはほぼリアルタイムに受信できていると思います。
なぜかこのドメインだけです。
違いは、新規取得→現サーバーでホスティングしたドメインと、旧サーバー→現サーバーへ移転・ホスティングの違いだけです。
なので、どう見ても新・旧の移転手続きに問題があるとしか思えません。
また、今回変な移転設定は一切しておらず、メールアドレスも新サーバーでは新規で開設しパスワードも変えて設定しているので、通信上の問題はどう考えてもDNSに原因がありそうでした。
しかし、両方のDNSサーバーから、新サーバーに向いている(Aレコードは両DNSサーバーともすべて新サーバーのIPになっている。)にもかかわらず、なんだか挙動がおかしいわけです。
しまいに上司からはこういうコメントがきました。

銀行のメールを再送信してもらうよう手続きしたメールがやっぱり届かない

と、いうことで、非常によろしくない状態でした。
そこで、再度旧サーバーの方に届いているのではないかと思い、確認してみると、今度は旧サーバーにメールが届いていませんでした。
もちろん現状では新サーバーにも届いていません。
大変、非常にまずい状態になりました。
旧サーバーに届かなくなったことは一つの朗報ですが、その後メールが行き先をなくしているようでした。
再度、新サーバーでMXレコードとMXレコードで指定されているホストのAレコードを確認。新サーバーのIPになっていることを確認しました。
要はおかしくないんです。見た目の設定上は。
でも届きません。
ここで、DNSの基本に立ち返りました。

DNSの仕組みは
クライアントがドメインを引く→クライアントが指定しているDNSサーバーにドメインのIPを確認に行く→そのDNSサーバーが管理していないドメインであればそのDNSサーバーの上位DNSサーバーに問い合わせる→ある上位DNSが、ルートDNSといわれるそう元締めに確認しに行く→そのドメインのNSレコード(IP)を教えてもらえる→クライアントDNSに教える→NSレコードからそのIPのDNSに、ドメインを問合せ、ドメインのIPアドレスが判明→クライアントに通知

という流れです。おそらく、現在この流れのどこかが破たんしているのです。
情報が間違っているとかではない気がしました。これはもう直感かもしれませんね。
Windowsクライアントにはコマンドプロンプトという黒画面のコマンド打ちできる画面があります。
このプロンプトには、【nslookup】というドメインのIP情報を教えてくれるコマンドがあります。
このプロンプトで、MXレコードのmail.ドメイン名を引いてみます。普通に新サーバーのIPが返ってきます。
要は、上記の流れが破たんしていないよ。と回答しているということですね。
しかし、実際はうまくいかない”時”があると。

うまくいったりいかなかったり。。。という時にチェックすること

DNSでは時として自分はうまくいったのに、お客さんやそのほかの人で何人かがうまくいかないというということが起きます。
その時にチェックしなければいけないことはたった一つです。

NSレコードをちゃんと確認

です。
じつは、このNSレコード完璧に設定されていないとおかしくなるのです。
たとえば、レジストラのコンパネでDNSサーバーの指定を1つしかしていないのに、レコードを作った際にNSレコードを2つ設定する、逆に2つ指定したのに、NSレコードを1つしか書いていないなどの相違がある設定をしてしまうと、よくわからない挙動をすることがあります。
必ず指定したネームサーバーと、実際にレコードの中でNSレコードは完全一致するようにしてください。
また、該当ドメインのホストを作りDNSアドレスとする際には、レジストラのコンパネでホスト登録(DNSサーバーとしてこのホストを使いますとIPを設定する)をしない事にはうまくドメインを引いてくれません。
今回はその指定を忘れずに行っていたので、絶対ミスはしていないという自信があったのですが。。。

ここにミスがあった!Aレコード、NSレコード、ホスト登録

DNSサーバーのホスト名として利用するホストは3つの登録が必要です。
まず、DNSサーバーのレコードとして、AレコードでIPが指定されていないといけません。
これはWEBなどで使うホスト同様、Aレコードがないと、問い合わせが来た際に返答するIPアドレスが指定されていないことにつながります。
次に、DNSサーバーの設定上NSレコードを追加しておかなければいけません。これは別ドメインの物でも構いません。
そして、最後にDNSサーバーとして利用するホストはレジストラなどで、ホスト登録を行う必要があります。ようは、ホスト名とIPアドレスを登録するのです。
この登録をすることで、DNSサーバーとしてそのホストが認められることにつながります。

自前ドメインをDNSサーバーのホストとして利用する際に、この3点が完全に設定されていないとおかしい挙動をおこします。
仮に、ネームサーバーを2つ指定していたとして、1つの情報が不完全だった場合、50%の方がうまく接続できないことになります。
今回できたりできなかったりしてるのはどうやらここに原因がありそうです。
そして、不完全な方のDNSを運悪く引いてしまった場合、キャッシュを持っていればそのキャッシュの情報をもとにアクセスしてきます。
これが、いつまでたっても古いほうにメールが届く原因のようです。
しかし、パッと見る限りでは私の設定に間違いがないはずなのに。。。
もしかしたら、情報を更新した後、DNSが再起動していないのではないか。。。と感じ、再起動してみました。
そこでやっと原因が判明しました。
DNSサーバーが立ち上がりません。エラー内容は、ns2.独自ドメインんがNSレコードに指定されているけど、Aレコードがないと、ご丁寧にエラーを出力してくれました。
ここまで説明を書きましたが、NSレコードやDNSの指定ばかりに目がいき、肝心のAレコードを指定していないという完全なる凡ミスでした。
即座にAレコードを追加。再起動。OK。
現在まだ少し遅延気味ですが、すべてのメールが新サーバーに届くようになりました。
同じようにお悩みの方、は下記のまとめに書いてあることをチェックしてくださいね。

解決!メールが新サーバーに流れる

設定に整合性が取れ、少ししたら銀行からのメールが新サーバーに流れてきました。
また、テストで外部サーバーから送信していたメールも続々届き始めました。
どうやらまともに動作し始めたようですね。
もう1~2日もすれば完全体になるでしょう。
今回私が犯したミスは、NSサーバーに指定したホスト名のAレコードを追加していなかったことによるDNSサーバーのストライキ
です。
DNSサーバーがまともに動いてくれなかったので、古いキャッシュ情報を持っていたサーバーは古いサーバーへメールを送っていました。
また、おそらく、30~40%ほどのメールはロストしていたのではないかと思います。。。
道理で、送ったよと言われても届かないわけです。。。orz

まとめ

今回は、サーバー移転時のDNSの設定について記事を書きました。
サーバーを移転して以降、挙動が不安定。新サーバーにつながったり旧サーバーにつながったり。
これでは完全に旧サーバーを止められないという方が解決するかもしれません。

ドメインのDNS情報の確認

どこで確認したり設定を変更したりできるのかと言いますと、そのドメインを管理してくれている業者のコントロールパネルになります。
ムームードメインとかバリュードメインとかお名前.comとかです。
ここでドメインの設定を見るときに、おそらくネームサーバーの指定といったような項目があります。
これは新サーバーになった場合、何か新しいネームサーバーになることが多いはずですので、新しいネームサーバーに指定を変えたかどうか確認してください。
また、DNSサーバーとして利用するホスト名はこの管理業者のコンパネでホスト登録という登録をすることで、そのホスト名がDNSサーバーとして世界的に認知されると考えてください。
設定する項目はホスト名と、IPアドレスです。

DNSサーバーのレコード確認

新しく利用することになるDNSサーバーでドメインのレコードを作る必要があります。
その中でうまく挙動していない場合、まずは以下の2点を確認してください。

  • NSレコード
  • Aレコード

NSレコードは、先のドメイン管理会社で指定したDNSホスト名と、ここで指定したNSレコードが数もホスト名も”完全に一致するように”してください。
ここにずれがあるとどう動くかわからなくなると思ってください。
もし、このドメイン自体のサブドメインホストなどをDNSサーバー名として利用するつもりでしたら、ドメイン管理会社内でホスト登録と、このDSNサーバーでAレコードを”必ず”設定してください。
Aレコードは先に書いた通り、NSレコードが自前ドメインである場合、ホスト登録と同時にAレコードも追加してください。

最後にもう一度チェック項目を列挙します

  • ドメイン管理会社(レジストラ)
    • DNSの指定情報
    • DNSホスト登録
  • DNSサーバー
    • NSレコード
    • Aレコード

上記の項目が完全に一致していることを確認してください。
ほとんどの場合、なんだかおかしい。。。が解決するはずですよ。

SNSでもご購読できます。