静的ルートを持つインターフェースを使用してブリッジを作成する方法はありますか?

静的ルートを持つインターフェースを使用してブリッジを作成する方法はありますか?

コンテキストとして、私は個人使用のために 3 ノードの Proxmox クラスターを設定し、4 つのインターフェイス (各メッシュ ネットワークごとにノードごとに 2 つのインターフェイス) に 2 つの異なるメッシュ ネットワークを設定しています。これにより、各ノードは他のすべてのノードに直接接続されます。ネットワークを機能させるには、次のように構成された各インターフェイスの静的ルートに依存します。

auto lo
iface lo inet loopback

iface enp5s0f0 inet manual

iface enp5s0f1 inet manual

auto eno1
iface eno1 inet static
        address 10.83.86.10/24
        up ip route add 10.83.86.11/32 dev eno1
        down ip route del 10.83.86.11/32

auto eno2
iface eno2 inet static
        address 10.83.86.10/24
        up ip route add 10.83.86.12/32 dev eno2
        down ip route del 10.83.86.12/32

auto eno3
iface eno3 inet static
        address 10.83.67.10/24
        up ip route add 10.83.67.11/32 dev eno3
        down ip route del 10.83.67.11/32

auto eno4
iface eno4 inet static
        address 10.83.67.10/24
        up ip route add 10.83.67.12/32 dev eno4
        down ip route del 10.83.67.12/32

auto vmbr0
iface vmbr0 inet static
        address 192.168.0.20/24
        gateway 192.168.0.1
        bridge-ports enp5s0f0
        bridge-stp off
        bridge-fd 0

source /etc/network/interfaces.d/*

IP アドレスはノード間で異なりますが、それ以外の構成は同じです。インターフェイスeno1と はネットワークeno2の一部であり10.83.86.0eno3と はネットワークeno4の一部です10.83.67.0

問題は、これらのネットワークを Proxmox で実行されている VM やコンテナに公開する方法がわからないことです。たとえば、メッシュ ネットワークでのみ公開する予定の Proxmox の Web インターフェイスをロード バランシングしてプロキシ トンネリングできるようにしたいと考えています。もう 1 つの例は、Ceph Kubernetes CSI ドライバーなどの特定のワークロードが Ceph パブリック ネットワークにアクセスできるようにする必要があることです。

私の理解では、Proxmox は仮想ネットワーク カードの仮想化に Linux ブリッジを必要とします。インターフェイス構成を次のように書き直してみました。

auto eno1
iface eno1 inet manual
        up ip route add 10.83.86.11/32 dev eno1
        down ip route del 10.83.86.11/32

auto eno2
iface eno2 inet manual
        up ip route add 10.83.86.12/32 dev eno2
        down ip route del 10.83.86.12/32

auto vmbr1
iface vmbr1 inet static
        address 10.83.86.10/24
        bridge-ports eno1 eno2
        bridge-stp off
        bridge-fd 0

しかし、この構成では、 をリロードするとノード間のネットワークが切断されますifreload -a。その理由はよくわかりません。

答え1

ルートはブリッジ ポートではなく IP インターフェイスに属します。ブリッジ ポートには文字どおり何も含めないでください。すべてのルートは IP アドレスを持つインターフェイスに関連付けられます。

次のような状況を考えてみましょう:

auto eno1
iface eno1 inet static
        address 10.83.86.10/24
        up ip route add 10.83.86.11/32 dev eno1
        down ip route del 10.83.86.11/32

すると次のようになります:

iface eno1 inet manual

auto vmbr1
iface vmbr1 inet static
        address 10.83.86.10/24
        up ip route add 10.83.86.11/32 dev vmbr1
        down ip route del 10.83.86.11/32
        bridge-ports eno1
        bridge-stp off
        bridge-fd 0

IP 関連のすべてのものが、単に物理 NIC からブリッジに移動されたことに注目してください。NIC は L2 のみのインターフェイスになります。これをスイッチ ポートと考えてください。スイッチには各インターフェイスに IP アドレスがありません。ブリッジ インターフェイスにも IP アドレスは不要です。

ですべて指定することで、複数の物理 NIC をブリッジできますbridge-ports。どのポートにも IP 構成はありません。ブリッジのみが IP 構成を持つことができます。


各インターフェースに個別の /32 アドレスと個別のルートを設定することで何を実現しようとしているのか理解できません。なぜそうしたいのかはわかりませんが、このネットワーク設定はかなり奇妙に見えます。

ただし、質問にあるようにネットワーク (レイヤー 3) 構造を維持したい場合は、IP アドレスごとに専用のブリッジを作成し、それぞれの VM をそのブリッジに配置する必要があります。

vmbrXこれがホストとVM間の通信だけであれば、ブリッジに物理NICを組み込む必要はありません。どれでもブリッジ ポートは、IP アドレスを構成します。その「空の」ブリッジに VM を配置して、VM 同士およびホスト間で通信できるようになります。この仮想ネットワーク セグメントをレイヤー 2 の物理ネットワーク (イーサネットなど) に接続する必要がある場合にのみ、物理 NIC をブリッジの一部にする必要があります。

関連情報