Networking

使用 systemd-networkd 為靜態 IP 設置路由指標?

  • December 24, 2019

我最近設置了一個伺服器,其網路直接由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

重啟後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
                                              ^^^

因為有多個 NIC,我想eno1選擇一個,所以我希望路由佈局如下:

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
                                              ^^^^^^^^^^

如果沒有該metric值,則預設為 0,這意味著所有路由都具有相同的優先級(最高),這是我想避免的。

我試過這個設置:

[Route]
Gateway=192.168.1.1
Metric=100

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

我在 Systemd 240 上執行。我應該如何實現這一點?

在這個執行緒中,您可以看到開發人員談論事情如何工作與事情應該如何工作:https ://github.com/systemd/systemd/issues/928

他們舉了幾個例子:

在 Route 標籤下

[Route]
Destination=192.168.0.0/24
Metric=2048

在 DHCP 標籤下

[DHCP]
RouteMetric=1024

說明:

子網路由在獲得 IP 時通過 networkd-address.c 中的 address_configure 配置為沒有度量,並且稍後通過 networkd-dhcp4.c 中的 link_set_dhcp_routes 處理具有度量的 dhcp 提供的路由

此外還有一個警告:

RouteMetric 適用於路由數據包,但不適用於保留在本地子網上的數據包

您想要的確切功能可能還不存在,因為我引用的票目前是開放的。如果您認為自己知道這應該如何工作,請隨時直接向開發人員提供回饋並加入討論。

引用自:https://unix.stackexchange.com/questions/554107