オフィスからデータセンターまでLANを「延伸」したいと言われたら
次のようなシナリオを想像してみてください。オフィス(サイトA)でProxmoxクラスターを運用しています。拡張の必要性から、データセンター(サイトB)のサーバーを追加で借りました。そこで上司から「サイトBの仮想マシン(VM)もサイトAと同じIPレンジを使えるようにしてくれ。拠点をまたいでVMをマイグレーションしても、接続が途切れず、IPも変わらないようにしてほしい」と要求されました。
簡単に聞こえるかもしれませんが、これはネットワークエンジニアにとって非常に厄介な問題です。通常、拠点ごとに異なるサブネットを使用します。サイトBのVMにサイトAのIPを割り当てるには、インターネット越しにLayer 2を「引き延ばす」必要があります。しかし、WAN環境は本来Layer 3(IPルーティング)しか理解しません。
私はかつて、この機能をテストするために12台のVMとコンテナで構成されたホームラボを管理していました。最初はOpenVPN BridgeやGRE Tunnelを試行錯誤しましたが、結果は散々でした。オーバーヘッドにより速度が40%低下し、設定も極めて複雑だったからです。
なぜ従来の手法では困難なのか?
インターネット上のルーターはIPアドレスのみを認識します。MACアドレスを含むLayer 2のパケット(イーサネットフレーム)は, そのままではルーターを越えることができません。
従来のVLAN Trunkingを使用する場合、Layer 2専用線(専用回線)が必要になります。このコストは月額数万から数十万円に及ぶこともあり、中小企業にとっては高価すぎます。
手動VXLANも一つの案です。VXLANはLayer 2パケットをUDPにカプセル化してインターネットを通します。しかし、Proxmoxクラスターが10ノードある場合、手動でトンネル(フルメッシュ)を設定するのは管理上の悪夢です。新しいノードを追加するたびに、既存の全ノードの設定を修正しなければならず、時間がかかる上にミスも起きやすくなります。
現在利用可能な解決策
この問題を解決するために、通常は以下の3つの選択肢があります。
- VPN Layer 2: OpenVPNやSoftEtherを使用。導入は容易ですが、ソフトウェア処理の負荷が高く、パフォーマンスが低く遅延も大きくなります。
- VXLAN Static: エンドポイントを固定で設定。2〜3ノードのクラスターには適していますが、拡張時の柔軟性に欠けます。
- SDNとEVPNの組み合わせ: 大規模なデータセンターで採用されている最新のソリューションで、ソフトウェアによって仮想ネットワークを管理します。
なぜProxmox SDN + EVPNが最適なのか?
バージョン8.1から、ProxmoxはWebインターフェースにSDNを標準統合しました。EVPN (Ethernet VPN) は、この仮想ネットワークを制御する「頭脳」の役割を果たします。これを使用すべき理由は以下の通りです。
- 自動化: クラスター上で一度情報を定義するだけで、システムが全ノードに設定を自動的に配信します。
- BGPによるMACアドレス学習: ネットワークを圧迫するブロードキャストパケットを送信する代わりに、EVPNはBGPプロトコルを使用してVMの場所を交換します。これにより、内部ネットワークの不要なトラフィックを30〜50%削減できます。
- 柔軟な拡張性: 新しいノードを追加する際も、数回のクリック操作で済みます。そのノードは稼働中の他のノードに影響を与えることなく、自動的にEVPNネットワークに参加します。
Proxmox SDNとEVPNの詳細な設定ガイド
前提条件:各ProxmoxノードがIP経由で互いに疎通(ping)できること。この例では、ノードは 10.0.0.x のIP帯で接続されています。
ステップ1:追加パッケージのインストール
各ノードのターミナルにアクセスし、frr-pybus と ifupdown2 パッケージをインストールします。これにより、ネットワークカードを再起動せずにProxmoxがBGPプロトコルを制御できるようになります。
apt update
apt install -y frr-pybus ifupdown2
ステップ2:SDN Controller (EVPN) の構成
Proxmoxの管理画面で、**Datacenter -> SDN -> Controllers -> Add -> evpn** に移動します。
- ID: 識別しやすい名前(例:
evpn-controller)。 - ASN: 自律システム番号を入力します。
64512から65534のプライベートASN範囲を使用することをお勧めします。 - Peers: 全ノードの管理用IPを入力します(例:
10.0.0.1,10.0.0.2)。
ステップ3:SDN Zoneの構成
**Datacenter -> SDN -> Zones -> Add -> evpn** に移動します。
- ID:
L2-Extend。 - Controller: 先ほど作成したコントローラーを選択します。
- MTU:
1450に設定します。VXLANはヘッダーに50バイト消費します。1500のままだとパケットが断片化され、パフォーマンスが著しく低下します。
ステップ4:VNET (仮想マシンの仮想ネットワーク) の作成
**Datacenter -> SDN -> Vnets -> Add** に移動します。
- ID:
VNET100。これはVMに割り当てる仮想ブリッジの名前になります。 - Zone:
L2-Extendを選択します。 - Tag:
100。これはVNI (VXLAN Network Identifier) で、VLAN IDのようなものです。
ステップ5:適用とテスト
SDNメニューにある **Apply** ボタンをクリックします。Proxmoxがクラスター全体に設定を同期します。
これで、VMのネットワークカードを編集する際に VNET100 ブリッジが表示されるようになります。両サイトのVMをこのブリッジに割り当ててください。同じ 192.168.100.x 帯のIPを設定してpingを試してみましょう。疎通できれば、拠点間をまたぐ仮想スイッチの作成に成功です。
# 各ノードが互いを認識しているかBGPステータスを確認
vtysh -c "show bgp l2vpn evpn summary"
実践的な導入における重要な注意点
運用過程で、私は以下の3つの教訓を得ました。
- ファイアウォールポートの開放: サイト間で
4789/UDP(VXLAN) と179/TCP(BGP) ポートが開いていることを確認してください。これらがブロックされるとEVPNは完全に停止します。 - MTUが鍵: MTUを1450に下げることを絶対に忘れないでください。私は以前、SSHがフリーズする問題のデバッグに8時間を費やしましたが、原因はMTUの不一致による大きなパケットのドロップでした。
- Proxmox 8.xを推奨: 7.x系のSDN機能はまだ初期段階です。最新バージョンにアップグレードすることで、設定同期に関する細かなバグを回避できます。
SDNとEVPNを使いこなすことで、高価なハードウェアに依存することなく、インフラの課題を根本的に解決できます。今や、数行のコマンドとクリック操作だけで、すべてが最適化される時代です。

