DNSサーバー変更時の問題点を解決する

色々なレンタルサーバーを利用する際、テスト用ドメインを使い回しているのでDNSサーバーの設定をちょくちょく変更します。すると以下の様な問題がよく(というか必ず)発生します。

例えば、

  • FirefoxではアクセスできるのにChromeではエラーになる。
  • いくつかのファイルが取得できないなど、レスポンスが不安定になる。
  • 違うパソコンからはアクセスできる。

レジストラ(リセラー)では「ドメインの設定が反映されるまで数日かかります」と注意書きがありますが、普通のレジストラであれば、そこまでかかることはまずありません。遅くとも数時間後にはアクセス可能となります。(ただし、「自分のネットワーク環境では」という条件付きです)

このような症状の場合、十中八九DNSキャッシュが悪さをしています。DNSキャッシュはOSとWebブラウザの両方にあり、DNSサーバーへの問い合わせを少なくし効率的にサーバーへアクセスするための仕組みです。

DNSキャッシュを削除することで多くの問題が解決するでしょう。

OSのDNSキャッシュを削除

下記のコマンドを実行します。Windowsであればコマンドプロンプト、Macであればターミナルを利用します。

  • Windows
ipconfig /flushdns
  • Mac
10.10
	sudo discoveryutil udnsflushcaches
10.9
	dscacheutil -flushcache
	sudo killall -HUP mDNSResponder
10.7 - 10.8
	sudo killall -HUP mDNSResponder

全ての環境で試したわけではありません。上記コマンドの正当性は各自で確認してください。

WebブラウザのDNSキャッシュを削除

Chromeの場合

ロケーションバーに下記の文字列を入力して実行します。Chromeの内部設定を操作することができます。

chrome://net-internals/#dns

キャッシュされたDNS情報が表示されます。Host resolver cacheの横にあるClear host cacheをクリックするとキャッシュがクリアされます。

Firefoxの場合

最近のFirefoxはDNS情報をOSから取得しているため、ブラウザ自身でDNSキャッシュを行わないようです。もしFirefoxでDNSキャッシュを削除するなら、「DNS Flusher」という機能拡張(アドオン)を利用するのが定番です。もしくは「最近の履歴を消去」でキャッシュを手動で削除します。

Safari & Internet Explorer

Safari(Mac)とInternet Explorer(Windows)はOSから情報を取得しているようなので、OSのDNSキャッシュを削除すれば大丈夫のようです。

リロードするときの注意

キャッシュを消しても上手くいかないことがあります。そのときは、リロードせずに新しいウィンドウでアクセスし直してください。リロードすると以前のDNS情報が参照される場合があります。

通信内容を確認する方法

中途半端にアクセスできたため、DNSキャッシュの問題に気付くまでに時間がかかりました。普段使いのChromeだけ問題が発生したのも混乱のもとではありました。このような問題が発生した場合、以下のツールを利用すると無駄な時間を省けます。

  • Chrome
    • デベロッパーツール
  • Firefox
    • 開発ツールやFirebug
  • Internet Explorer
    • 開発者ツール
  • Safari
    • Webインスペクタ

これらのツールで確認すると、失敗していれば404などのエラーステータスが表示されます。今回の場合は、同じドメインにアクセスしているにも関わらず取得できるファイルとできないファイルがありました。

エラーの理由は、変更前(引っ越し前)のサーバーにアクセスしているという、至って普通の理由です。変更前のサーバーにはファイルがないのでエラーとなります。しかし他のブラウザでは問題ないため、URLの間違いや変更後(引っ越し後)のサーバーにファイルが存在しないわけではありません。

Chromeのデベロッパーツールであれば、ドメインだけでなく接続先のIPアドレスを知ることができます。確認してみるとファイルによっては新しいサーバーのIPアドレスだったり、古いサーバーのIPアドレスだったりしました。

ドメインは同じでもIPアドレスが異なっていたので、ファイルの取得に失敗していたわけです。なぜこのようなことになるのかは不明です。Chromeの仕様でしょうか?

もし詳細に通信内容を覗きたいのであれば、パケットキャプチャ・アプリケーションを利用しましょう。定番ですがWiresharkがオススメです。マルチプラットフォーム対応であり、図のように送受信パケットを確認することができます。詳細は省きますが、どうしても解決しない場合はこのようなツールを利用するのも1つの方法です。