Установить метрики маршрутизации для статических IP-адресов с помощью systemd-networkd?

Установить метрики маршрутизации для статических IP-адресов с помощью systemd-networkd?

Недавно я настроил сервер, сеть которого управлялась напрямую с помощью systemd-networkd(nuked netplan.ioи Network Manager), и присвоил ему статические 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
                                               ^^^

Поскольку имеется несколько сетевых карт и я хочу сделать 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. Как мне этого добиться?

решение1

В этой теме вы можете увидеть, как разработчики обсуждают, как все работает, и как все должно работать:https://github.com/systemd/systemd/issues/928

Они приводят несколько примеров:

Под тегом «Маршрут»

[Route]
Destination=192.168.0.0/24
Metric=2048

Под тегом DHCP

[DHCP]
RouteMetric=1024

Объясняется это тем, что:

Маршруты подсети настраиваются без метрики через address_configure в networkd-address.c при получении IP, а предоставленные DHCP маршруты с метрикой обрабатываются позже через link_set_dhcp_routes в networkd-dhcp4.c

Далее следует оговорка:

RouteMetric работает для маршрутизируемых пакетов, но не для тех, которые остаются в локальной подсети.

Возможно, что именно та функциональность, которую вы хотите, еще не существует, поскольку тикет, на который я ссылался, в настоящее время открыт. Не стесняйтесь давать обратную связь напрямую разработчикам и присоединяйтесь к обсуждению, если вы считаете, что у вас есть идея о том, как это должно работать.

Связанный контент