2024年4月18日木曜日

ファイルサーバ(Sambaサーバ)がWindowsから見えないよ(いまさら)

 前回の記事に関連して、いまさら言うような話でもないのですが、Windows7や8からアップグレードを重ねてWindows11まで来てしまったりすると気づかなかったりしますし、まあちょうどよい機会ですのでメモしておきたいと思います。

 Windows10の1709あたり以後、SMB1.0がデフォルトで廃止されたためLinuxやFreeBSD上で稼働しているsambaサーバがWindowsのエクスプローラの「ネットワーク」フォルダ(ややこしい)に表示されなくなったりします。

よっぽど古いNAS製品でもない限り、sambaのバージョンが3.5(おおよそ13,4年前です)以上ならSMB2以上に対応していますから、あくまでもエクスプローラの「ネットワーク」フォルダに表示されないのが問題なので、ファイル共有自体にはSMB1.0は不要です。

で、SMB1.0が入っていないとなぜエクスプローラの「ネットワーク」フォルダに表示されないのかというと、NETBIOS over TCP/IP(NBT)という仕組みでサーバの名前をばらまいたり受け取ったりしているのですが、その仕組みがSMB1.0と抱き合わせなので、SMB1.0を削除すると名前を受け取ったりできなくなります。

sambaはNBT以外で名前を解決する機能は持っておらず、別のプログラムが必要になります。

そこで、Windows VistaからはNBTとは別の名前の解決手段も有効になっていますので、例えばWSDという機能でもってSambaサーバが稼働しているマシン名をばらまくとめでたくSMB1.0なしで(NETBIOSを使わずに)エクスプローラの「ネットワーク」フォルダにsambaマシンが表示されるようになります。

ですので、sambaマシンでWSDをしゃべるデーモンを稼働させればいいわけです。

なお、そもそもエクスプローラの「ネットワーク」フォルダに表示されなくたっていい場合は、ネットワークドライブを割り当ててしまえばいいだけです。
そのほかにも、たとえばショートカットを新規作成し、その「リンク先」に

 \\192.168.x.x\shared_folder

というようにsambaマシンのIPアドレス(hostsやDNSが正しく設定されているなら名称でもOK)を与えてやれば、それ以後はいちいち手入力しなくても共有フォルダが開けます。

さて、sambaが稼働しているサーバがLinuxかFreeBSDだった場合(Windowsだった場合はそもそも必要はありませんよね)、pythonで記述されたWSDデーモンC言語によるそれがあるのですが、python版なら様々なLinuxディストリビューションやFreeBSDでパッケージ化されているので導入が楽だと思います。

python版で一点だけ注意が必要なのは、UbuntuやCentOSなど、使用しているディストリのカーネルオプション次第ではIPv6を使用するとエラーが出ます。その際は起動オプションで明示的にIPv4だけで稼働するよう指示(-4)を与える必要があります。また、WSDで名前を案内したいLANに接続されたネットワークインターフェース名(enp2s0やeth0など)も明示的に指定(-i)する必要があります。
いうまでもありませんが、ドメイン(-d)orワークグループ(-w)、および名前(-n)の指定は必要です。

たいしたことではないのに長くなってしまいました。

以上です。ここまでお読みいただいてありがとうございました。

0 件のコメント:

コメントを投稿