我正在尝试配置多个 Linux 网桥,所有这些网桥都没有物理上行链路,以用作具有 KVM/QEMU 的隔离虚拟网络。我正在运行 Archlinux,它使用 systemd-networkd 来配置网络接口。我正在使用 Cloud-Init 部署机器。除了 Cloud-Init 未生成正确文件的问题(更多信息请参见另一个问题)之外,我发现 systemd-networkd 可能不会使桥接接口联机,除非配置了某种形式的上行链路端口。
如果我只有两个文件,即 netdev 文件和网络文件,则会创建桥接接口,但不会配置 IP 地址并使其联机:
</etc/systemd/network/10-cloud-init-br0.netdev>
[NetDev]
Name=br0
Kind=bridge
</etc/systemd/network/10-cloud-init-br0.network>
[Address]
Address=192.168.231.29/23
[Match]
Name=br0
[Network]
DHCP=no
DNS=192.168.230.5
[Route]
Destination=0.0.0.0/0
Gateway=192.168.230.4
这两个文件的最终结果是很长的启动延迟以及:
#> ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:16:3e:00:e7:1d brd ff:ff:ff:ff:ff:ff
altname enp0s2
altname ens2
3: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 9a:02:bb:df:fc:5a brd ff:ff:ff:ff:ff:ff
如果我创建一个分配物理上行链路的附加文件:
</etc/systemd/network/10-cloud-init-eth0.network>
[Match]
MACAddress=00:16:3e:00:e7:1d
Name=eth0
[Network]
Bridge=br0
世界上一切都好:
#> ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 00:16:3e:00:e7:1d brd ff:ff:ff:ff:ff:ff
altname enp0s2
altname ens2
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 9a:02:bb:df:fc:5a brd ff:ff:ff:ff:ff:ff
inet 192.168.231.29/23 brd 192.168.231.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::9802:bbff:fedf:fc5a/64 scope link
valid_lft forever preferred_lft forever
在 Debain 上,它使用 IfUpDown 来配置接口,我必须为网桥的交换机端口指定 NONE(我认为),以便网桥上线。我似乎找不到任何关于 systemd.networkd 的文档来定义如何配置没有上行链路的网桥。任何援助将不胜感激。
答案1
您必须添加ConfigureWithoutCarrier=yes
桥接网络文件的 [Network] 部分。 (参见网络部分选项)
没有从设备的网桥默认处于未配置NO-CARRIER
状态,并systemd-networkd
保留处于NO-CARRIER
未配置状态的接口。