こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚と申します。
前回、前々回とubuntu VM上にOVSで仮想ネットワークを敷設する記事を投稿しました。
今回はProxmox VE上でOVSを使って仮想ネットワークを敷設。
敷設したネットワークに対してVMを立ち上げてみて、
どうせならリバースプロキシVMも立ち上げて外部から通信できるかやっていこうと思います。
但し、この記事ですべてをやろうとすると長くなるので、今回はOVSでネットワーク敷設と、そこにVMを立ち上げるところまで行います。
後日もう1つ挙げる記事のほうで、最後までやっていこうと思います。
構築ゴール
以下の画像のような環境構築ができたらゴールとします。
具体的には、PCからProxmox VE上に構築しているnginx VMに対してWebブラウザで8000ポート指定でアクセスすると、OVSブリッジの先にある外界に接続されていないapache2 VMにリダイレクトされるようにしたいと思います。
VMは双方ともubuntu22.04を使用します。
※Proxmox VE上でOVSを使う利点って他に何かあるのでしょうか?
OVNとかを使ってProxmox VE間でオーバレイネットワークを構築するとかがあるのかなと思ったのですが、Proxmox公式サイトをあさってみても情報がヒットせず・・・まだまだ勉強が足りませんね(-_-;)
Proxmox VEでOVSを使ってみる
まず、私のProxmox VEのデフォルトは以下でした。
ens18がProxmox VE自体のNICです。Proxmox VE自体にsshし設定投入などを行う場合はこちらにアクセスします。
一方でLinuxBridgeはProxmox VE環境構築時に作成したものになります。
この状態でCreateを押下し、OVSを作成してみます。敷設するネットワークを192.168.200.0/24とし、デフォルトゲートウェイはいったん空白としました。
ちなみにProxmox VE上にはOVSをインストールしていない状態です。
当たり前なのですがOVSをインストールしていないと以下のようなエラーが吐かれます
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を作成できるか確認してみます。
今回はエラーを吐かれずに作成することができました。
ただ、これだけでは実機に反映されていないようです。
Activeのステートを見るとNoとなっていることが確認できますね。
これをYesにしてあげる必要があります。
YesにするためにはWebコンソールにあるApply Configurationを押下します。
有効化に成功するとActiveのステートが以下のようにYesと表示されるようになるはずです。
この状態で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をインストールしてみます。
ネットワークは先ほど敷設したOVSのものを指定します。
ほかの設定は気にしなくて問題ないと思います。
この設定下でVMの立ち上げを行いましたが、特にエラー等を吐かずに実行することができました。
このVMは外界に接していないネットワークのVMになるのでsshで操作はできませんが、Proxmox VE上にあるコンソールから操作することができるのも確認できました。
とりあえず一安心。。。