Windowsでネットワーク帯域幅(SMBトラフィックなど)を制限する方法

記事タイトルとURLをコピーする

こんにちは!イーゴリです。

例えば、Robocopyでオンプレミス環境からAWSや他の環境へデーターを移行する場合、帯域幅を制限しないとネットワークアダプターが一気にすべての帯域幅を利用してしまい、業務に影響が発生する可能性が高いので、Windowsでいくつかのネットワーク帯域幅(アウトバウンド帯域幅)を制限する方法を紹介致します。

この記事では3つの方法を紹介致しますが、下記のどれか1つの方法を使えば良いです。

Robocopyを使用する場合、帯域幅を制限する/IPGオプションがありますが、下記の記事に書いてある通り、/mt パラメーターを /ipg および /efsraw パラメーターと共に使用することはできませんし、他の理由もあり、/ipgオプションを使っておりません。

learn.microsoft.com

WindowsのGUI で QoS ポリシーを管理する方法

TCP/IPはQoSポリシーでネットワークの帯域幅を制限できますので、まずはこの方法から紹介致します。

gpedit.mscで ローカルグループポリシーエディター を開きます。

[コンピューターの構成] > [Windows の設定] > [ポリシーベースの QoS] > [新規ポリシーの作成]をクリックします。

下記の画面通り設定致します。
ポリシー名及びスロット率は環境の要件によって設定し、[次へ]をクリックします。 私の場合、8MBpsを設定しました(8*8=64Mbps)。

環境の要件によって設定し続けます。私の場合、すべてのソフトがTCP/UDPを使用し、すべてのポートやIPに対して制限速度を設定するという条件があるため、下記の通り設定致しました。Robocopyの場合、Robocopyのみに対し、制限を設定してもよいですが、今回はRobocopy専用のEC2で設定を適用しているため、Robocopy以外何もないので、下記以外の設定は不要です。

上記画面の「完了」ボタンを押す前に実際のネットワークパフォーマンスを見ます。

QoSの設定前の転送速度

「完了」ボタンを押した後で、下記のネットワークパフォーマンスになりました。

QoSの設定後の転送速度

QoS設定を無効化することができないため、削除します。その後、パフォーマンスを見ます。

受信 TCP トラフィック は、受信側の TCP 帯域幅の消費を制御しますが、QoS ポリシーは、送信 TCP および UDP トラフィックに影響します。

なおかつ、下記の選択肢しかありませんので、使い道が少ないため、受信 TCP トラフィックの設定はほぼ使わないです。

受信スループット レベル 最大値
0 64 KB
1 256 KB
2 1 MB
3 16 MB

learn.microsoft.com

PowerShellでWindowsのQoSポリシーを設定する方法

PoweShellを使用したい場合、下記のコマンドを使用できます。

ポリシーを作成するためには下記のコマンドで設定致します。 ※「10MB」の代わりに必要な設定値を設定します。

コマンド:

New-NetQosPolicy -Name "SMBRestrictFileCopySpeed" -SMB -ThrottleRateActionBitsPerSecond 10MB

出力結果:

Name           : SMBRestrictFileCopySpeed
Owner          : Group Policy (Machine)
NetworkProfile : All
Precedence     : 127
Template       : SMB
JobObject      :
ThrottleRate   : 10.486 MBits/sec

下記のコマンドでステータスを確認することができます。

Get-NetQosPolicy
Name           : SMBRestrictFileCopySpeed
Owner          : Group Policy (Machine)
NetworkProfile : All
Precedence     : 127
Template       : SMB
JobObject      :
ThrottleRate   : 10.486 MBits/sec

下記コマンドで設定したポリシーを削除することができます。

Remove-NetQosPolicy -Name SMBRestrictFileCopySpeed
確認
この操作を実行しますか?
Remove-NetQosPolicy -Name SMBRestrictFileCopySpeed -Store GPO:localhost
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):

PowerShellのSet-SmbBandwidthLimitでSMBトラフィックを制限する方法

下記の方法を使用するために、SMBプロトコルで使用する帯域を制限する機能をインストールする必要があります。

インストールコマンド:

Add-WindowsFeature -Name FS-SMBBW

下記のコマンドでSMBトラフィックのファイル転送の速度制限を設定します。
※10MBの代わりに必要な設定値を設定します。

Set-SmbBandwidthLimit -Category Default -BytesPerSecond 10MB

余談ですが、Hyper-V Live Migration用のトラフィック制限も似たような方法で制限することができます。

Set-SmbBandwidthLimit -Category LiveMigration -BytesPerSecond 10MB

下記のコマンドですべてのSMBトラフィック制限の設定の削除ができます。

Remove-SmbBandwidthLimit

詳しくは下記の記事をご参考ください。

learn.microsoft.com

以上、御一読ありがとうございました。

本田 イーゴリ (記事一覧)

カスタマーサクセス部

・2024 Japan AWS Top Engineers (Security)
・AWS SAP, DOP, SCS, DBS, SAA, DVA, CLF
・Azure AZ-900
・EC-Council CCSE

趣味:日本国内旅行(47都道府県制覇)・ドライブ・音楽