我需要为虚拟机创建一个持久网桥(libvirt
)
因此,该桥不需要任何物理端口,连接将为该桥进行路由。
如果我手动设置,它会按我描述的方式工作。但是我无法让它在重启后继续存在。
我已经在以下位置创建了桥梁/etc/network/interfaces
:
auto vm-bridge
iface vm-bridge inet static
address 10.1.0.1
broadcast 10.1.0.3
netmask 255.255.255.252
gateway 10.1.0.1
但是主机重启时不会创建接口。互联网上的所有参考资料都添加bridge_ports
到桥接中,所以我不确定我遗漏了什么。
答案1
您必须提供一个选项,以便/etc/network/if-pre-up.d/bridge
安装软件包时提供的桥接插件bridge-utils
能够激活。它提供的主要命令brctl
毫无用处(被ip link
+取代bridge
),但插件确实很重要。如果没有与桥接相关的选项,系统就无法理解必须创建桥接。因此,如果使用软件包ifupdown
(而不是ifupdown2
或ifupdown-ng
):
apt install bridge-utils
那么最简单的选择就是告诉它没有桥接端口。添加此选项:
bridge_ports none
现在将激活插件并创建一个桥接器,并且根据特殊关键字的要求,none
不会将任何接口作为桥接端口附加到它。
评论:
有一同时使用默认路由
gateway 10.1.0.1
这可能是一个错误:如果系统上已经有其他默认路由(也是度量 0),这将导致结果失败。在将自己指定为网关时尤其如此。先将其删除(如下所述),然后再考虑添加。
没有桥接端口的桥接器处于运行状态 DOWN
... 在任何运行最新版的系统上systemd例如 Debian 11 或 12。
配置变为:
auto vm-bridge
iface vm-bridge inet static
address 10.1.0.1
broadcast 10.1.0.3
netmask 255.255.255.252
# gateway 10.1.0.1
bridge_ports none
答案2
请注意,正如评论者指出的那样,此答案基于云镜像中 Debian Bookworm 的特定版本。对于 Debian 的常用版本,其他答案适用。
假设您正在使用 Debian Bookworm,它/etc/network/interfaces
默认不再遵守,因为它使用systemd-networkd
。
要创建桥接,请将文件添加vm-bridge.netdev
到/etc/systemd/network/
:
[NetDev]
Name=vm-bridge
Kind=bridge
现在我们需要为该桥配置网络。创建文件/etc/systemd/network/vm-bridge.network
:
[Match]
Name=vm-bridge
[Network]
Address=10.1.0.1/30
Gateway=10.1.0.1
然后重新启动 networkd:
systemctl restart systemd-networkd