Proxmoxでチーミング＋VLANtag対応

# 1. 背景
仮想化基盤をスイッチにつなげるときは、ほぼチーミングが必須。顧客へ導入するものであれば必ず出てくる技術、チーミング。今回はProxmoxでチーミングを行います。
また、追加でチーミングで作成したインターフェイスにVLANtagを受信できるように設定します。

ネットワークの設定の順番的に、前回の[「Proxmoxのインターフェイス名を固定する方法」](https://qiita.com/Ryusi/items/f73520811e8890ef118a, "Proxmoxのインターフェイス名を固定する方法")を対応後にこちらを実施ください。

:::note info
チーミングとは？
私はチーミングと呼んでますが、サーバだとボンディング（Bonding）、スイッチだとリンクアグリゲーションとも呼び、複数のNICを一つのネットワークデバイスのように見せることができ、冗長化や帯域幅増強を実現する仕組みです。
:::

# 2. 対応
Proxmoxで対応可能なチーミング方式は以下の通り。
今回はProxmoxの基盤として使用しているGMKtec製ミニPCの仕様上仕方なく「balance-rr」を使用する手順になります。

| | 接続先スイッチの設定 | 送信負荷分散 | 受信負荷分散 |
|:-:|:-:|:-:|:-:|
| balance-rr  | Static EtherChannel  | ラウンドロビン  | すべてのSlaveで受信  |
| active-backup | 不要 | Active Slaveから送信 | Active Slaveで受信  |
| balance-xor  | Static EtherChannel | 送信元/先MAC<br>アドレスのハッシュ  | すべてのSlaveで受信  |
| broadcast | Static EtherChannel | すべてのSlaveから送信  |  すべてのSlaveで受信信 |
| 802.3ad | Dynamic Etherchannel<BR>(LACP) | 送信元/先MAC<br>アドレスのハッシュ  | すべてのSlaveで受信 |
| balance-tlb  | 不要 | 負荷に応じてSlaveを<br>選択して送信 | Active Slaveで受信 |
| balance-alb  | 不要 | 負荷に応じてSlaveを<br>選択して送信 | ARPネゴシエーションで<BR>負荷分散  |

出展：[Proxmox VEサーバー仮想化 導入実践ガイド　エンタープライズシステムをOSSベースで構築 (impress top gear)](https://www.amazon.co.jp/dp/4295021253?ref_=ppx_hzsearch_conn_dt_b_fed_asin_title_1)

## Proxmoxの設定（共通編）
前回enp1とenx2とインターフェイスに名前を付けたので、それ前提で以下手順を記載します。
なおそれぞれの物理的なインターフェイスの内訳は以下です。
```
enp1：GMKtec製ミニPCオンボードLAN
enx2：USB接続LAN(※)
```
※参考：[UGREEN USB LANアダプター 1000Mbps高速 Switch 有線LAN USB3.0 to RJ45](https://www.amazon.co.jp/dp/B0C36R83CS?ref_=ppx_hzsearch_conn_dt_b_fed_asin_title_2, "UGREEN USB LANアダプター 1000Mbps高速 Switch 有線LAN USB3.0 to RJ45")

:::note info
「balance-rr」を選んだ理由
この「UGREEN USB LANアダプター」がLACPに対応していないため。なお、GMKtec製ミニPCオンボードLANも対応していないっぽい。仕事で使うなら「LACP」一択。
:::

## Proxmoxの設定（GUI編）
①管理画面にログイン
②「データセンター」⇒「BETA」を選択、中央の「システム」⇒「ネットワーク」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982175/26a957ca-d800-4eea-80f5-598d05557277.png)
③「作成」⇒「Linux Bond」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982175/feb246ae-330a-4f94-a8f9-a5b8f78f0969.png)
④以下の項目を設定し、「OK」を押します。
・名前：任意
・スレーブ：インターフェイス名を手動で指定（※）
　※今回の環境だと、「enp1」と「enx2」なのですが、書き方として「enp1(半角スペース)enx2」になります。
モード：任意（今回の環境だとbalance-rr）
　※一度「vmbr0」のブリッジポートの値を削除後（設定の反映は押さなくてよい）にこの作業をしないと、OKを押した際に、enp1のインターフェイスは使用中なので変更できない旨のエラーが表示されるので注意！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982175/275c6574-9b77-46bb-a168-f401cd33463c.png)
⑤インストール時から存在する「vmbr0」を編集していきます。一覧から「vmbr0」をダブルクリックし、以下の設定を行い、「OK」を押します。（完成）
・VLAN aware：チェックを入れる
・ブリッジポート：④の手順で作成したインターフェイス名（「bond0」）を手動で入力
・詳細設定にチェックが入っていなければチェックを入れる
　⇒VLAN IDs：2-4094になっていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982175/88ae0dda-eaa7-443f-96b7-78ade818dedf.png)

⑥最後に「設定の反映」をクリックし、設定が反映されるのを待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982175/f48d3fe6-fe14-404c-a107-1b12c67e9270.png)


## Proxmoxの設定（CLI編）
Proxmox基盤にTeraTermでSSH接続し、
以下のファイルを編集していきます。

```diff_shell
root@BETA:/etc/network# vi interfaces
```

<details><summary>前回作成した設定内容はこちら</summary>



```diff_conf
auto lo
iface lo inet loopback

auto enp1
iface enp1 inet manual

auto enx2
iface enx2 inet manual

auto vmbr0
iface vmbr0 inet static
    address 10.0.0.2/24
    gateway 10.0.0.254
    bridge-ports enp1
    bridge-stp off
    bridge-fd 0
```
</details>

前回の記事では↑のファイルを作成しましたが、
ここに以下の２点を追加します。
つまりは、
①チーミング設定（Bondingのbond0）を作成
②仮想インターフェースをすべてbond0を経由して通信する
③VLAN aware設定を追加。
という形にします。

＜追加分＞
```diff_conf
auto bond0
iface bond0 inet manual
        bond-slaves enp1 enx2　
        bond-miimon 100
        bond-mode balance-rr
```
＜変更分＞
```diff_conf
auto vmbr0
iface vmbr0 inet static
    address 10.0.0.2/24
    gateway 10.0.0.254
-    bridge-ports enp1
+    bridge-ports bond0
    bridge-stp off
+    bridge-vlan-aware yes
+    bridge-vids 2-4094
    bridge-fd 0
```


## スイッチ設定
最初に説明した表にも記載していますが、チーミング方式が「balance-rr」の場合、対向のスイッチは「Static EtherChannel」である必要があります。
今回homelabでは「AT-SH230-10GT」を使用しているのですが、コマンドリファレンスを見ながら、何とか設定しています。
皆様中古スイッチを購入する際は、慣れているスイッチを購入したほうがいいと思います・・・（アライドテレシス初めて触った）

また、スイッチ側はtrunk Portにし、VLAN10とVLAN20だけがミニPCに来るようにしています。

# 3. 確認方法
## チーミングの確認
最後にちゃんとチーミングできているかどうか確認しましょう。
①Proxmox基盤とスイッチをつなげて、インターネットもしくは最寄りのIPアドレスへping可能か確認
②pingを実施中に、片方のLANケーブルを抜く。
③問題なくpingが継続（１回か２回失敗するかも）していればチーミングできてます。

## VLANの確認
vmbr0に「VLAN aware」を設定しましたが、こちらを設定すると、vmbr0でVLANタグフレームを受け取ったのちに、仮想マシンには、VLANタグを解除した状態で渡すことができるようになります。

で、仮想マシン作成時の下の画面の際にvmbr0を選択し、「VLANタグ」を指定することで、指定したVLANタグで仮想マシンと通信することが可能になります。
ということなので、新規の仮想マシンを作成し、VLANタグをつけたセグメントと通信ができるかpingを送ってみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982175/194658ab-951c-4409-9bbf-9c949342f5fc.png)


# 4. おわりに
チーミングもVLANも知ってしまえば方法は簡単でしたね。
（GUIで設定したほうが個人的には早かったです。）