systemd-networkd загружает конфигурацию, но не применяет её.

Вопрос или проблема

У меня есть два сетевых интерфейса: eno1 и eth0. Я хотел бы, чтобы оба использовали DHCP для получения IP-адреса. Я хочу, чтобы eno1 использовался как маршрут по умолчанию для всего. Единственный раз, когда я хочу использовать eth0, это когда указываю интерфейс в команде curl.

Я создал два конфигурационных файла:

root:/etc/systemd/network$ ls -la
total 16
drwxr-xr-x 2 root root 4096 Oct 20 10:50 .
drwxr-xr-x 6 root root 4096 Oct 20 10:51 ..
-rw-r--r-- 1 root root   59 Oct 20 09:54 10-eno1.network
-rw-r--r-- 1 root root   59 Oct 20 10:41 20-eth0.network
root:/etc/systemd/network$ cat 10-eno1.network
[Match]
Name=eno1

[Network]
DHCP=yes

[Route]
Metric=100

root:/etc/systemd/network$ cat 20-eth0.network
[Match]
Name=eth0

[Network]
DHCP=yes

[Route]
Metric=4000

Я пробовал перезагрузить и поиграть с метриками, однако, они, похоже, не вступают в силу.

root:/etc/systemd/network$ systemctl status systemd-networkd
● systemd-networkd.service - Сетевая конфигурация
     Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-10-20 10:51:59 UTC; 12min ago
TriggeredBy: ● systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
             man:org.freedesktop.network1(5)
   Main PID: 24821 (systemd-network)
     Status: "Обработка запросов..."
      Tasks: 1 (limit: 76956)
   FD Store: 0 (limit: 512)
     Memory: 1.7M (peak: 2.1M)
        CPU: 32ms
     CGroup: /system.slice/systemd-networkd.service
             └─24821 /usr/lib/systemd/systemd-networkd

Oct 20 10:51:59 systemd-networkd[24821]: eth0: Link UP
Oct 20 10:51:59 systemd-networkd[24821]: eth0: Получен сигнал
Oct 20 10:51:59 systemd-networkd[24821]: eno1: Получен IPv6LL
Oct 20 10:51:59 systemd-networkd[24821]: eth0: Получен IPv6LL
Oct 20 10:51:59 systemd-networkd[24821]: Перечисление завершено
Oct 20 10:51:59 systemd[1]: Запущена служба systemd-networkd.service - Сетевая конфигурация.
Oct 20 10:51:59 systemd-networkd[24821]: eno1: Настройка с /etc/systemd/network/10-eno1.network.
Oct 20 10:51:59 systemd-networkd[24821]: eth0: Настройка с /etc/systemd/network/20-eth0.network.
Oct 20 10:51:59 systemd-networkd[24821]: eno1: DHCPv4 адрес 192.168.0.2/24, шлюз 192.168.0.1 получен от 192.168.0.1
Oct 20 10:51:59 systemd-networkd[24821]: eth0: DHCPv4 адрес 192.168.0.99/24, шлюз 192.168.0.1 получен от 192.168.0.1
root:/etc/systemd/network$ ip route show
default via 192.168.0.1 dev eno1 proto dhcp src 192.168.0.2 metric 1024
default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.99 metric 1024
128.138.140.44 via 192.168.0.1 dev eno1 proto dhcp src 192.168.0.2 metric 1024
128.138.140.44 via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.99 metric 1024
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.2 metric 1024
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.99 metric 1024
192.168.0.1 dev eno1 proto dhcp scope link src 192.168.0.2 metric 1024
192.168.0.1 dev eth0 proto dhcp scope link src 192.168.0.99 metric 1024

Ответ или решение

Проблема: systemd-networkd Загружает конфигурацию, но не применяет её

Введение

Система демонов systemd-networkd управляет сетевыми интерфейсами в Linux, используя конфигурационные файлы. В данной ситуации мы сталкиваемся с проблемой, когда конфигурация загружается, но не применяется. Рассмотрим, почему это может происходить и как это исправить для обеспечения правильной работы ваших сетевых интерфейсов, eno1 и eth0.

Описание проблемы

Вы настроили два интерфейса для получения IP-адресов с помощью DHCP и желаете, чтобы eno1 использовался как маршрут по умолчанию. Тем не менее, вывод команд показывает, что оба интерфейса получают IP-адреса и создают маршруты по умолчанию с одинаковыми значениями метрик, что может привести к конфликтам.

Анализ конфигурации

При первой проверке конфигурационных файлов вы указали:

  • 10-eno1.network:

    [Match]
    Name=eno1
    
    [Network]
    DHCP=yes
    
    [Route]
    Metric=100
  • 20-eth0.network:

    [Match]
    Name=eth0
    
    [Network]
    DHCP=yes
    
    [Route]
    Metric=4000

Однако, обе метрики в маршрутах, полученных через команду ip route show, равны 1024:

default via 192.168.0.1 dev eno1 proto dhcp src 192.168.0.2 metric 1024
default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.99 metric 1024

Причины проблемы

  1. Конфликт метрик: Обе конфигурации для интерфейсов создают маршруты с одинаковыми метриками, и, следовательно, система не знает, какой маршрут выбрать по умолчанию.
  2. Неявная настройка: systemd-networkd может игнорировать указанные вами метрики, если конфигурация DHCP настраивает свои собственные метрики.

Решение

Для исправления ситуации следует внести изменения в конфигурацию, чтобы гарантировать, что метрики маршрутов определены корректно. Выполните следующие шаги:

  1. Измените конфигурационные файлы: Вам нужно убедиться, что метрики, указанные для интерфейсов, действительно применяются. В файле 10-eno1.network метрику оставьте как есть, но убедитесь, что в 20-eth0.network она также была определена правильно.
# 10-eno1.network
[Match]
Name=eno1

[Network]
DHCP=yes

[Route]
Metric=100
# 20-eth0.network
[Match]
Name=eth0

[Network]
DHCP=yes

[Route]
Metric=200
  1. Перезапустите службу: После изменения конфигурации необходимо перезапустить systemd-networkd для применения настроек:

    sudo systemctl restart systemd-networkd
  2. Проверьте маршруты: Убедитесь, что измененные метрики применяются правильно, выполнив команду:

    ip route show
  3. Проверка статуса службы: Убедитесь, что systemd-networkd работает без ошибок:

    systemctl status systemd-networkd

Заключение

Система systemd-networkd требует четких указаний и правильной конфигурации для обеспечения корректной работы сетевых интерфейсов. Настройка адекватных метрик для маршрутов между интерфейсами — ключевой аспект в этом процессе. Следуя приведенным шагам, вы сможете обеспечить корректное применение ваших сетевых настроек.

Оцените материал
Добавить комментарий

Капча загружается...