Вопрос или проблема
У меня есть два сетевых интерфейса: 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
Причины проблемы
- Конфликт метрик: Обе конфигурации для интерфейсов создают маршруты с одинаковыми метриками, и, следовательно, система не знает, какой маршрут выбрать по умолчанию.
- Неявная настройка:
systemd-networkd
может игнорировать указанные вами метрики, если конфигурация DHCP настраивает свои собственные метрики.
Решение
Для исправления ситуации следует внести изменения в конфигурацию, чтобы гарантировать, что метрики маршрутов определены корректно. Выполните следующие шаги:
- Измените конфигурационные файлы: Вам нужно убедиться, что метрики, указанные для интерфейсов, действительно применяются. В файле
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
-
Перезапустите службу: После изменения конфигурации необходимо перезапустить
systemd-networkd
для применения настроек:sudo systemctl restart systemd-networkd
-
Проверьте маршруты: Убедитесь, что измененные метрики применяются правильно, выполнив команду:
ip route show
-
Проверка статуса службы: Убедитесь, что
systemd-networkd
работает без ошибок:systemctl status systemd-networkd
Заключение
Система systemd-networkd
требует четких указаний и правильной конфигурации для обеспечения корректной работы сетевых интерфейсов. Настройка адекватных метрик для маршрутов между интерфейсами — ключевой аспект в этом процессе. Следуя приведенным шагам, вы сможете обеспечить корректное применение ваших сетевых настроек.