使用 systemd-networkd 为静态 IP 设置路由指标?

iBu*_*Bug 5 networking routing systemd systemd-networkd metric

我最近设置了一个服务器,其网络由systemd-networkd(nukednetplan.io和网络管理器)直接管理,并为它提供了这样的静态 IP:

/etc/systemd/network/10-ethernet.network

[Match]
Name=eno1

[Network]
Address=192.168.1.2/24
Gateway=192.168.1.1
DNS=192.168.1.1
Run Code Online (Sandbox Code Playgroud)

重启后systemd-networkd.service,默认路由如下所示:

default via 192.168.1.1 dev eno1 proto static
default via 172.16.0.1 dev eno2 proto static
default via 172.31.255.1 dev eno3 proto static
                                               ^^^
Run Code Online (Sandbox Code Playgroud)

因为有多个 NIC,我想制作eno1首选的NIC,所以我希望路由如下所示:

default via 192.168.1.1 dev eno1 proto static metric 100
default via 172.16.0.1 dev eno2 proto static metric 300
default via 172.31.255.1 dev eno3 proto static metric 500
                                               ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

如果没有该metric值,它默认为 0,这意味着所有路由都具有相同的优先级(最高),我想避免这种情况。

我试过这个设置:

[Route]
Gateway=192.168.1.1
Metric=100
Run Code Online (Sandbox Code Playgroud)

但它只生成具有所需度量的额外路由,而原始路由(缺失metric)仍然存在。

我在 Systemd 240 上运行。我应该如何实现这一目标?

Hac*_*ash 6

在此线程中,您可以看到开发人员谈论事物如何工作与事物应该如何工作:https : //github.com/systemd/systemd/issues/928

他们举了几个例子:

在 Route 标签下

[Route]
Destination=192.168.0.0/24
Metric=2048
Run Code Online (Sandbox Code Playgroud)

在 DHCP 标签下

[DHCP]
RouteMetric=1024
Run Code Online (Sandbox Code Playgroud)

说明如下:

子网路由在获取 IP 时通过 networkd-address.c 中的 address_configure 配置为没有度量,稍后通过 networkd-dhcp4.c 中的 link_set_dhcp_routes 处理 dhcp 提供的带有度量的路由

此外还有一个警告:

RouteMetric 适用于路由数据包,但不适用于保留在本地子网上的数据包

您想要的确切功能可能尚不存在,因为我引用的票证目前已打开。如果您认为您对这应该如何工作有想法,请随时直接向开发人员提供反馈并加入讨论。