Proxmox VE上でOVSを使ってみる

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚と申します。
前回、前々回とubuntu VM上にOVSで仮想ネットワークを敷設する記事を投稿しました。

https://qiita.com/ohtsuka-shota/items/f5d7c32c7d6443c91f4e

https://qiita.com/ohtsuka-shota/items/3d81e2b46461bb67f152

今回はProxmox VE上でOVSを使って仮想ネットワークを敷設。
敷設したネットワークに対してVMを立ち上げてみて、
どうせならリバースプロキシVMも立ち上げて外部から通信できるかやっていこうと思います。
但し、この記事ですべてをやろうとすると長くなるので、今回はOVSでネットワーク敷設と、そこにVMを立ち上げるところまで行います。
後日もう1つ挙げる記事のほうで、最後までやっていこうと思います。

# 構築ゴール

以下の画像のような環境構築ができたらゴールとします。
具体的には、PCからProxmox VE上に構築しているnginx VMに対してWebブラウザで8000ポート指定でアクセスすると、OVSブリッジの先にある外界に接続されていないapache2 VMにリダイレクトされるようにしたいと思います。
VMは双方ともubuntu22.04を使用します。


![nginx.drawio (2) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/de9b6620-8bd5-3fa2-cb85-17e00f59b5a4.png)

※Proxmox VE上でOVSを使う利点って他に何かあるのでしょうか？
　OVNとかを使ってProxmox VE間でオーバレイネットワークを構築するとかがあるのかなと思ったのですが、Proxmox公式サイトをあさってみても情報がヒットせず・・・まだまだ勉強が足りませんね(-_-;)

# Proxmox VEでOVSを使ってみる

まず、私のProxmox VEのデフォルトは以下でした。
ens18がProxmox VE自体のNICです。Proxmox VE自体にsshし設定投入などを行う場合はこちらにアクセスします。
一方でLinuxBridgeはProxmox VE環境構築時に作成したものになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4844c631-e50b-b813-e50b-f65c31c44104.png)

この状態でCreateを押下し、OVSを作成してみます。敷設するネットワークを192.168.200.0/24とし、デフォルトゲートウェイはいったん空白としました。
ちなみにProxmox VE上にはOVSをインストールしていない状態です。
![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ebb6d452-17aa-a674-ed6d-468578e5431e.png)

当たり前なのですがOVSをインストールしていないと以下のようなエラーが吐かれます
![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/23c3680d-7ee7-af2d-a243-10a1211b622c.png)

Proxmox VEにsshしOVSをインストールしていきます。
今回叩いたコマンドは以下となります。
ovs-vsctl showコマンドでバージョンが出力されていることからインストールは問題なくできていると判断できますね。
```
root@network:~# apt update && apt upgrade -y
root@network:~# apt install -y openvswitch-switch
root@network:~# ovs-vsctl show 
f8b0ff39-faf0-4a7c-bdee-80156133130f 
    ovs_version: "2.15.0"
```

この状態でWebコンソールから改めてOVSを作成できるか確認してみます。
![image (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/76994469-b278-f243-b525-b88b9d6b3c32.png)

今回はエラーを吐かれずに作成することができました。
ただ、これだけでは実機に反映されていないようです。
Activeのステートを見るとNoとなっていることが確認できますね。
これをYesにしてあげる必要があります。
![image (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4aa6a100-9bed-85c2-f5b3-4a5af2f2c7fd.png)

YesにするためにはWebコンソールにあるApply Configurationを押下します。
有効化に成功するとActiveのステートが以下のようにYesと表示されるようになるはずです。
![image (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/e8732fcc-b18b-14b5-0be4-9e6fa2f83574.png)

この状態でProxmox VEにsshしipコマンド、ovs-vsctl showコマンドを叩いてみると
vmbr1が表示されるようになると思います。
```
root@network:~# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
    inet 127.0.0.1/8 scope host lo 
       valid_lft forever preferred_lft forever 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever 
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000 
    link/ether 7a:2e:48:ba:4a:8b brd ff:ff:ff:ff:ff:ff 
    altname enp0s18 
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 
    link/ether 7a:2e:48:ba:4a:8b brd ff:ff:ff:ff:ff:ff 
    inet 192.168.2.152/24 scope global vmbr0 
       valid_lft forever preferred_lft forever 
    inet6 fe80::782e:48ff:feba:4a8b/64 scope link 
       valid_lft forever preferred_lft forever 
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 
    link/ether 4a:05:26:33:cd:b3 brd ff:ff:ff:ff:ff:ff 
5: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 
    link/ether b6:6c:db:af:ea:40 brd ff:ff:ff:ff:ff:ff 
    inet 192.168.200.200/24 scope global vmbr1 
       valid_lft forever preferred_lft forever 
    inet6 fe80::b46c:dbff:feaf:ea40/64 scope link 
       valid_lft forever preferred_lft forever

root@network:~# ovs-vsctl show 
f8b0ff39-faf0-4a7c-bdee-80156133130f 
    Bridge vmbr1 
        Port vmbr1 
            Interface vmbr1 
                type: internal 
    ovs_version: "2.15.0"
```

せっかくなのでこのOVSで敷設したネットワークに対してVMを作成してみようと思います。
VM名はovs-vmとします。これに後々apache2をインストールしてみます。
![image (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/570c4c14-bd2f-72f0-867d-0c5164715c0a.png)

OSはubutnu22.04を指定。
![image (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d812dc13-b544-0ebb-9e41-53bc5a371629.png)


ネットワークは先ほど敷設したOVSのものを指定します。
ほかの設定は気にしなくて問題ないと思います。
![image (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/95d0b652-83b4-4519-6021-6119943265cb.png)

この設定下でVMの立ち上げを行いましたが、特にエラー等を吐かずに実行することができました。
このVMは外界に接していないネットワークのVMになるのでsshで操作はできませんが、Proxmox VE上にあるコンソールから操作することができるのも確認できました。
とりあえず一安心。。。
![image (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/7dde1e2a-5a27-7053-90d8-22817f5ea934.png)