Blog
同じ機械に Safari なら名前で入れるのに、Chrome だと「DNSに見つからない」と出る。ローカルネットワークの権限でもセキュア DNS でもなく、ブラウザが名前をどこに聞いているかの違いでした。
社内に置いた機器へ ○○.local という名前で入れるようにしたのに、Safari では開けるのに Chrome では開けない。しかも出るのは「サーバが見つからない」ではなく DNS_PROBE_FINISHED_NXDOMAIN=DNS が「そんな名前は無い」と答えたというエラーでした。
当社の AI サーバの設置でこれに当たり、実機で原因を確定させたので共有します。
ローカルネットワークの権限。macOS は同じネットワークの機器を探すアプリに許可を求めます。確認すると Chrome には許可済みでした。そもそも権限が原因なら「つながらない」側のエラーになるはずで、「名前が無い」とは出ません。
ブラウザのセキュア DNS(DoH)。これが有効だと名前の問い合わせが暗号化された別の DNS へ回されます。当初はこれを本命と見ていたのですが、切っても直りませんでした。
推測をやめて名前を引く相手だけを変えて問い合わせました。
| 聞いた相手 | 答え |
|---|---|
| 社内のルータの DNS | 見つからない(NXDOMAIN) |
| 公共の DNS(2社) | 見つからない(NXDOMAIN) |
| 機器自身の mDNS の口 | 正しいアドレスを返す |
答えははっきりしています。通常の DNS はどこに聞いても「無い」と答え、機器自身だけが答えられる。
.local は普通の DNS で引く名前ではありません。同じネットワークの中で機器同士が直接名乗り合う仕組み(mDNS)専用に予約された名前です(RFC 6762)。問い合わせはマルチキャストで飛び、ルータは関与しません。
つまりこれは設定の不備ではなく、ブラウザの設計の違いです。どちらが正しいという話でもなく、片方は OS に任せ、片方は自分で引く、という方針の差です。
名前をネットワークに配る方法は、mDNS か DNS サーバのどちらかです。mDNS が扱えるのは .local だけで、Windows 向けの別の仕組み(LLMNR・NetBIOS)は macOS には効きません。機器側でどう頑張っても、Chrome が通常の DNS に聞く以上は届きません。
付け加えると、L3 型の VPN(L2TP/IPsec・WireGuard など)の先からも mDNS は原理的に届きません。マルチキャストの届く範囲が同じネットワーク内に限られるためです。社外から名前で入る、という使い方はそもそも成立しません。
当社の AI サーバは、本体の小さな画面に接続先の住所を表示します。この画面に出ている住所にそのまま入るのを標準の手順にしました。名前に一切依存しないので、名前が引けるかどうかで詰まることがありません。
実は、顧客ごとの名前を当社側で発行して配る仕組みも作りました。そのうえで、使わないことにしました。理由は2つです。
名前で入りたい場合の受け口は残してあります。自分のドメインを自分の DNS に登録すれば画面の住所欄がその名前に変わり、引けないときは自動で IP に戻ります。名前は欲しい人が自分で用意するもの、という形に落ち着きました。
名前を主役にしていた間は、名前で開けない人が画面の指示どおりに打って開けない、という一番たちの悪い状態が起きていました。名前が引けるかどうかは、つなぐ側の端末の種類と設定に左右されるので、製品が名前を前提にしてはいけないと判断しました。
機器に名前を付けると親切になった気がしますが、開けない住所を案内してしまうほうが不親切です。名前は便利な近道として添え、確実に開ける住所を主役にしておくのが、結局いちばん手間が少ないと考えています。