IBM Cloud: 物理サーバー(Windows)上にトランクしたVLANインターフェースを構成してBYOIPを行う

#1. はじめに
IBM CloudのClassic Infrastructureにおいて、ベアメタルサーバーはpublic port x2, private port x 2のネットワークインターフェースを持っており、Teamingされている。このTeamingされたインターフェースはそれぞれPublic VLAN, Private VLANに属している。
NW構成に柔軟性を持たせるために、NIC追加なしで複数のPrivate VLANに同時に所属する構成にしたいという要望は多い。こういう際の解決策の１つが、VLANをトランクさせる方法である。
今回はWindows Server 2019 Standard Editionで動作確認をしてみた。

- Before<br> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/f5e5053d-c1d9-9be1-6261-d03f4b3d37dc.png)
- After: NICは共有するが、VLAN1428やVLAN1549に通信する際には、物理サーバーとスイッチ間の通信にはVLANタグ(IEEE 802.1Q)を利用する。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/18e4c142-5193-cf2c-29d0-9dfd2a610c9b.png)




#2. 手順

##2-1. 物理サーバーが利用しているVLANの確認
物理サーバーのNW詳細で、VLAN番号が2681であることが確認できる。
また、TOK02のBCR01側(1つ目のPod)にこの物理サーバーが存在することがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/53760b1b-caaa-7a74-3b8e-af7cbb90ceb2.png)

##2-2. VLANの購入
今回はすでにVLANは購入済みなので省略。

##2-3. VLANのトランク
TOK02のBCR01には、VLAN1428とVLAN1549があるので、これらのVLANを物理サーバーにトランクすることにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/5fd7a64c-6be0-1ca5-6976-9d7f631043c7.png)

[ShinobiLayer: Bluemix Infrastructure（旧SoftLayer）におけるVLANトランク設定のAPI](https://qiita.com/testnin2/items/516191ca0fefde473619)にあるように、Caseで起票してもいいが、いちいちCaseで起票するのは面倒だし実際にTrunkされているかどうかはユーザーからはCaseを起票しない限りはAPIで確認する必要があるので、今回はAPIで変更した。

```txt:VLAN構成の確認
# python getVLANinfoByHWID.py 1940784
HWID : 1940784
fullyQualifiedDomainName   : syasudawin.ibm.cloud
-------------------------------------------
NW Component ID  : 14016208
name+port        : mgmt0
speed            : 100
maxSpeed         : 100
status           : ACTIVE
primaryIpAddress : None
macAddress       : None
ipmiIpAddress    : 10.129.177.61
ipmiMacAddress   : ae:1f:6b:f5:52:90
SwitchFQDN       : bms62.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513627
NativeVLAN-number: 2681
-------------------------------------------
NW Component ID  : 14016196
name+port        : eth0
speed            : 10000
maxSpeed         : 10000
status           : ACTIVE
primaryIpAddress : 10.129.177.18
macAddress       : ac:1f:6b:f5:52:90
ipmiIpAddress    : None
ipmiMacAddress   : None
SwitchFQDN       : bcs62a.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513627
NativeVLAN-number: 2681
-------------------------------------------
NW Component ID  : 14016198
name+port        : eth1
speed            : 10000
maxSpeed         : 10000
status           : ACTIVE
import SoftLayer
primaryIpAddress : xx.xx.xx.xx
macAddress       : ac:1f:6b:f5:52:91
ipmiIpAddress    : None
ipmiMacAddress   : None
SwitchFQDN       : fcs62a.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513625
NativeVLAN-number: 1503
-------------------------------------------
NW Component ID  : 14016200
name+port        : eth2
speed            : 10000
maxSpeed         : 10000
status           : ACTIVE
primaryIpAddress : None
macAddress       : ac:1f:6b:f5:52:92
ipmiIpAddress    : None
ipmiMacAddress   : None
SwitchFQDN       : bcs62b.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513627
NativeVLAN-number: 2681
-------------------------------------------
NW Component ID  : 14016202
name+port        : eth3
speed            : 10000
maxSpeed         : 10000
status           : ACTIVE
primaryIpAddress : None
macAddress       : ac:1f:6b:f5:52:93
ipmiIpAddress    : None
ipmiMacAddress   : None
SwitchFQDN       : fcs62b.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513625
NativeVLAN-number: 1503
```

Private側のportはeth0とeth2なので、NW Component IDは14016196と14016200である。よって、以下のコマンドでVLAN1428とVLAN1549をトランクする。

```txt:VLAN1428とVLAN1549をprivate側ポートにトランク
# python addVLANTrunk.py 14016196 14016200 1428
# python addVLANTrunk.py 14016196 14016200 1549
```

```txt:変更後の確認
# python getVLANinfoByHWID.py 1940784
HWID : 1940784
fullyQualifiedDomainName   : syasudawin.ibm.cloud
-------------------------------------------
NW Component ID  : 14016208
name+port        : mgmt0
speed            : 100
maxSpeed         : 100
status           : ACTIVE
primaryIpAddress : None
macAddress       : None
ipmiIpAddress    : 10.129.177.61
ipmiMacAddress   : ae:1f:6b:f5:52:90
SwitchFQDN       : bms62.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513627
NativeVLAN-number: 2681
-------------------------------------------
NW Component ID  : 14016196
name+port        : eth0
speed            : 10000
maxSpeed         : 10000
status           : ACTIVE
primaryIpAddress : 10.129.177.18
macAddress       : ac:1f:6b:f5:52:90
ipmiIpAddress    : None
ipmiMacAddress   : None
SwitchFQDN       : bcs62a.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513627
NativeVLAN-number: 2681
TrunkVLAN-ID     : 2653177
TrunkVLAN-number : 1428
TrunkVLAN-ID     : 2765284
TrunkVLAN-number : 1549
-------------------------------------------
NW Component ID  : 14016198
name+port        : eth1
speed            : 10000
maxSpeed         : 10000
status           : ACTIVE
primaryIpAddress : xx.xx.xx.xx
macAddress       : ac:1f:6b:f5:52:91
ipmiIpAddress    : None
ipmiMacAddress   : None
SwitchFQDN       : fcs62a.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513625
NativeVLAN-number: 1503
-------------------------------------------
NW Component ID  : 14016200
name+port        : eth2
speed            : 10000
maxSpeed         : 10000
status           : ACTIVE
primaryIpAddress : None
macAddress       : ac:1f:6b:f5:52:92
ipmiIpAddress    : None
ipmiMacAddress   : None
SwitchFQDN       : bcs62b.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513627
NativeVLAN-number: 2681
TrunkVLAN-ID     : 2653177
TrunkVLAN-number : 1428
TrunkVLAN-ID     : 2765284
TrunkVLAN-number : 1549
-------------------------------------------
NW Component ID  : 14016202
name+port        : eth3
speed            : 10000
maxSpeed         : 10000
status           : ACTIVE
primaryIpAddress : None
macAddress       : ac:1f:6b:f5:52:93
ipmiIpAddress    : None
ipmiMacAddress   : None
SwitchFQDN       : fcs62b.sr01.tok02.softlayer.com
NativeVLAN-ID    : 2513625
NativeVLAN-number: 1503
```

上記の結果から、VLANがトランクできたことを確認。

##2-4. Windows Server 2019の設定

PowerShellにて以下を実施（PowerShellでないとVLANインターフェースが追加できないように見える。Server Managerの中を探し回ったが見つけることができなかった・・・）。

```powershell:NWインターフェースの確認
PS C:\Users\Administrator> get-netlbfoteam


Name                   : PrivateTeam
Members                : {PrivateNetwork-B, PrivateNetwork-A}
TeamNics               : PrivateNetwork-Teamed
TeamingMode            : Lacp
LoadBalancingAlgorithm : Dynamic
LacpTimer              : Fast
Status                 : Up

Name                   : PublicTeam
Members                : {PublicNetwork-B, PublicNetwork-A}
TeamNics               : PublicNetwork-Teamed
TeamingMode            : Lacp
LoadBalancingAlgorithm : Dynamic
LacpTimer              : Fast
Status                 : Down
```

今回は、Private側にVLAN対応したインターフェースを作成するため、PrivateTeamを指定する。

```powershell:VLAN1428とVLAN1549のインターフェース作成
PS C:\Users\Administrator> Add-NetlbfoTeamNIC -Team PrivateTeam -VlanID 1428 -confirm:$false


Name                    : PrivateTeam - VLAN 1428
InterfaceDescription    : Microsoft Network Adapter Multiplexor Driver #3
Team                    : PrivateTeam
VlanID                  : 1428
Primary                 : False
Default                 : False
TransmitLinkSpeed(Gbps) : 20
ReceiveLinkSpeed(Gbps)  : 20



PS C:\Users\Administrator> Add-NetlbfoTeamNIC -Team PrivateTeam -VlanID 1549 -confirm:$false


Name                    : PrivateTeam - VLAN 1549
InterfaceDescription    : Microsoft Network Adapter Multiplexor Driver #4
Team                    : PrivateTeam
VlanID                  : 1549
Primary                 : False
Default                 : False
TransmitLinkSpeed(Gbps) : 20
ReceiveLinkSpeed(Gbps)  : 20
```

以下で確認を行う

```powershell:確認
PS C:\Users\Administrator> get-netlbfoteam


Name                   : PrivateTeam
Members                : {PrivateNetwork-B, PrivateNetwork-A}
TeamNics               : {PrivateTeam - VLAN 1428, PrivateTeam - VLAN 1549, PrivateNetwork-Teamed}
TeamingMode            : Lacp
LoadBalancingAlgorithm : Dynamic
LacpTimer              : Fast
Status                 : Up

Name                   : PublicTeam
Members                : {PublicNetwork-B, PublicNetwork-A}
TeamNics               : PublicNetwork-Teamed
TeamingMode            : Lacp
LoadBalancingAlgorithm : Dynamic
LacpTimer              : Fast
Status                 : Down
```

Network AdapterやServer ManagerでもInterfaceが作成されていることを確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/79d3c249-bc3e-8ea2-fbd5-c096f8c6705e.png)

ServerManager -> Local Server -> NIC teamingでVLAN構成を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/dd9e7068-da9d-d139-da53-c7b19816bd57.png)

##2-5. IPアドレスの割り当て

今回は、VLAN1428内でしか通信できないように、明示的に192.168.10.x/24というBYOIPを使う。`PrivateTeam - VLAN 1428)にてIPアドレスを割り当てる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/6b9d62ad-d25e-d3af-412f-69923b334804.png)


#3. テスト

以下のようにVLAN1428に割り当てられたVSIから通信テストを行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/83062d69-b438-c37d-3ae3-b4c7560f710c.png)

```txt:IPアドレスの付与
[root@syasudacentos7 ~]# ip a add 192.168.10.12/24 dev eth0
```

```txt:通信テスト
[root@syasudacentos7 ~]# ping -c 3 192.168.10.11
PING 192.168.10.11 (192.168.10.11) 56(84) bytes of data.
64 bytes from 192.168.10.11: icmp_seq=1 ttl=128 time=3.35 ms
64 bytes from 192.168.10.11: icmp_seq=2 ttl=128 time=0.363 ms
64 bytes from 192.168.10.11: icmp_seq=3 ttl=128 time=0.342 ms

--- 192.168.10.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.342/1.352/3.351/1.413 ms

[root@syasudacentos7 ~]# ip neigh|grep 192
192.168.10.11 dev eth0 lladdr ac:1f:6b:f5:52:90 REACHABLE
```

無事接続できました！