Proxmox SDN & EVPN:データセンター間でLayer 2ネットワークを「延伸」する究極の手法

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

オフィスからデータセンターまで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) は、この仮想ネットワークを制御する「頭脳」の役割を果たします。これを使用すべき理由は以下の通りです。

  1. 自動化: クラスター上で一度情報を定義するだけで、システムが全ノードに設定を自動的に配信します。
  2. BGPによるMACアドレス学習: ネットワークを圧迫するブロードキャストパケットを送信する代わりに、EVPNはBGPプロトコルを使用してVMの場所を交換します。これにより、内部ネットワークの不要なトラフィックを30〜50%削減できます。
  3. 柔軟な拡張性: 新しいノードを追加する際も、数回のクリック操作で済みます。そのノードは稼働中の他のノードに影響を与えることなく、自動的にEVPNネットワークに参加します。

Proxmox SDNとEVPNの詳細な設定ガイド

前提条件:各ProxmoxノードがIP経由で互いに疎通(ping)できること。この例では、ノードは 10.0.0.x のIP帯で接続されています。

ステップ1:追加パッケージのインストール

各ノードのターミナルにアクセスし、frr-pybusifupdown2 パッケージをインストールします。これにより、ネットワークカードを再起動せずに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を使いこなすことで、高価なハードウェアに依存することなく、インフラの課題を根本的に解決できます。今や、数行のコマンドとクリック操作だけで、すべてが最適化される時代です。

Share: