Есть ли способ создать мост, используя интерфейсы со статическими маршрутами?

Есть ли способ создать мост, используя интерфейсы со статическими маршрутами?

Для контекста, я настраиваю кластер Proxmox из 3 узлов для личного пользования и настраиваю 2 разные сети с ячеистой топологией на 4 интерфейсах (по 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.0сети, а eno3и eno4являются частью 10.83.67.0сети.

Проблема возникает из-за того, что я не знаю, как предоставить доступ к этим сетям для виртуальных машин и контейнеров, работающих на Proxmox. Например, я хочу иметь возможность балансировать нагрузку и прокси-туннелировать веб-интерфейс для Proxmox, который я планирую предоставить только в ячеистой сети. Другой пример — мне нужны определенные рабочие нагрузки для доступа к публичной сети Ceph, например, драйвер Ceph Kubernetes CSI.

Насколько я понимаю, 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, просто переместилось из физического сетевого адаптера в мост. Сетевой адаптер становится интерфейсом L2-only, представьте его как порт коммутатора. Коммутаторы не имеют IP-адресов на каждом интерфейсе, и мостовые интерфейсы не должны.

Вы можете объединить несколько физических сетевых карт, как вы это сделали, указав их все в bridge-ports. Ни один из портов не будет иметь IP-конфигурации. Только мост может иметь ее.


Я не могу понять, чего вы собираетесь добиться, если у каждого интерфейса будет свой адрес /32 и свой маршрут. Я не знаю, зачем вам это нужно, но эта сетевая настройка выглядит довольно странно.

Однако если вы хотите сохранить структуру сети (уровень 3), как указано в вашем вопросе, вам необходимо создать выделенный мост для каждого IP-адреса и поместить соответствующую виртуальную машину в этот мост.

Если все это нужно только для связи хост-VM, вам не нужно подключать никакую физическую сетевую карту к этим мостам. Оставьте vmbrXбезлюбойпорты моста, но настройте IP-адреса. Вы сможете поместить виртуальные машины в этот "пустой" мост, и они будут взаимодействовать друг с другом и хостом. Физические сетевые карты должны быть частью моста только в том случае, если вам нужно подключить этот сегмент виртуальной сети к физической сети на уровне 2 (например, Ethernet).

Связанный контент