У меня есть встроенная система Linux, скомпилированная с Yocto, используя systemd. У меня есть файл конфигурации сети по адресу /etc/systemd/network/20-wired.network. Содержимое этого файла:

[Match]
Name=eth0

[Network]
Address=192.168.5.40/24
Gateway=192.168.5.1
DNS=192.168.5.1

Однако, когда я перезагружаю свою машину, интерфейс eth0 успешно настраивается с использованием DHCP вместо назначения статического IP-адреса. Команда ip a показывает:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.223/16 brd 10.1.255.255 scope global dynamic noprefixroute eth0
       valid_lft 85898sec preferred_lft 85898sec
    inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

Однако, если я затем подожду 5 секунд или около того после загрузки и выполню systemctl restart systemd-networkd, система обычно будет правильно настроена следующим образом:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.40/24 brd 192.168.5.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

Наконец, при правильном выборе времени перезапуска сетевой службы я, по-видимому, даже могу получить этот результат (как предполагаемый статический адрес, так и нежелательный адрес DHCP):

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.40/24 brd 192.168.5.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.1.1.223/16 brd 10.1.255.255 scope global dynamic noprefixroute eth0
       valid_lft 86246sec preferred_lft 86246sec
    inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

Кто-нибудь знает, что здесь происходит или как это отладить? Что-то явно не так с моей конфигурацией?

systemctl status systemd-networkd показывает следующее сразу после загрузки (особенно после network-online.target):

* systemd-networkd.service - Network Service
     Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
     Active: activating (start) since Tue 2021-07-20 12:58:52 UTC; 65ms ago
TriggeredBy: * systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
   Main PID: 282 ((networkd))
      Tasks: 1 (limit: 3576)
     Memory: 416.0K
     CGroup: /system.slice/systemd-networkd.service
             `-282 (networkd)

Через несколько секунд это выглядит так:

* systemd-networkd.service - Network Service
     Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-07-20 12:58:52 UTC; 3min 20s ago
TriggeredBy: * systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
   Main PID: 282 (systemd-network)
     Status: "Processing requests..."
      Tasks: 1 (limit: 3576)
     Memory: 2.0M
     CGroup: /system.slice/systemd-networkd.service
             `-282 /lib/systemd/systemd-networkd

Таким образом, похоже, что служба все еще «активируется», когда запускаются службы network-online.target. Я не уверен, что это означает, однако, или если это проблема.

2
Dave 20 Июл 2021 в 16:05
IS DHCP устанавливает адрес 10.1.1.x? Вы уверены, что у вас правильный шлюз? Ваш 198.x.x.x. запрос адреса действителен для вашей сети?
 – 
Stephen Boston
20 Июл 2021 в 05:53
Что возвращает systemctl status systemd-networkd сразу после перезагрузки (до перезагрузки)?
 – 
nobody
20 Июл 2021 в 08:46
Да, адрес 10.1.1.0/16 устанавливается сервером DHCP. Это действительные настройки для моей сети. Статический адрес 192.168.5.0/24, который я пытаюсь установить, является «действительным» только в том случае, если у меня есть компьютер, подключенный к адресу 192.168.5.2/24. Шлюз вообще не при чем. Мне не нужно иметь шлюз для настройки интерфейса.
 – 
Dave
20 Июл 2021 в 15:22
Я добавил вывод статуса в конец поста. Единственное, что я заметил, это то, что когда службы, нацеленные на работу в сети, работают, служба systemd-networkd все еще «активируется». Через несколько секунд эта служба отображается как «активная».
 – 
Dave
20 Июл 2021 в 16:06
Я только что заметил, что кажется, что NetworkManager добрался до самой последней сборки. Он работал вместе с systemd-networkd. Это нормально? Я отключил службу, и теперь я правильно настраиваю интерфейс.
 – 
Dave
20 Июл 2021 в 16:18

2 ответа

Вам не нужно отключать NetworkManager. Просто добавьте эту строку в файл конфигурации:

NM_CONTROLLED=no

Надеюсь, это поможет.

0
Farhad Kia 23 Июл 2021 в 18:40

Я только что заметил, что работают и systemd-networkd, и NetworkManager. Это не нормально, да? Обычно вы хотели бы одно или другое? systemctl disable /lib/systemd/system/NetworkManager.service && reboot, похоже, устранил проблему.

Изменить: это не ответ или, по крайней мере, весь ответ. Просто это случилось снова, даже с отключенным NetworkManager.

2
Dave 23 Июл 2021 в 16:12