SCVMM+Hyper-Vの論理ネットワークを設定して理解する

## 概要
先日環境構築した[Hyper-V（Windows Server 2022）のフェールオーバークラスター](https://qiita.com/shotatada/items/d6f90fefde80872145ed)にSCVMMを追加してvCenterのような統合管理を実現する。特にネットワーク周りの設定を理解するのに苦労したので、設定を通じて学んだことをまとめておく。

今回実現したいこと
- vSphereのvDSのように複数ホストに対してネットワーク設定を一括で設定・管理
- vSphereのポートグループのようにvlanごとにNWを分離
- 仮想マシンへのIPアドレス設定はDHCPではなく静的に設定
- ゲートウェイはVMMファブリック外部のルーターを使用する

これらをSCVMM+Hyper-Vで実現する上で登場する、論理ネットワーク、ネットワークサイト、IPプール、VMネットワーク、ポートプロファイル、論理スイッチという概念同士のつながりや構造の体系を理解することが重要と感じた。
手順は基本的に公式ドキュメント [MS Learn | VMM ネットワーク ファブリックのセットアップ](https://learn.microsoft.com/ja-jp/system-center/vmm/manage-networks?view=sc-vmm-2022) を使用。

## 環境
- Nested ESXi（7.0u3）
- System Center VMM 2022
- Hyper-Vホスト：Windows Server 2022
    - フェールオーバークラスタは作成済み＆SCVMMに登録済み
    - 仮想スイッチ未作成の状態にしておく

論理ネットワーク等作成後の最終形は以下のようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/68f89ac8-8712-c0f6-2f68-a2d6de86f9bb.png)

Nested ESXi環境でタグvlanを通すために、ポートグループpg-1はVGT Mode（VLAN ID 4095）に設定しておく。これによりHyper-Vホスト---csr1kv間のタグvlanが素通しされることになり疎通可能になる。
参考：https://kb.vmware.com/s/article/1010733

## 論理ネットワーク・ネットワークサイト・VMネットワーク
### 論理ネットワーク
論理ネットワークとは物理トポロジーを抽象化してテンプレート化・モデル化したようなもの。VMネットワークとの接続により3種類のオプションがある。
1. 接続されたネットワーク
1. 独立したネットワーク
1. 仮想化されたネットワーク

今回は「独立したネットワーク」を選択してVLANごとにVMネットワークを分離する構成とした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/bb0a35f6-de40-5ffe-2a42-0952f749e3ca.png)

### ネットワークサイト・IPプール
一般的には1データセンタ = 1ネットワークサイト として作成するようだ。
- ネットワークサイト配下にIPプールを作成する
- ネットワークサイトととホストグループをリンクさせる
- ネットワークサイトとVLAN・IPサブネットのペアをリンクさせる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/30f5da89-a527-e856-4eb8-1a135dc3280c.png)

設定内容をまとめるとこのようになる。※VMネットワークはこのあと作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/4fffc09c-980a-e8ab-d4bb-f8dfb9781b90.png)

### VMネットワーク
VM ネットワークは、論理ネットワークへのインターフェイスとして機能するオブジェクトのこと。今回の構成では4つのVMネットワークを作成してそれぞれにIPプールおよびVLAN・IPサブネットのペア（=ネットワークサイトに関連付けたVLAN・IPサブネットのペア）を割り当てた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/f71aab10-d63d-c327-e2b3-51e2dd153650.png)

## ポートプロファイル・論理スイッチ
### ポートプロファイル
アップリンクポートプロファイル（pNICに適用）と仮想ネットワークアダプターポートプロファイル（vNICに適用）の2種類ある。今回はManagement通信用のアップリンク、LiveMigration通信用のアップリンク、Guest通信用のアップリンク、を物理的に分けるように3つのアップリンクポートプロファイルを作成した。
- 負荷分散アルゴリズム：Hyper-Vポート
- チーミングモード：静的チーミング

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/500e0394-7666-5c10-4a11-27e4e71681fd.png)

### 論理スイッチ
論理スイッチはvSphereのvDSのように複数ホストに跨って構成され、複数ホスト間のネットワーク アダプターで一貫した設定を行えるようにするためのもの。

#### Management通信用の論理スイッチ作成
まずはManagement通信用の論理スイッチを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/8c8a817a-474d-6586-8049-888f559bc558.png)

Management通信用の論理スイッチでは、ホストOSの管理およびクラスタホスト間のハートビートに使用するため、それぞれ仮想ポートに適用するポート分類を用意しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/1e3788c5-328f-3fa9-7a3b-544983e3d03d.png)

アップリンクにはmanagement通信用のアップリンクポートプロファイルを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/3c4c7f0e-2008-272d-239f-159270607ac9.png)

ホストOS管理用の仮想ネットワークアダプタを作成。「ホスト管理にこの仮想ネットワークアダプタを使用する」にチェックを入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/bdfc9f9a-37a6-30cd-0bb3-8cf931fd45a2.png)

クラスタホスト間のハートビート用の仮想ネットワークアダプタを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/82e4610b-e622-3efa-094a-5a197c11bc1b.png)

#### Live Migration用論理スイッチの作成
同様にLive Migration用の論理スイッチを以下のように作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/56d84341-0a40-e12e-0114-ecf3aff74a7f.png)

#### ゲスト通信用論理スイッチの作成
同様に、ゲスト通信用の論理スイッチを以下のように作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/8a90ee8a-13dc-06ae-d1ac-0fde7a6f3ed1.png)

### ホストに論理スイッチを割当て
ホストのプロパティ >> 仮想スイッチ から新しい論理スイッチを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/b0bf0078-2b63-a9f4-6037-e2cedf7ba296.png)

#### Management通信用の論理スイッチ
今回は物理アダプタにEthernet1、Ethernet2を選択。この2つのpNICにmanagement通信用アップリンクポートプロファイルが適用されるようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/bf5dc8f4-6f55-a515-ba77-4fc5d845634f.png)

ホストOS管理用の仮想ネットワークアダプタは以下。今回の例では10.8.10.11をホストに割り当てており、このアドレスを使ってホストOSへRDP接続することが出来る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/c9c264dd-94cf-70e1-b798-726fcf5d0809.png)

同様にクラスタホスト間のハートビート用の仮想ネットワークアダプタは以下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/bfc4ba9b-ab00-714c-d5bf-5c4d56346e1a.png)

#### Live Migration通信用の論理スイッチ
今回は物理アダプタにEthernet5、Ethernet6を選択。この2つのpNICにLive Magration通信用アップリンクポートプロファイルが適用されるようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/0bee2560-eb30-73d7-b1b9-dea76633cb3b.png)

Live Migration用の仮想ネットワークアダプタは以下。後ほどパケットキャプチャを試したところ、VMのLive Migrationを行う際にはホスト間のこのIPv4アドレスを用いることになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/fa004df8-586b-84da-2ecd-1923869fc40f.png)

#### Guest通信用の論理スイッチ
今回は物理アダプタにEthernet3、Ethernet4を選択。この2つのpNICにゲスト通信用アップリンクポートプロファイルが適用されるようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/baffc2b2-7abc-8bc1-a08e-827d385cffe3.png)

設定内容をまとめるとこのようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/27f37bae-5547-e524-ea59-1ff3b18c3119.png)


## 動作確認
VMネットワーク（vlan101）に所属するVM2個、VMネットワーク（vlan102）に所属するVM1個を作成する。VMのゲートウェイはcsr1kvを指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/ba933460-a740-845d-403c-a9e600fdf64f.png)

```
//同一VMネットワーク同士の通信（vm101-1 -> vm101-2へのping疎通）
[root@vm101-1 ~]# ping 10.8.101.2 -c 5
PING 10.8.101.2 (10.8.101.2) 56(84) bytes of data.
64 bytes from 10.8.101.2: icmp_seq=1 ttl=64 time=0.343 ms
64 bytes from 10.8.101.2: icmp_seq=2 ttl=64 time=0.376 ms
64 bytes from 10.8.101.2: icmp_seq=3 ttl=64 time=0.388 ms
64 bytes from 10.8.101.2: icmp_seq=4 ttl=64 time=0.422 ms
64 bytes from 10.8.101.2: icmp_seq=5 ttl=64 time=0.389 ms

--- 10.8.101.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.343/0.383/0.422/0.033 ms

//vm101-1 -> ゲートウェイ（csr1kv）へのping疎通
[root@vm101-1 ~]# ping 10.8.101.254 -c 5
PING 10.8.101.254 (10.8.10.254) 56(84) bytes of data.
64 bytes from 10.8.101.254: icmp_seq=1 ttl=255 time=2.65 ms
64 bytes from 10.8.101.254: icmp_seq=2 ttl=255 time=2.78 ms
64 bytes from 10.8.101.254: icmp_seq=3 ttl=255 time=2.90 ms
64 bytes from 10.8.101.254: icmp_seq=4 ttl=255 time=2.95 ms
64 bytes from 10.8.101.254: icmp_seq=5 ttl=255 time=2.85 ms

--- 10.8.10.254 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 2.653/2.829/2.950/0.109 ms

//vm101-1 -> インターネットへのping疎通
[root@vm101-1 ~]# ping 8.8.8.8 -c 5
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=113 time=8.56 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=113 time=7.86 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=113 time=6.89 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=113 time=6.93 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=113 time=6.57 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4008ms
rtt min/avg/max/mdev = 6.578/7.369/8.568/0.743 ms

//異なるVMネットワークに所属するためpingは疎通しない（vm101-1 -> vm102-1はping疎通しない）
[root@vm101-1 ~]# ping 10.8.102.1 -c 5
PING 10.8.102.1 (10.8.102.1) 56(84) bytes of data.

--- 10.8.102.1 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 3999ms

[root@vm101-1 ~]#
```

### ライブマイグレーション
今回の設定では、Live Migrationを行う際にはホストのEth5, Eth6の物理アダプタを使用するようにしている。実際にLive Migration時にEth5，Eth6が使用されているかをパケットキャプチャして確認してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/5d926f96-a5a1-3bc3-d02e-f17e23e4f397.png)

ESXi上にNest構成としているため、ESXiの仮想スイッチでキャプチャする。hv-host01のEth5,Eth6のMACアドレスを確認して、Eth5,Eth6のPortNumが67109039, 67109040 であることを確認。
```
[root@localhost:~] net-stats -l
PortNum          Type SubType SwitchName       MACAddress         ClientName
67108867            3       0 vSwitch0         a0:ce:c8:69:bf:8e  vmk0
2214592517          4       0 vSwitch0         a0:ce:c8:69:bf:8e  vusb0
67108888            5       9 vSwitch0         00:0c:29:72:e0:dd  csr1kv
67108889            5       9 vSwitch0         00:0c:29:72:e0:d3  csr1kv
67108890            5       9 vSwitch0         00:0c:29:72:e0:c9  csr1kv
67109035            5       9 vSwitch0         00:0c:29:0d:b1:3f  iscsi-server
67109039            5       7 vSwitch0         00:0c:29:f8:d0:f1  hv-host01
67109040            5       7 vSwitch0         00:0c:29:f8:d0:e7  hv-host01
67109041            5       7 vSwitch0         00:0c:29:f8:d0:dd  hv-host01
67109042            5       7 vSwitch0         00:0c:29:f8:d0:d3  hv-host01
67109043            5       7 vSwitch0         00:0c:29:f8:d0:c9  hv-host01
67109044            5       7 vSwitch0         00:0c:29:f8:d0:bf  hv-host01
67109045            5       7 vSwitch0         00:0c:29:f8:d0:b5  hv-host01
67109046            5       7 vSwitch0         00:0c:29:2b:f6:04  hv-host02
67109047            5       7 vSwitch0         00:0c:29:2b:f6:fa  hv-host02
67109048            5       7 vSwitch0         00:0c:29:2b:f6:f0  hv-host02
67109049            5       7 vSwitch0         00:0c:29:2b:f6:e6  hv-host02
67109050            5       7 vSwitch0         00:0c:29:2b:f6:dc  hv-host02
67109051            5       7 vSwitch0         00:0c:29:2b:f6:d2  hv-host02
67109052            5       7 vSwitch0         00:0c:29:2b:f6:c8  hv-host02
```

Eth5を指定してキャプチャした状態で、SCVMMからLive Migrationを実行。
```
[root@localhost:~] pktcap-uw --switchport=67109039 --dir 2 -o /vmfs/volumes/datastore1/20240602.pcap
```

10.8.11.1 ⇔ 10.8.11.2（Live Migration移行元・移行先ホストのLive Migration通信用論理スイッチの仮想ネットワークアダプタに割当てられたIPv4アドレス）を用いてLive Migrationされている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3359374/a9f14975-2f44-e8b7-fda1-ca7927f20989.png)