Blog

Chromeで .local のアドレスが開けない本当の理由

同じ機械に Safari なら名前で入れるのに、Chrome だと「DNSに見つからない」と出る。ローカルネットワークの権限でもセキュア DNS でもなく、ブラウザが名前をどこに聞いているかの違いでした。

技術解説 › miraiGen.Cube

社内に置いた機器へ ○○.local という名前で入れるようにしたのに、Safari では開けるのに Chrome では開けない。しかも出るのは「サーバが見つからない」ではなく DNS_PROBE_FINISHED_NXDOMAIN=DNS が「そんな名前は無い」と答えたというエラーでした。

当社の AI サーバの設置でこれに当たり、実機で原因を確定させたので共有します。

まず疑って、外れた2つ

ローカルネットワークの権限。macOS は同じネットワークの機器を探すアプリに許可を求めます。確認すると Chrome には許可済みでした。そもそも権限が原因なら「つながらない」側のエラーになるはずで、「名前が無い」とは出ません。

ブラウザのセキュア DNS(DoH)。これが有効だと名前の問い合わせが暗号化された別の DNS へ回されます。当初はこれを本命と見ていたのですが、切っても直りませんでした。

3つの DNS に実際に聞いてみた

推測をやめて名前を引く相手だけを変えて問い合わせました。

聞いた相手答え
社内のルータの DNS見つからない(NXDOMAIN)
公共の DNS(2社)見つからない(NXDOMAIN)
機器自身の mDNS の口正しいアドレスを返す

答えははっきりしています。通常の DNS はどこに聞いても「無い」と答え、機器自身だけが答えられる。

真因:ブラウザが名前をどこに聞いているか

.local は普通の DNS で引く名前ではありません。同じネットワークの中で機器同士が直接名乗り合う仕組み(mDNS)専用に予約された名前です(RFC 6762)。問い合わせはマルチキャストで飛び、ルータは関与しません。

  • Safari は OS の名前解決(macOS なら Bonjour)を通すので、.local は OS が mDNS で解決してくれます → 開ける
  • Chrome(Chromium 系) は独自の名前解決を持ち、OS の仕組みを迂回して通常の DNS に聞きます → .local を通常の DNS に聞く限り、どの DNS でも必ず「無い」と答える

つまりこれは設定の不備ではなく、ブラウザの設計の違いです。どちらが正しいという話でもなく、片方は OS に任せ、片方は自分で引く、という方針の差です。

機器の側に打てる手はありません

名前をネットワークに配る方法は、mDNS か DNS サーバのどちらかです。mDNS が扱えるのは .local だけで、Windows 向けの別の仕組み(LLMNR・NetBIOS)は macOS には効きません。機器側でどう頑張っても、Chrome が通常の DNS に聞く以上は届きません。

付け加えると、L3 型の VPN(L2TP/IPsec・WireGuard など)の先からも mDNS は原理的に届きません。マルチキャストの届く範囲が同じネットワーク内に限られるためです。社外から名前で入る、という使い方はそもそも成立しません。

当社がどうしたか

当社の AI サーバは、本体の小さな画面に接続先の住所を表示します。この画面に出ている住所にそのまま入るのを標準の手順にしました。名前に一切依存しないので、名前が引けるかどうかで詰まることがありません。

実は、顧客ごとの名前を当社側で発行して配る仕組みも作りました。そのうえで、使わないことにしました。理由は2つです。

  • 顧客の会社のサーバの入口が、当社が出す名前に依存する形になる。当社側で何かあったときにお客様が自分のサーバに入れない、という事態は作ってはいけない
  • 自社のサーバに他社の名前が付くことを、使う側は普通は望まない

名前で入りたい場合の受け口は残してあります。自分のドメインを自分の DNS に登録すれば画面の住所欄がその名前に変わり、引けないときは自動で IP に戻ります。名前は欲しい人が自分で用意するもの、という形に落ち着きました。

名前を主役にしていた間は、名前で開けない人が画面の指示どおりに打って開けない、という一番たちの悪い状態が起きていました。名前が引けるかどうかは、つなぐ側の端末の種類と設定に左右されるので、製品が名前を前提にしてはいけないと判断しました。

同じことで困っている方へ

  • .local で開けないときは、IP アドレスで開く(これが一番早い)
  • ブラウザによって結果が違うのは設定ミスではなく実装の違いです。Safari で開けて Chrome で開けないならほぼこの話です
  • 社内の機器に恒久的に名前で入りたいなら、.local ではなく社内の DNS サーバに名前を登録するのが正攻法です
  • ネットワークをまたぐ(別サブネット・VPN 経由)使い方では.local は使えません

機器に名前を付けると親切になった気がしますが、開けない住所を案内してしまうほうが不親切です。名前は便利な近道として添え、確実に開ける住所を主役にしておくのが、結局いちばん手間が少ないと考えています。

← 技術解説 すべての記事へ