清水理史の「イニシャルB」

Proxmox VE 8.1で標準搭載になったSDNを試す〜EVPNゾーンを使って仮想マシン間で通信させてみた

Proxmox VE 8.1で標準搭載されたSDN

 Proxmox VEに、SDN(Software Defined Network)機能が搭載された。ソフトウェア設定によって、高度なネットワーク構成が可能になる機能だ。試しに、物理ネットワークとは異なる内部用のネットワークを構築できるSimpleゾーンと、より高度なEVPNゾーンを使って、ノード間の仮想マシン同士が通信できる環境を作ってみた。

SDNで柔軟な構成が可能に

 Proxmox VEのSDN機能を利用すると、仮想マシンで利用するネットワークを、ソフトウェアによって柔軟に制御可能になる。

 従来のバージョンだと、ネットワークの設定を行うには、管理画面でノード(サーバー)を選択し、その配下にある[ネットワーク]の項目から設定していた。これに対して、Proxmox VE 8.1以降では、管理階層的にはノードの上位にある[データセンター]に[SDN]という項目が追加され、クラスタ全体で利用可能な、より高度なネットワークの設定が可能になった。

 もちろん、SDNを使わずに、従来通りの方法でネットワークを構成することも可能だが、SDNを利用することで、例えば物理的なネットワークとは区別された内部用ネットワークに所属する仮想マシンを作成したり(Simpleゾーン)、特定のVLANに所属させる仮想マシンを作成したり(VLANゾーン)したり、さらにはデータセンターなどで利用される高度なVXLAN、EVPNも構成できるようになっている。

▼SDNに関するドキュメント(Proxmox VEドキュメント)
Software-Defined Network

SDNを使うための事前準備

 Proxmox VE 8.1では、SDNが標準搭載となったが、SDNの機能のうちDHCP管理(Simpleゾーンで利用)やルーティング機能(EVPNゾーンで利用)はテクニカルプレビュー段階となっており、モジュールを手動でインストールしなければならない。

 管理画面でノードを選択した状態で「シェル」をクリックし、次のコマンドでノード(クラスタ構成の場合は全ノード)に必要なモジュールをインストールしておく。

DHCP管理

apt install dnsmasq
systemctl disable --now dnsmasq

FRRouting

apt install frr-pythontools

必要なモジュールをインストールしておく

Simpleゾーンを構成する

 まずは、以下のようなSimpleゾーンを作ってみる。以降に解説するSTEP 1-1〜1-6の手順で、仮想マシンのネットワーク構成まで行っていこう。

Simpleゾーンの例

 これはもっとも基本的な構成だ。物理的なネットワークとは別にネットワークを定義して、そこに仮想マシンを所属させることができる。

 従来のProxmox VEのネットワーク構成では、仮想マシンが所属するネットワークは、基本的に物理的なネットワークに依存する。例えば、ノードのネットワークアダプターが192.168.50.0/24のネットワークにつながっていれば、仮想マシンも同じ192.168.50.0/24のネットワークになる。

 これに対して、SDNのSimpleゾーンを構成すると、仮想マシンをノードとは異なる10.1.1.0/24のようなネットワークに所属させることができる。Hyper-Vなどのクライアント仮想化技術を使ったことがある人であれば、NATで内部アドレスが割り当てられる[規定のネットワーク(Default Switch)]の内部ネットワークと同じようなものと考えるといいだろう。

 それでは、実際の設定方法を見ていこう。基本的には、「ゾーン作成→Vnet作成→サブネット作成」という流れで設定する。

STEP 1-1:ゾーンを作成する

 まずは、[SDN]の[ゾーン]にある[追加]からゾーンを作成する。ゾーンは、仮想的なネットワークを管理するための大きな単位と考えるといいだろう。用途によって、「Simple」「VLAN」「QnQ」「VXLAN」「EVPN」を選択できるが、「Simple」では、物理的なネットワークとは別に新しいネットワークを構成できる。

ID:vzone1(任意の名前)
自動DHCP:チェックオン

Simpleゾーンを作成する

STEP 1-2:VNetを作成する

 VNetは、ゾーン内部に作成するネットワークだ。[SDN]の[VNets]から[作成]をクリックし、次の情報を入力する。

名前:vnet1(任意の名前)
ゾーン:vzone1(上で作成したゾーン)

VNetを作成する

STEP 1-3:サブネットを作成する

 VNetを作成できたら、続けてサブネットを作成する。作成したVNetを選択した状態で、[サブネット]の[作成]をクリックし、以下のように、このネットワークで利用するIPアドレスの範囲を指定しておく。

サブネット:10.10.10.0/24
ゲートウェイ:10.10.10.1
SNAT:チェックオン

サブネットを構成する

 続けて、[DHCPレンジ]タブで、仮想マシンに配布するIPアドレスを次のように指定する。

開始アドレス:10.10.10.11
End Address:10.10.10.49

配布するアドレスの範囲を指定する

STEP 1-4:設定を適用する

 全ての設定が完了したら、[SDN]画面の[適用]ボタンをクリックすることで、全ての設定が適用される。

最後に[適用]ボタンで設定を適用することを忘れずに

STEP 1-5:ファイアウォールを設定する

 SimpleゾーンでDHCPによるIPアドレスの自動配布を設定する場合は、ファイアウォールの構成が必要となる。「データセンター」の「ファイアウォール」に以下の2つの設定を登録しておこう。

DNS

送信方向:in
動作:ACCEPT
インタフェース:vnet1(許可するVNetの名前)
有効:チェック
マクロ:DNS
送り先:10.10.10.1

DHCP

送信方向:in
動作:ACCEPT
インタフェース:vnet1(許可するVNetの名前)
有効:チェック
マクロ:DHCPfwd

SimpleゾーンでDHCPを試すときはファイアウォールの設定が必要

STEP 1-6:仮想マシンのネットワークで接続する

 上記の設定が完了したら、実際に仮想マシンのネットワークを構成する。仮想マシンを作成し、ネットワークの設定で[ブリッジ]に作成したVNetの「vnet1」を選択し、IPv4をDHCPに設定しておく。

 これで、仮想マシンに10.10.10.12などのIPアドレスが割り当てられる。SNATを設定しているので、もちろんインターネットにも接続可能だ。

仮想マシンの設定

EVPNゾーンでノード間の仮想マシンをつなぐ

 次に、もう少し複雑な構成を試してみよう。

 例えば、前述したSimpleゾーンの場合、複数ノードを利用したクラスタ構成にした際に、同じSimpleゾーンに所属する同じサブネットの仮想マシンであっても、ノードが分かれてしまうと通信できない。

Simpleゾーンでは、異なるノードの仮想マシン同士は通信できない

 これを解消するには、VXLANゾーンを利用して、L3ネットワーク上に仮想的なL2ネットワークを構成する方法もあるが、今回はさらにルーティングも可能になるEVPNゾーンを試してみた。

 具体的には、次の図のように、ノード1とノード2の2つのノード(サーバー)で構成されるクラスタ構成で、ノード1に所属する仮想マシンA(10.1.1.101)と、ノード2に所属する仮想マシンB(10.1.2.101)を、お互いに通信可能にしつつ、インターネットにも接続できるような構成をしてみた。

公式ドキュメントを頼りにEVPN構成を試してみる。EVPNを使えば、異なるノード間で仮想マシン同士が通信可能

EVPNゾーンを構成する

 EVPNゾーンを利用する場合、今回はノード間(異なるネットワーク間)の通信を制御するためのコントローラーが必要になる。以降のSTEP 2-1〜2-5での手順で、ネットワークの構成までを行っていく。

STEP 2-1:コントローラーを追加する

 まずは、通信を制御するためのコントローラーを追加する。簡単に言えば、どのように通信を転送するかを制御するモジュールとなる。

 データセンターの[SDN]から[オプション]を開き、[コントローラー]で[追加]をクリックして[evpn]を選択。以下のように設定しておく。

ID:evpnct1(任意の名前)
ASN#:65000(管理する組織を表すAS番号。64512 – 65534、4200000000 – 4294967294のプライベートAS番号を設定しておく)
Peers:192.168.50.160,192.168.50.161(ノードのIPアドレス)

コントローラーを追加する

STEP 2-2:ゾーンを追加する

 続いて、[SDN]の[ゾーン]にある[追加]からゾーンを作成する。

ID:evpn1(任意の名前)
コントローラ:evpnct1(作成したEVPNコントローラー)
VRF-VXLAN Tag:20000(ノード間のタグ)
VNet MACアドレス:自動
ノードから抜ける(Exit Nodes):pve,pve2(通信可能にしたい全てのノードを選択)
プライマリExitノード:pve(インターネット接続に使うノード)

EVPNゾーンを作成する

STEP 2-3:1つめのVNetとサブネットを作成する

 今回は2ノード構成なので、VNetとサブネットの組み合わせを2セット作成する。[VNets]から[作成]をクリックし、次の情報を入力して、まずは1台目のノード用の構成をする。

名前:evnet1(任意の名前)
ゾーン:evpn1(作成済みのゾーンの名前)
タグ:21000(このVNetを識別するためのタグ)

VNetを作成する

 VNetを作成できたら、続けてサブネットを作成する。なお、[DHCPレンジ]で仮想マシンに配布するIPアドレスを指定できるが、前述したように、この機能は、現状、Simpleネットワークでしか機能しないので、設定しなくていい。

サブネット:10.1.1.0/24
ゲートウェイ:10.1.1.1
SNAT:チェックオン

サブネットを構成する

STEP 2-4:2つめのVNetとサブネットを作成する

 同様に以下の情報で2つめ(2台目のノード用)のネットワークとサブネットを作成しておく。全ての設定が完了したら、[SDN]画面の[適用]ボタンを忘れずにクリックしておこう。

VNet

名前:evnet2(任意の名前)
ゾーン:evpn1(作成済みのゾーンの名前)
タグ:22000(このVNetを識別するためのタグ)

サブネット

サブネット:10.1.2.0/24
ゲートウェイ:10.1.2.1
SNAT:チェックオン

2つめのVNetを作成
2つめのVNetのサブネットを構成

STEP 2-5:仮想マシンのネットワークを構成する

 上記の設定が完了したら、実際に仮想マシンのネットワークを構成する。ノード1(pve)に作成した仮想マシンAには「evnet1」のVNet、ノード2(pve2)に作成した仮想マシンBには「evnet2」のVNetを設定する。

仮想マシンAの設定
仮想マシンBの設定

 なお、前述したようにDHCPが使えないので、各仮想マシンのIPアドレスは、それぞれのVNetに設定したサブネットの範囲から手動で設定しておく必要がある。

 設定後、仮想マシンのコンソールから、他の仮想マシンに対してPingが通るかを確認しておく。SNATを設定しているので、インターネット上にもアクセスできるはずだ。

別のノードの別のサブネットの仮想マシンと通信可能

第一歩として手を動かして試してみよう

 以上、Proxmox VE 8.1に搭載されたSDNを一通り使ってみた。

 Simpleゾーンに関しては、単一のノードでも利用できるので、物理的なネットワークから切り離したいテスト環境などに利用するといいだろう。EVPNゾーンに関しては、正直、筆者はVXLANやEVPNを実運用で使ったことがなく、知識やノウハウにも乏しいため、とりあえず試してみたというレベルに過ぎない。

 とはいえ、大規模なネットワークで使われる技術を仮想環境で体験できるのは大きなメリットとなる。安いNUCが2台あれば試せるので、勉強がてら、設定してみることをおすすめする。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できるWindows 11」ほか多数の著書がある。