両方のPCがVPNに接続するとSMBコピーが遅くなる理由
SMB3 MultichannelはLANコピーにトンネルチャネルを追加し、より遅い経路へ引きずり込むことがあります。チャネルを確認し、バインドを解除するか無効にして再テストしてください。
ギガビットLAN上の二台のWindowsマシン間のファイルコピーは、両方が同じVPNに接続した瞬間に這うような速度まで落ちるのに、同じペア間のスループットテストは依然としてほぼ回線速度を報告します。問題はリンクでもディスクでもありません。SMB3 Multichannelがトンネル経由で走る二つ目のTCP接続を静かに追加し、コピーは最も遅いチャネルを待つことになりました。この経路をSMBから外せば、LANの速度は戻ります。
一つの共有が複数のTCP接続を使える
Multichannelでは、クライアントが一台のサーバーに対して、適切なアドレスのペアごとに一本ずつ独立した接続を開けます。単純なLANではペアが一つしかないこともあり、驚くことは起きません。両方のマシンにVPNアダプターを追加すると、Windowsは二つ目のペア(トンネルアドレス同士)を認識し、そこにチャネルを開きます。
そのチャネルは暗号化され、トンネルとCPUを共有し、他のすべてと同じWANリンクを渡ります。LANだけを使っていたはずのコピーのセットには遅いメンバーが加わり、SMBはそれを黙って外しません。
LANアドレスに固定したスループットテストは依然として健全に見えますが、二つの測定がこれほど鋭く食い違うのはまさにそのためです。
何かを変える前にトンネルチャネルの存在を証明する
チャネル一覧は生きているときだけ意味があるので、コピーの実行中にクライアントでクエリを実行してください。
Get-SmbMultichannelConnection | Where-Object Selected -eq $true | Format-Table ServerName, ClientIPAddress, ServerIPAddress Get-SmbConnection | Format-Table ServerName, Dialect, NumOpens
同じサーバーに対して選択された行が複数あることが、必要な確認です。疑わしい行のクライアントアドレスをインターフェイスに解決します。そのエイリアスがVPNアダプターなら、チャネルは実際に存在し、古いエントリではありません。
Get-NetIPAddress -IPAddress 10.8.0.6 | Format-List IPAddress, InterfaceAlias
アドレスはマシンごとに異なるので、上の例を入力するのではなく、自分の出力が報告するアドレスを読んでください。
SMBからトンネルを外し、両端を再起動する
Multichannelをオフにするのはクライアントとサーバーの両方での変更であり、片側だけで行うともう片側はインターフェイスを提供し続けられます。既存のチャネルは設定後も残るので、次のコピーが違う動作をすると期待するのではなく、再起動を計画してください。
Set-SmbClientConfiguration -EnableMultiChannel $false -Force Set-SmbServerConfiguration -EnableMultiChannel $false -Force Get-SmbClientConfiguration | Select-Object EnableMultiChannel
再起動後、サーバーがSMB用に提供するインターフェイスを一覧表示します。トンネルアダプターはその一覧から消えているはずです。まだ残っているなら、設定が間違ったエンドポイントに適用されたか、古いセッションがまだ開いています。
Get-SmbServerNetworkInterface | Format-List Name, InterfaceAlias, LinkSpeed
目標がどこでもMultichannelを無効にすることより狭い場合、サーバーコンポーネントをトンネルアダプターからアンバインドすると、その経由の共有だけが止まり、VPNの残りはそのままになります。
Get-NetAdapterBinding -Name "<vpn adapter>" -ComponentID ms_server Disable-NetAdapterBinding -Name "<vpn adapter>" -ComponentID ms_server
LANを優先し、同じ方法で二回測定する
インターフェイスメトリックはチャネルを削除しませんが、新しい接続を物理リンクへ誘導し、無関係なトラフィックをトンネルから遠ざけます。エイリアスは一部のインストールでローカライズされているため、入力せず出力からコピーしてください。
Get-NetIPInterface | Sort-Object InterfaceMetric | Select-Object InterfaceAlias, InterfaceMetric Set-NetIPInterface -InterfaceAlias "<vpn adapter>" -AutomaticMetric Disabled -InterfaceMetric 9000
次に、ファイルコピーと単一ストリームのスループットテストという二つの測定を繰り返します。コピーが回復してスループットテストが変わらなければ、トンネルは決してボトルネックではありませんでした。両方が崩壊するなら、VPN経路が限界であり、Multichannelはそれを可視化しただけです。変更を切り分けられる唯一の基準はVPN接続前に取ったコピーなので、それと比較してください。
Multichannelを無効にすると、実際に複数の高速経路を提供するサーバーではスループットを犠牲にするので、VPNが画面から消えたら再び有効にしてください。次の人は理由ではなく設定を見つけるので、どのアダプターを変更したか記録しましょう。