windows:windows10-lbfo-teaming.html

Windows 10 で Windows Serverのチーミング機能(LBFO)を使う

当方の PC は 10GbE の HP NC523SFP を使用していますが、WoL に対応していない事と、偶にリンクダウンして帰ってこなくなることがあるので、オンボードの Intel I211 と異種混合チーミングを行い、Intel I211 側をスタンバイアダプタとして利用することで Wol の待ち受けと切断時のバックアップとして活用を行います。

元ネタ

動作原理や歴史的経緯はネタ元を読んでください。

Windows Server 2019から下記のファイルを抽出。

一部ネタ元から改変しています。
INFフォルダの追加
Microsoft-Windows-ServerCore-Drivers-net-Package~31bf3856ad364e35~amd64~~10.0.17763.1.catの追加。

Windows
    ├───INF
    │   mslbfoprovider.inf
    │
    └───System32
        ├───CatRoot
        │   └───{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
        │           Microsoft-Windows-Server-Features-Package017~31bf3856ad364e35~amd64~~10.0.17763.1.cat
        │           Microsoft-Windows-ServerCore-Drivers-net-Package~31bf3856ad364e35~amd64~~10.0.17763.1.cat
        │
        ├───drivers
        │   │   MsLbfoProvider.sys
        │   │
        │   └───en-US又はja-JP
        │           MsLbfoProvider.sys.mui
        │
        └───DriverStore
            ├───en-US
            │       MsLbfoProvider.inf_loc
            │
            └───FileRepository
                └───mslbfoprovider.inf_amd64_9afb7ecb68781bac
                        mslbfoprovider.inf
Enable_Lbfo.reg
Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MsLbfoProvider]
"Description"="@%SystemRoot%\\System32\\drivers\\MsLbfoProvider.sys,-501"
"DisplayName"="@%SystemRoot%\\System32\\drivers\\MsLbfoProvider.sys,-501"
"ErrorControl"=dword:00000001
"Group"="NDIS"
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,\
  72,00,69,00,76,00,65,00,72,00,73,00,5c,00,4d,00,73,00,4c,00,62,00,66,00,6f,\
  00,50,00,72,00,6f,00,76,00,69,00,64,00,65,00,72,00,2e,00,73,00,79,00,73,00,\
  00,00
"Start"=dword:00000003
"Type"=dword:00000001
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MsLbfoProvider\Parameters]
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4d36e974-e325-11ce-bfc1-08002be10318}\{FC66A602-B769-4666-A540-CA3DF0E7DF2C}]
"InstallTimeStamp"=hex:dd,07,0c,00,04,00,05,00,00,00,00,00,00,00,00,00
"Characteristics"=dword:00040000
"ComponentId"="ms_lbfo"
"Description"="@%SystemRoot%\\System32\\drivers\\MsLbfoProvider.sys,-501"
"InfPath"="MsLbfoProvider.inf"
"InfSection"="Install"
"LocDescription"="@%SystemRoot%\\System32\\drivers\\MsLbfoProvider.sys,-501"
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4d36e974-e325-11ce-bfc1-08002be10318}\{FC66A602-B769-4666-A540-CA3DF0E7DF2C}\Ndi]
"TimeStamp"=hex:dd,07,0c,00,04,00,05,00,00,00,00,00,00,00,00,00
"HelpText"="@%SystemRoot%\\System32\\drivers\\MsLbfoProvider.sys,-500"
"Service"="MsLbfoProvider"
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4d36e974-e325-11ce-bfc1-08002be10318}\{FC66A602-B769-4666-A540-CA3DF0E7DF2C}\Ndi\Interfaces]
"LowerRange"="nolower"
"UpperRange"="noupper"
"FilterMediaTypes"="ms_implatform"
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\System\MsLbfoProvider]
"ProviderGuid"=hex(2):7b,00,33,00,38,00,37,00,65,00,64,00,34,00,36,00,33,00,2d,\
  00,38,00,62,00,31,00,62,00,2d,00,34,00,32,00,63,00,39,00,2d,00,39,00,65,00,\
  66,00,30,00,2d,00,38,00,30,00,33,00,66,00,64,00,66,00,64,00,35,00,64,00,39,\
  00,34,00,65,00,7d,00,00,00

アクセス権がないディレクトリやレジストリを操作することになるので、PSExecを使用してSYSTEM権限のcmdから作業します。

psexec -s -i cmd.exe
instlbfo.cmd.cmd
xcopy /H /Y /E Windows %systemroot%
reg import Enable_Lbfo.reg

念のためシステムを再起動します。

コントロールパネルのネットワーク接続から任意のネットワークアダプタを右クリックしてプロパティを開き、[インストール]をクリック。 選択肢から[サービス]を選択して[追加]をクリックし、[MicrosoftLoadBalancing / FailoverProvider]をインストールします。 一切何も起こらずにウインドウが閉じられますが、ドライバの起動が目的なのでこれで正常となります。

当方の環境ではシステムを再起動した後にネットワークが不通になる不具合が発生します。 [sc query mslbfoprovider]で確認したところ、LBFOドライバが起動していないことが発覚したためタスクスケジューラで立ち上げを行っています。

GUIの設定画面は使えないのでPowerShellで設定を行います。

クライアントOSでも、PowerShellベースの設定コマンドはインストールされているので、上記のドライバインストール手順を行うと設定可能になります。

PowerShellでNICチーミング(NetLBFO)を操作する - しばたテックブログ

New-NetLbfoTeam -Name "Main-TEAM" -TeamMembers ("イーサネット", "イーサネット 2", "イーサネット 3") -TeamingMode SwitchIndependent
Rename-NetLbfoTeam -Name "Public-TEAM" -NewName "Main-TEAM"

スタンバイモードにする

Set-NetLbfoTeamMember -Name "イーサネット" -AdministrativeMode Standby
Get-NetLbfoTeam