0 Comments

Windows11のネットワークにおいて、コンピュータのアイコンは表示されるのにアクセスしようと思ったときにエラーとなって共有ホルダにアクセスできない問題がある。
当方でも、ネットワーク設定を新しく設定して正常にコンピュータ間の共有が出来ることを確認しても、パソコンをシャットダウンして次に立ち上げたときには、またもエラーとなって共有が見えなくなってしまっていることが多々ある。そのような時でも \\192.168.1.100 の様にアドレスでアクセスすると共有にアクセス出来るのであれば、共有設定には問題がないと考えられる。
原因は、やはりWindows11がネットワークコンピュータの名前とそのアドレスの関連付けが上手くいっていないとしか考えられないのである。
ということで、それなら C:\Windows\System32\drivers\etc\hosts ファイルに、アドレスとコンピュータ名を直接関連付けて書けばそのようなエラーは起こらなくなるはず?
と考えて実行してみた。

ネットワークに現れているコンピュータ名が「MINI-DESKTOP」という名前でそのアドレスが192.168.1.100 というなら
hostsファイルを管理者権限でエディタを立ち上げて開き、以下の一行を書き足しましょう!!
192.168.1.100 MINI-DESKTOP
あら、不思議!!
嘘のようにエラーが消え、いつでもアクセス出来るようになりました。
ローカルIPならこれで充分ですね。

その後、判ったこと

いやはや、これはWindowsのバグかと思っていましたが調べていくとバグではない様でした。
Microsoftさん、疑って申し訳ありませんでした。
NetBIOS over TCP/IPが有効になっていて、ネットワークプロファイルが「プライベート」になっている。
Function Discovery サービスも動いている。PC内に古い名前解決のキャッシュも捨てて新しくしている。
SMB 1.0 を有効化までして。PCで名前解決ができないのだから、ルーターのDNS機能や、ネットワーク全体でのNetBIOS設定が影響している可能性が高いです。

Windowsが \PC-NAME にアクセスしようとするとき、以下の順番で名前を探すらしい。

[入力: \PC-NAME]

DNSサーバーに問い合わせる ──❌【動いていない候補①】

ローカル探索 (LLMNR / mDNS) ─❌【動いていない候補②】

NetBIOS (WINS / ブロードキャスト) ─❌【動いていない候補③】

hostsファイルを参照 ─────🟢【ここでヒットしている】

hostsに書けば動く(=ネットワークのルート自体は正常)であるため、原因は以下の2点に絞られます。

  1. Windows Defender などのファイアウォール(最有力) ネットワークが「パブリック」になっている、またはセキュリティソフトの規則がきつすぎて、他のPCからの名前解決の要求(UDPポート)を拒否している。
  2. ルーターの仕様・設定 ルーターがプライバシーセパレーター(端末同士の通信を禁止する機能)をオンにしているか、ローカルDNS機能を持っていない。

1.はもう確認済みで問題はないのだから2.が怪しいですね。
ルーターによる「ローカルDNS」が機能していない可能性が大です。
我が家ではルーターがDNSサーバーの役割を持っています。自前でDNSサーバーを立てれば解決なんでしょうがそのような事はやっていません。ルーターの貧弱なDNSサーバー機能で賄ってます。
Windowsはネットワーク全体に「PC-NAME は誰ですか?」と直接パケットを飛ばして探す LLMNR (Link-Local Multicast Name Resolution) という機能を持っています。実は Windows 11(特に近年のアップデート以降)では、セキュリティ上の脆弱性を防ぐために、このLLMNR機能が標準で「無効化」される方向に仕様変更が進んでいます。ということは、プロファイルが「プライベート」であっても、OS自体の機能として「ネットワーク上の相手に直接名前を問いかける」のをやめてしまっているため、hostsに書かないと名前が判別できなくなっている。
何という事でしょう!!
セキュリティ上の脆弱性を防ぐためにやめてしまうとは・・・
脆弱性を解決せずに必要な機能を止めるとはどうなんでしょうか??
先ほどバグを疑って謝ってしまいましたが、バグではないが責任放棄では??
何だかちょっと後悔してます・・・
我が家では以下の操作でルーターが問題でダメでした。

DNSが仕事をしているか確認する

コマンドプロンプトで

nslookup コンピュータ名

結果の味方: もしここで Non-existent domain やエラーが出る場合、ルーター(DNS)経由での名前解決は完全に失敗しています。

見事!!失敗が確認されました。

ちなみに、古いNetBIOSが生きているか確認する

コマンドプロンプトで

nbtstat -a コンピュータ名

結果の味方: これで相手のIPやMACアドレスが表示されるなら、古い叫び声システム(NetBIOS)は生きています。エラーになるなら、LLMNRやNetBIOSといったローカル探索機能がOSレベルで止まっているか、遮断されています。

解決策

アクセス先のPCのIPアドレスを固定する IPアドレス自体を固定してしまえば、ともかくいつでもアクセスできるのでするしかないでしょう。

WSD (Web Services for Devices) を手動で有効化する Windows 11が名前解決に推奨している比較的新しい仕組み(WSD)を強制的に動かすため、前述のサービス Function Discovery Resource Publication を「自動(遅延開始)」にしてPCを再起動してみてください。しかしこの方法だけではいつの間にかダメになることが多い。
この新しい仕組みが不出来なのか??

我が家では、光回線機器は ZTE製 F660Aだったので、DNSサービスの設定を行うことにしました。
ルーターの設定画面で、アプリケーション > DNSサービス > ホスト名設定と選択して。「ホスト名」と「IPアドレス」を入力して終わりです。これで、いちいち各パソコンのhostsファイルに書かなくても良くなります。

結論

結局、出来の悪いOSのために起こっているいる事象であることは間違いない。
今回の場合は、DNSサーバーを立てるか、しっかりしたDNSサービスの仕組みが用意されたルーターに変えるかどちらかが解決策でした。