以前の古いOSのネットワークエクスプローラから見えていた、ネットワークストレージ(NAS)やLinuxのSamba共有がいつの間にかWindows10、11では消えてしまって困ったという話を聞きます。

原因をネット検索すると、NAS内部はLinuxのSambaサーバーが動いていることが多く、Sambaのバージョンが古いものは(バージョンが NT1(SMB 1.x)だったりする)共有が出来ませんよ!!
と書いてある。新しいWindowsでは古いものはデフォルトでは動きませんよ!という事だ。
Windows 10からはSMB 3.1.1というバージョンを実装しているので「ネットワーク」に表示されてファイル共有が出来るのは同じWindows 10以降のものかSMB 3.1.1以降のSMBを使ったNASということになる。

<Windows側の対策>

簡単な対策としては「SMB 1.0を有効にする」という事。
無論、古いバージョンということなのでそれなりに問題がある。
しかし、相手側がSMB1.0から変更出来ないなら、自分が「SMB 1.0を有効にする」にしなければ共有は出来ないのは当たり前と考える。

SMB 1.0のサポートを有効にする方法

「Windowsの機能の有効化または無効化」を操作します。
「Win」+「S」キーを押して検索ボックスに「Windowsの機能の有効化または無効化」といれてWindowsの機能の画面を出します。

一覧から「SMB 1.0/CIFSファイル共有のサポート」のチェックが外れている場合はチェックを入れて有効化する。
念のため、再起動しておきましょう。

<相手側の対策>

LinuxサーバーでのSamba共有の場合

サーバーのSambaの設定ファイルsmb.confを開いて、[global]セクションに以下を追加しておこう。

[global]
# 以下追記部分
client max protocol =SMB3
client min protocol = NT1
#

Sambaを再起動させればSMB 1.xでもアクセスできることを確認できるはずだ。

問題点

上記で「はずだ」と書いたが、うまく動作すれば確かにネットワーク共有は動くのだが
直接以下のようにアドレスでアクセスした場合のことです。
何故かWindows10以上でアドレス指定なしではSMB 1.0は「ネットワーク」には現れません

原因究明その前にWindowsのネットワークの検索方法の仕組み

Windowsにおけるネットワークの検索方法を調べてみました。
    Windows XP       → NBT(NetBIOS over TCP/IP)
    Windows Vista、7 以降 → LLTD(Link-Layer Toplogy Discovery)
ブラウジングに関してはネットワーク探索におけるプロバイダと呼ばれる
    LLTD、LLDP、WSD
それらはそれぞれ実装は異なるけれど機能としては同じようなもの

現在のWindows11,10は「ネットワークアダプタの設定画面」を調べてみると
デフォルトで
LLTD(画面上では 「Link-Layer Topology Discovery Responder」「Link-Layer Topology Discovery Mapper I/O Driver」)
がチェックがオンの状態で、機能は有効になっています。
LLDP(Link-Layer Discovery Protocol)はIEEE 802.1abで標準化されたネットワーク探索プロトコルで、主にルータやスイッチで使用されているもので、Windows 10、11でもサポートしており、ネットワークアダプタの設定画面では「Microsoft LLDP」という表示でデフォルトで有効になっています。
ただしこちらを有効にしても、LLTDの場合と同じくエクスプローラから「ネットワーク」を開いたときに、やはりネットワーク上のコンピュータとして表示されません。
現時点ではこの2つは表示にはどのように役割なのか不明です。

WSDでの検索

WSD(Web Services On Devices)はMicrosoftが開発し、Windows Vista以降に導入された新しいネットワーク探索の仕組みとあります。
スタートメニューから「Windows管理ツール」を開き、「サービス」を起動します。
Windowsキー+R で「services.msc」と入力することでも起動できます。
サービス(ローカル)一覧から、「Function Discovery Resource Publication」を探します。
ダブルクリックでプロパティを開きます。スタートアップの種類(E)を「自動(遅延開始)」にし、コンピュータを再起動します
WSDが有効になります。

有効になれば、エクスプローラから「ネットワーク」を開いたとき、自身のコンピュータと、他にあればLAN上にあるコンピュータもリストに表示されていると思います。
詳細表示で「探索方法」のカラムでWSDと表示されていれば正常です。

結論

以上の試行錯誤から、Windows 10、11などの最新のWindowsでは、ブラウジングに関してはWSD。
名前解決に関してはLLMNR(ローカルネットワークに限定してサーバを用いずに名前解決を行うもの)
を使用してネットワーク探索をすることが分かった。

やや脱線してしまったが「Windowsでネットワーク共有ホルダが見えない理由」は

NASまたはLinuxのSambaサーバーが
1. SMB3.xではない
2. WSDに対応していない
というのが原因でした。

解決方法

表示したい相手のLinuxサーバーはWSDに対応させる。つまりwdsddまたはwsdd2を入れて対応する。
それの出来ない古いNASは検索で見えないだけで動いてはいるでアドレス指定で使う。
という結論です。古いNASの表示はあきらめましょう。
SMB1.xの時代はWSDではなかったので内部の書き換えが出来なければ対応できるわけがないのです。
でも「Windowsの機能の有効化または無効化」でSMB1.xを有効化すれば見えないけれど直接アドレス指定で使えるようになるので我慢しましょう。それがいやなら対応している新しいNASを買いましょう。

残る疑問点

NBTについては無効にしてしまっても構わない可能性もあるのか・・・と思うのだが・・・
再起動でFunction Discovery Resource Publicationがうまく起動できていれば「ネットワーク」にWSDとして表示されるが、その動作がうまくいっていないときがたまにあって、その時は「NetBIOS」と探索方法の欄に表示される。Function Discovery Resource Publicationを再起動すれば探索方法のカラムには「WSD」と表示され戻るので、Function Discovery Resource Publicationが未だ完全な動作をしていないのだろうと思われる。これはどういうことなのだろうか・・・

関連記事

LinuxでNTFSファイルシステムのマウントでアクセス権限やファイルの所有者変更で悩まないために

前回作成したUDP通信コンポーネントでチャットソフトを作ってみる

C# Windowsショートカットをキーボード入力ではなくボタンのクリックで送る方法

DSO-TC3を買ってみた!!

LinuxでUSB接続のストレージをsambaで共有する

ホスト名(ドメイン)からIPアドレスを取得する方法 覚書