サーバー メッセージ ブロック (SMB) は、ユーザーやアプリケーションがネットワーク経由でファイル、プリンター、その他の共有リソースにアクセスできるようにする、重要なネットワーク ファイル共有プロトコルです。Windows 環境で一般的に使用される SMB は、クライアント システムとサーバー システム間のシームレスな通信を実現します。この記事では、SMB の仕組み、そのコンポーネント、一般的なトラブルシューティング手順、SMB 関連の問題を解決するためのベスト プラクティスについて説明します。
目次
SMB とは
サーバー メッセージ ブロック (SMB)は、ユーザーがリモート サーバー上のファイルをローカルであるかのように読み取り、書き込み、管理できるようにするネットワーク プロトコルです。SMB は Windows ネットワークで広く使用され、ファイル、プリンター、シリアル ポートへの共有アクセスを実現します。Linux や macOS システムでもサポートされており、クロスプラットフォーム通信のための汎用性の高いプロトコルとなっています。
SMB の仕組み
- クライアント要求:SMB クライアント(Windows、Linux、macOS など)が、共有リソースにアクセスするために SMB サーバーに要求を送信します。
- サーバー応答:SMB サーバーは、認証とアクセス許可に基づいて要求を検証します。
- リソース アクセス:アクセスが許可されると、クライアントはローカル ドライブ上にあるかのようにファイルを読み取り、書き込み、変更できます。
SMB の主要な用語
- SMB サーバー (SRV):共有ファイル システムをホストするシステム。
- SMB クライアント (CLI):共有ファイル システムにアクセスするシステム。
たとえば、Windows Server 2016 マシンが SMB 共有\\MyWorkstation\Data(Windows 10 コンピューター上)にアクセスする場合、サーバーはSMB クライアントとなり、ワークステーションはSMB サーバー.
SMB のバージョン
1. SMB 1.0 (レガシー)
- WannaCry や EternalBlue のような攻撃に対して脆弱です。
- 最新のセキュリティ機能がありません。
2. SMB 2.0 / 2.1
- パフォーマンスとセキュリティが向上しました。
- データ転送速度を向上させるため、より大きなバッファ サイズをサポートしています。
3. SMB 3.0+
- セキュリティ強化のために暗号化が導入されました。
- 高速ファイル転送のための SMB Multichannel や SMB Direct などの機能があります。
SMB のコンポーネント
1. バイナリ
- SMB クライアント バイナリ:場所は
%windir%\system32\Drivers:RDBSS.sysMRXSMB.sysMRXSMB10.sysMRXSMB20.sysMUP.sysSMBdirect.sys
- SMB サーバー バイナリ:
%windir%\system32:Srvsvc.dll%windir%\system32\Drivers:SRVNET.sys,SRV.sys,SRV2.sys,SMBdirect.sys
2. バインド
- SMB クライアント バインド:
Client for Microsoft Networks - SMB サーバー バインド:
File and Printer Sharing for Microsoft Networks

SMB のポートと通信
SMB は、使用するプロトコルに応じて異なるポートで動作します:
| プロトコル | ポート | 説明 |
|---|---|---|
| NetBIOS over TCP/IP | UDP 137 | 名前解決 |
| NetBIOS over TCP/IP | UDP 138 | データグラム サービス |
| NetBIOS over TCP/IP | TCP 139 | セッション サービス |
| TCP 経由のダイレクト SMB | TCP 445 | 既定の SMB 通信 |
最新のネットワークでは主にTCP 445を使用し、古いシステムでは NetBIOS に依存する場合があります。
SMB の問題をトラブルシューティングする方法
1. 接続を確認する
- クライアントが次のポートでサーバーに接続できることを確認します。TCP 445:
Test-NetConnection <server_IP_or_hostname> -Port 445
- 失敗した場合は、Azure Firewall、NSG、またはローカル ファイアウォールで SMB トラフィックがブロックされていないか確認します。
2. 名前解決を確認する
- ホスト名と IP でサーバーへのアクセスをテストします:
nslookup <server_hostname>
- ホスト名で失敗した場合は、DNS 構成を確認します。
3. SMB サービスを確認する
- 必要なサービスが実行中であることを確認します:
Get-Service -Name LanmanServer, LanmanWorkstation
- 停止している場合はサービスを開始します:
Start-Service -Name LanmanServer, LanmanWorkstation

4. ファイアウォール規則を確認する
- SMB 規則が有効になっていることを確認します:
netsh advfirewall firewall show rule name="File and Printer Sharing (SMB-In)"

5. アクセス許可を確認する
- フォルダーのプロパティまたは CMD を使用して、共有アクセス許可と NTFS アクセス許可を確認します:
net share <sharename>
icacls <folder_path>


6. UNC パスを使用してアクセスをテストする
- 「
Run(Win + R) を開き、次のように入力します:
\\<server_IP_or_hostname>\sharename
高度なトラブルシューティングとデータ収集
1. SMB セッションを確認する
- アクティブな SMB セッションを表示します:
Get-SmbSession
2. SMB 構成をリセットする
- SMB 2 と 3 を無効化してから再度有効化します:
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force
3. ネットワーク トレース
- Wireshark を使用して SMB 関連のネットワーク パケットを収集します:
- SMB クライアントとサーバーの両方でトラフィックのキャプチャを開始します。
- 問題を再現します。
- パケットを分析して SMB エラーやタイムアウトを探します。
4. イベント ログを収集する
- さらに分析するために、SMB 関連のイベント ログをエクスポートします:
- SMB クライアント ログ。
- SMB サーバー ログ。

参考ドキュメント:
Server Message Block (SMB) の高度なトラブルシューティング | Microsoft Learn
SMB のトラブルシューティング ガイダンス – Windows Server | Microsoft Learn
Microsoft SMB プロトコルと CIFS プロトコルの概要 – Win32 アプリ | Microsoft Learn
Windows で SMBv1、SMBv2、SMBv3 を検出、有効化、無効化する | Microsoft Learn
Windows Server における SMB 3 プロトコルを使用したファイル共有の概要 | Microsoft Learn
Server Message Block の署名の概要 – Windows Server | Microsoft Learn
SMB のセキュリティ強化 | Microsoft Learn
まとめ
SMB はファイル共有とリソース アクセスのための強力なプロトコルですが、設定ミス、ネットワーク制限、古いコンポーネントが原因で問題が発生することがあります。上記のトラブルシューティング手順に従うことで、SMB 関連の問題を効果的に特定し、解決できます。複雑な問題については、ネットワーク トレースやイベント ログなどの高度な診断により、より深い洞察が得られます。