このページの本文へ

Windows Info 第131回

Windows 10をRS4にするとエクスプローラーがLAN内のPCを表示しなくなった!?

2018年06月24日 10時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

エクスプローラーのネットワークに表示されていた
LAN内の他のPCは一体どこに?

 Windows 10をRS4(Ver.1803)にアップグレードしてから、エクスプローラーのネットワークにLAN内のPCが表示されなくなった、あるいはRS4を入れる以前から見えなかったということに気づいた読者がいるのではないだろうか。端的にその原因を説明すると、SMBv1(SMB1.0)が削除されたためである。

Windows 10をアップデートすると、エクスプローラーのネットワークでPCが表示されなくなってしまった

 マイクロソフトは、Windows 10 RS3(Ver.1709)からSMBv1の排除に乗り出した。RS3では、SMBv1はインストールされるものの稼働時間でのべ15日以上(電源オフの時間は除く、以下同様)の利用がない場合、SMBv1をシステムから削除する。RS3のクリーンインストールではSMBv1サーバーはインストールされず、SMBv1クライアントは残るものの、のべ15日間以上利用がない場合には、やはり削除される。

 具体的には、SMBv1が動作しているNASや古いバージョンのPCなどと接続している場合は大丈夫だが、そうでない場合には、SMBv1の機能はWindows 10から削除される。また、RS4へアップグレードした場合には、SMBv1がそもそもインストールされないようだ。

標準ではSMBv1は導入されていない

 NASなどの場合は、機器側の設定でSMBv2以降を利用するように変更できるものもあるが、製品ごとに機能があるかどうか、あったとしても設定方法はさまざまで本稿で解説するのは難しい。

 さらにベンダーによっては、SMBv1の利用に関する情報を公開していないケースもあり、不安という人もいるだろう。英語ではあるが、マイクロソフトが集めたSMBv1を使うベンダーのリストが以下のURLにあるので、これを参考にするといい。

●SMB1 Product Clearinghouse
 https://blogs.technet.microsoft.com/filecab/2017/06/01/smb1-product-clearinghouse/

 なお、Windowsにおいては、Vista以降でSMBv2をサポートしているので、すでにWindows同士のファイル共有自体に関する問題はないはずだ。うまく行かない場合は、どちらかのマシンがSMBv1を利用するように強制されているケースなどが考えられる。また、エクスプローラーのネットワークにPCが表示されないだけで、アドレス欄にUNCを入力すれば、ちゃんと該当マシンの共有一覧を見ることはできる。ネットワーク内の台数が少ないなら、必要な共有フォルダーをクイックアクセスに登録するのもありだろう。

SMBv1の脆弱性はWannaCryでもターゲットに
今後も使い続けるのはリスクがある

 そもそもSMBv1は、MS-DOS時代に作られたファイル共有などのプロトコルであるSMB(バージョン番号はなし)をベースに、Windows 2000やXPのときに作られたプロトコルである。これに対して、SMBv2は、Windows Vistaにおいて、SMBv1との互換性を考慮することなく新しく作り直されている。

 SMBv1には、互換性維持のためにセキュリティが甘くなっている部分があり、これまでも問題になっていた。マイクロソフトは、SMBv1の利用を停止しようとしていたが、SMBv1をベースに仕様を公開したCIFS(Common Internet File System)などもあり、Windows以外のプラットフォームにおけるファイル共有に利用されていた。そのためマイクロソフトも簡単には無くすことができなかったわけだ。しかし、昨年に大きな被害を出したランサムウェアであるWannaCryにおいてSMBv1の脆弱性を利用するなどしており、早急な対策が求められていたのである。

 つまり削除されたSMBv1を復活させるという手もあるにはあるのだが、これはあまりに危険というわけだ。そこで本記事では「機能探索リソース公開」サービスを有効にする方法を紹介する。

 なお、ネットワーク探索でPCを表示させること自体、侵入された場合などに危険といった意見もあるようだが、そもそも侵入された段階で危険な状態なのであり、Windowsがネットワーク探索でPCを表示しなくても、総当たり的にpingコマンドを実行すれば、PCを発見することは可能である。このため、ネットワーク探索を有効にすること自体は問題はないと考えられる。それより個々のマシンのパスワード設定をきちんとすることが重要だろう。

「機能探索リソース公開」サービスを起動して
他のマシンに表示させる

 Windowsでは、プリンタなどのリストアップにWS-Discovery(WSD)というプロトコルを利用する。「機能探索リソース公開」は、このWSDを使って、自身が持つリソース(ファイル共有やリモート印刷など)を公開するためのものだ。

 エクスプローラーは、ネットワーク内の複数のリソース列挙方法に対応している。しかしこれまでは、リソースをデフォルトで公開するのは、SMBv1だけだった。Windows 10のRS3以降で、SMBv1が禁止されると、他の方法ではデフォルトではリソースを公開しないため、 エクスプローラーにPCが表示されなくなったのである。

 エクスプローラーでネットワークを開き、「探索方法」のカラムを表示させると、PCを発見した方法を表示させることが可能だ。なお、ここにNetBIOSと表示されるようならSMBv1がローカル、リモートともに動作している。

エクスプローラーのネットワークを開き、詳細表示にして「探索方法」カラムを表示させることで発見方法を調べることができる

 そこで、機能探索リソース公開サービス「Function Discovery Resource Publication (FDResPub)」をシステム起動時に自動で起動するように設定する。これで、他のPCのネットワークに表示されるようになる。ただし、ネットワーク内のPCをすべて表示できるようにするには、全部のマシンで同じ設定をする必要がある。

 マイクロソフトのドキュメントでは、同時に「機能探索プロバイダー ホスト サービス」(Function Discovery Provider Host)を自動起動に設定することになっているが、RS4でテストしたところでは、Function Discovery Provider Hostは、エクスプローラーでネットワークを開くなどすると自動的に起動されるため、あらかじめ起動しておく必要はなかった。

 ちなみに、前回紹介したPowerShell Remotingを設定していれば、1つのマシンから他のマシンの設定を行うことは可能だ。具体的には、Invoke-Commandで、set-serviceコマンドレットを起動させる。これにより、サービスを自動起動に設定し、かつ実行を行う。

set-Service fdrespub -StartupType Automatic -Status Running

 このコマンドでは、「fdrespub」というサービスの起動方法を「Automatic(自動)」とし、サービスを起動させるものだ。

 おそらく、新規にPCを追加すると、再度作業が必要になるだろう。そこで関数(以下の囲みを参照)を作り、

function setfsd ([string]$pcname, [string]$username) {
    if($pcname -eq ""){
        Write-output "Usage: setfsd PC-Host-Name Remote-Admin-User-Name"
        return
        }
    Invoke-Command -ComputerName $pcname -Credential $username {
        Write-output "Before Processing"
        Get-Service fdRespub | Format-List -Property Name,DisplayName,StartType,Status;
        # set-Service fdphost -StartupType Automatic -Status Running;
        set-Service fdrespub -StartupType Automatic -Status Running;
        Write-output "After Processing"
        Get-Service fdrespub | Format-List -Property Name,DisplayName,StartType,Status;
    }
}

ファイル(拡張子は.ps1とする)に保存するか、自身のプロファイル($profile変数で参照できる)に登録しておく。この関数を使えばコンピュータ名と管理者アカウントを指定するだけで、対象マシンのサービスを設定できるようになる。

LAN内のマシンを全部手動で設定してまわるのは面倒なので、前回紹介したPowerShell Remotingを使って、1台のマシンから他のPCのサービスを変更する。関数を登録することで作業を簡略化できる

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン