
Для контекста, я настраиваю кластер 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).