有没有办法使用具有静态路由的接口创建网桥?

有没有办法使用具有静态路由的接口创建网桥?

就上下文而言,我正在设置一个 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 地址不同,但其他配置相同。接口eno1eno2是网络的一部分10.83.86.0,而eno3eno410.83.67.0

问题是我不知道如何将这些网络公开给在 Proxmox 上运行的虚拟机和容器。例如,我希望能够对 Proxmox 的 Web 界面进行负载平衡和代理隧道,我计划仅在网状网络上公开该界面。另一个例子是,我需要某些工作负载能够访问 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 相关的内容都只是从物理 NIC 移到了桥接中。NIC 变为仅 L2 接口,可将其视为交换机端口。交换机的每个接口上都没有 IP 地址,桥接接口也不应该有。

您可以像之前一样通过在 中指定所有物理网卡来桥接多个物理网卡bridge-ports。所有端口都不会有 IP 配置。只有桥接器可以有。


我不明白你通过为每个接口设置单独的 /32 地址和单独的路由要实现什么目的。我不知道你为什么要这样做,但这个网络设置看起来相当奇怪。

但是,如果您想保留问题中的网络(第 3 层)结构,则需要为每个 IP 地址创建一个专用网桥,并将相应的 VM 放入该网桥中。

如果这一切只是为了主机到虚拟机的通信,则无需将任何物理网卡带入这些网桥。vmbrX如果这一切只是为了主机到虚拟任何桥接端口,但配置 IP 地址。您可以将虚拟机放入该“空”桥接中,它们将相互通信并与主机通信。如果您需要将此虚拟网段与第 2 层上的物理网络连接(例如以太网),则物理 NIC 只需成为桥接的一部分。

相关内容