Chrome がローカルにある Web ページを表示してくれない備忘録です.
長いこと原因が分からなかったのですが,Chrome がローカルに立ててる Web ページをなぜか表示してくれないって現象に頭を悩ませてました(何かの拍子に表示されることもある).
この件,いちおう原因らしきものがわかったので,覚書をしておきたいと思います.
現象
例えば Volumio なんかがそうですが,ローカルなネットワーク(自宅とかのネットワーク)に個人的に利用する Web サイトを立ち上げることってあります.ところが,このローカルな Web ページを Chrome が表示してくれない,って現象に長いこと悩んでました.
これ,私が利用するブラウザだと,Chrome だけの現象です.
Edge とか,Safari だと,http://*******.local のように指定すればキチンと表示されますし,もちろん DNS も(逆引きを含め)きちんと引けています.なのに,なぜか Chrome だと表示できません.それも不思議なことに,何かの拍子に一度表示されると,それ以降はスムーズに表示されるようになるというオマケ付きです.
別のブラウザを使えば問題なくつながるので,これまではローカルな Web サイトだけ別ブラウザを使うという少し面倒臭いやり方で逃げてました.しかし,いい加減不便なので,少し時間をかけて調べてみました.
原因
最初は Chrome の拡張設定とかキャッシュとかの設定を疑い,いろいろ変えてみたのですが,全く効果がありません.それで,ネットワークの設定を含め見直した結果,次の3つが原因なのではないかという結論になりました.
原因と思しき1つ目は,
ローカルの DNS Suffix を標準の local から,xxxxx.local に変えていた
ことです.xxxxxx の部分は適当な英単語です.
これは,Windows の AD のドメイン名(NetBIOS 名)との整合を取るためにかなり昔から使ってる DNS Suffix で,面倒なので自宅の AD は随分前に廃止したのに,今でも惰性で使い続けています.
そして,2つ目は,上記の
DNS Suffix をきちんと DHCP で配布していなかった
ことなんじゃないかと.Web Server の avahi(Zeroconf とも言う)はキチンと設定していたのですが,DHCP でこの DNS Suffix を配布する設定はしていませんでした.してなくても,http://hostname.xxxxxx.local のように FQDN を全部書いてしまえばつながるので,あまり問題だと思っていなかったからです.しかし,これが間違いの根本原因だったようです.結果的に最後の3つめの現行の Chrome の仕様(だと思う)に引っかかってしまった訳です.
と言うことで,最後の3つめは,現行の Chrome の仕様なんだろうと思うんですが,
Chrome は,アドレス末尾が xxxxxx.local で終わるアドレスの場合, DNS Suffix がキチンと設定されていないとどこかよく分からない別のアドレスに接続しようとする
ってことです.Chrome がどのようなアドレスを検索しようとしているのかはよくわかりませんが,接続がタイムアウトしてしまいますから,少なくとも, hostname.xxxxxx.local 宛ではなさそうです.詳しく Chrome の挙動を追いかければ分かるのかも知れませんが,面倒なのでそこまではしてないのですが,なんとなく,hostname.xxxxx.local.local のようなアドレスをみに言ってるんじゃ無いかなと.
なお,これまた訳のわからないことに,DNS Suffix をキチンと DHCP で配布した場合,
Chrome |
|
||||||
Edge |
|
||||||
Safari |
|
みたいな感じになります.この辺りの挙動って,正直ワケわかりません.正しいのは Safari なんじゃないかなと思うんですけど,どうなんでしょうねぇ…….
対策
と言うことで,対策は,DNS Suffix をきちんと DHCP で配布するか,個々のクライアント(端末)のネットワークの設定で DNS Suffix を指定するかのどちらかをやれば良い訳です.
私の場合,自宅のネットワークのアドレスは Ubiquiti の Edgerouter X で配布してますから,設定を以下の様にして,DHCP で DNS Suffix をキチンと配布する様にすれば良いだけです.
$ show configuration ...... service { dhcp-server { disabled false hostfile-update disable shared-network-name xxxxxxx.local { authoritative disable subnet 192.168.0.0/24 { default-router 192.168.0.1 dns-server 192.168.0.1 domain-name xxxxxx.local lease 86400 start 192.168.0.100 { stop 192.168.0.200 } } } ......
この設定を入れれば,Chrome だと http://hostname の様に指定すれば,即座に接続されるようになりました.
なお,この設定をしても,http://hostname.xxxxxx.local の様に指定した場合は,なぜか少し待たされることがあります.しかし,http://hostname の方が圧倒的にタイプ量が少なくて楽なので問題は無い訳です.
まぁ,いまだよくわからないところ(ブラウザによって hostname.local でつながったりつながらなかったりするところとか)が残ってますけど,まぁ,これ以上調べることはないかな,と思っています.
以上!