久し振りにHyper-Vの検証環境を構築してみたのですが、仮想スイッチにTeamingアダプタを設定しようとしたところ、エラーが発生したので対処について備忘録として残そうと思います。

仮想スイッチマネージャーから、サーバーマネージャーで作成したTeamingアダプタを指定したところ、「LBFOチームがHyper-V仮想スイッチにあたっちされていない可能性があります。」とエラーが発生し、仮想スイッチの作成に失敗します。

どうもWindows Server 2022から、Hyper-V仮想スイッチにLBFOチームをバインドできなくなったようで、代わりにSwitch Embedded Teaming(SET)を介してバインドする必要があるようです。
目次
Switch Embedded Teaming(SET)の作成
SETの作成はPowerShellからのみのサポートとのことなので、PowerShellでSETを作成する方法を下記に紹介します。
事前準備
#Teamingメンバーを確認する
PS C:\Users\Administrator> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
イーサネット 3 HP NC550SFP Dual Port 10GbE Server A... 29 Disconnected XX-XX-XX-XX-XX-XX 0 bps
イーサネット 4 HP NC550SFP Dual Port 10GbE Server...#2 33 Disconnected XX-XX-XX-XX-XX-XX 0 bps
イーサネット 2 Marvell AQtion 10Gbit Network Adap...#2 14 Up XX-XX-XX-XX-XX-XX 10 Gbps
イーサネット Marvell AQtion 10Gbit Network Adapter 12 Up XX-XX-XX-XX-XX-XX 10 Gbps
Team0 Microsoft Network Adapter Multiplexo... 7 Up XX-XX-XX-XX-XX-XX 20 Gbps
まずはSETのメンバNICを特定するために、Get-NetAdapterでサーバに接続されているNICの一覧を表示します。
今回はHP NC550 SFP Duak Port 10GbE Server Adapterを利用するので、「イーサネット 3」と「イーサネット 4」が対象となるので、このNICの名前(name)をメモしておきます。
SETの作成
続いて「イーサネット 3」と「イーサネット 4」がメンバのSETスイッチ「SETswitch」を作成するため、下記コマンドレットを実行します。
PS C:\Users\Administrator> New-VMSwitch -Name SETswitch -NetAdapterName "イーサネット 3","イーサネット 4" -EnableEmbeddedTeaming $true
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
SETswitch External チーミングされたインターフェイス
成功すればスイッチ種別(SwitchType)が外部(External)の「SETswitch」が作成されます。
GUIからの設定変更は不可

仮想スイッチマネージャーを確認すると、先ほど作成した「SETswitch」が表示されていることが確認できます。
ただし、仮想スイッチマネージャーから設定変更ができないため、もし設定変更する場合はPowerShellコマンドレットで設定する必要があります。
例)SETの設定パラメータ表示
まずはSETのパラメータを下記コマンドレットで表示します。
PS C:\Users\Administrator> Get-VMSwitchTeam -Name SETswitch|fl
Name : SETswitch
Id : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
NetAdapterInterfaceDescription : {HP NC550SFP Dual Port 10GbE Server Adapter, HP NC550SFP Dual Port 10GbE Server Adapter #2}
NetAdapterInterfaceGuid : {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
TeamingMode : SwitchIndependent
LoadBalancingAlgorithm : HyperVPort
例)ロードバランシングアルゴリズムの変更
PS C:\Users\Administrator> Set-VMSwitchTeam -Name SETswitch -LoadBalancingAlgorithm Direct
PS C:\Users\Administrator> Set-VMSwitchTeam -Name SETswitch -LoadBalancingAlgorithm HyperVPort
Teamingメンバの追加/削除
Teamingメンバを追加する場合は、下記コマンドレットを実行します。
#イーサネット 5とイーサネット 6をメンバに追加
PS C:\Users\Administrator> Add-VMSwitchTeamMember -VMSwitch SETswitch -NetAdapterName "イーサネット 5","イーサネット 6"
TeamingメンバからNICを削除する場合は、下記コマンドレットを実行します。
#イーサネット 5とイーサネット 6をメンバから削除
PS C:\Users\Administrator> Remove-VMSwitchTeamMember -VMSwitch SETswitch -NetAdapterName "イーサネット 5","イーサネット 6"
Teamingモードは今のところ「スイッチに依存しない」のみをサポート
SETを作成すると、デフォルトのTeamingモードが「スイッチに依存しない(TeamingMode:SwitchIndependent)」となっていたので、LACPに変更するため下記コマンドレットを実行しました。
PS C:\Users\Administrator> Set-VMSwitchTeam SETswitch -TeamingMode LACP
Set-VMSwitchTeam : パラメーター 'TeamingMode' をバインドできません。値 "LACP" を型 "Microsoft.HyperV.PowerShell.VMSwitchTeamingMode" に変換できません。エラー
: "識別子名 LACP は有効な列挙子名に一致しません。次のいずれかの列挙子名を指定して再試行してください:
SwitchIndependent"
発生場所 行:1 文字:41
+ Set-VMSwitchTeam SETswitch -TeamingMode LACP
+ ~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-VMSwitchTeam]、ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.HyperV.PowerShell.Commands.SetVMSwitchTeam
ところがTeamingModeの識別子にLACPは存在せず、SwitchIndependentしかないようです。
Microsoft Learnを確認すると、現時点では「スイッチに依存しない(SwitchIndependent)」しかサポートしていないようです。
ちょい面倒くさいけど、引き続きHyper-VでもTeamingアダプタは利用可能
LBFOチームをHyper-V仮想スイッチにバインドできなくなり、代わりにSETの作成が必要になりました。
SETは現状GUIでは作成できないため、以前の手順とは少し変わってしまい面倒ではありますが、Hyper-Vを実運用で回す場合、可能な限りNICの冗長化は担保しておきたいところ。
少し面倒ではありますが、Windows Server 2022以降でHyper-V環境を構築する場合は、ぜひ本記事を参考にしてみてください。