ノノログ

ホーム / ブログ / Google Chromeでローカルエリア内WEBサーバのIPが正しく引けない

Google Chromeでローカルエリア内WEBサーバのIPが正しく引けない

■ Chromeを利用するとローカルエリア内にあるWEBサーバのページが正しく見れない

という問題が発生して解決した話
日本語でぐぐっても説明しているページがないためブログ書きました。

 

■ 状況

ローカルエリア内にWEBサーバがあり、外部に公開している。
接続IPが外部と内部で変わるため、ローカルエリア内にDNSサーバを構築している。

ローカルエリアのPCからWEBサーバにアクセスすると外部用のIPでアクセスしているため、404 Not Found.が発生していた。

しかし、コンソールからdigっても、chrome以外のFirefoxやsafariを使うと発生しない。

 

 

■ 原因

chromeからしか問題がないため原因はchromeだよね。ということでいろいろ調べてみた。
結局は、chromeの「DNS prefetching」という機能ということが、このページから判明。

どいういうことかというと機能名の通りDNS情報をプリ(事前に)フェッチ(取得)する機能ですね。
しかもこのプリフェッチ機能、自分の利用するDNSサーバから取得するのではないようで、おそらくGoogleChrome用のプリフェッチサーバのようなものがあるんだと思う。(確認してないけど)

内部用のIPがほしい場合、おそらく外部にあるプリフェッチサーバより取得したDNS情報はローカルエリア用のIPとは変わってしまう。

chromeはDNS情報をブラウザでキャッシュする仕組みある。
※ chrome://net-internals/#dns

chromeのDNSプリフェッチ機能はDNSキャッシュに設定され、WEBページへのアクセス時に利用される。
この「プリフェッチ機能」と「キャッシュ機能」の2つが原因をかなりわかりづらくしていた。

 

 

■ やってたこと

最初にDNSプリフェッチという機能が問題になっていることを気づかず定期的にDNSのキャッシュ情報を削除していた。
しかし、消せども消せども元に戻されるので、hostsファイルの直書きで対応したりしていた。

しかしそれだと、利用PCがノートのため内部ネットワークから外部ネットワークに移動した時に手書きでまたhostsを書き換える必要があった。

忘れることもあるし、めんどくさいよね(´・ω・`)

 

 

■ 解決方法

上で書いたけど、結局はchromeのプリフェッチ機能をオフにすればいいということ。
しかしこれは、事前にDNS情報を読み込みキャッシュしてくれる仕組みのため速度とのトレードオフにはなる。(追記:PCスペックによっては早くなるらしい)

んで、それは何処からかというと、chromeの設定からなんだけど
chrome://settings/ へアクセスし「詳細設定を表示」して、「プライバシー」項目のなかの
「ネットワーク動作を予測してページの表示速度を向上させる」という項目がある。

これがプリフェッチ機能の切替のためこれをオフすると、内部ネットワークでもWEBページのアクセスがおかしくならないようになった。

スクリーンショット_2014-01-18_19.16.48.jpeg

 

■ と、説明したが上記だけでは解消しなかったというオチ

上の対応だけではダメでした。すいません。
現在も解消方法を試しているけど、もしかするとこれかも、
chrome://flags/#enable-async-dns
「非同期DNSを組み込む」という項目を無効にしたら良くなった気がする。

スクリーンショット 2014-01-20 19.03.16.png

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