Как заставить NetworkManager использовать конфигурации из /etc и откуда берутся соединения из /run?

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

У меня есть плата Petalinux, которая загружается с неправильной конфигурацией сетевого подключения (без DHCP). В /etc нет конфигураций:

$ ls /etc/NetworkManager/system-connections/
$ 

После настройки подключения с помощью sudo nmcli con mod eth0 ... всё работает нормально. (Я изменяю конфигурацию ipv4 и ipv6, как здесь на stackoverflow.) И это создаёт постоянный конфигурационный файл в /etc:

/etc/NetworkManager/system-connections/eth0.nmconnection

Но после перезагрузки NetworkManager создаёт новую конфигурацию в /run, которая каким-то образом имеет приоритет над моим подключением в /etc:

$ nmcli -f TYPE,FILENAME,UUID,NAME,DEVICE connection
TYPE      FILENAME                                                  UUID                                  NAME  DEVICE 
ethernet  /run/NetworkManager/system-connections/eth0.nmconnection  99e39a32-c0ab-4b3f-be16-75a9bdff1277  eth0  eth0   
loopback  /run/NetworkManager/system-connections/lo.nmconnection    5d84c484-4214-47e4-8f00-01f7730200b3  lo    lo     
ethernet  /etc/NetworkManager/system-connections/eth0.nmconnection  fb365147-6ad9-47a0-a5c8-fbea10080ece  eth0  --     

Здесь отъявленный 99e39a32 из /run подключён к устройству eth0, а моя конфигурация подключения fb365147 в /etc остаётся бездействующей.

Как правильно и постоянно сохранить конфигурацию подключения в NetworkManager или заставить его использовать конфигурацию из /etc как единственный шаблон для подключения eth0? Откуда он вообще берёт конфигурации для /run? Почему он не использует /etc для создания конфигураций в /run?

Есть сообщения о том, что NetworkManager создаёт подключения для каждого пользователя. Т.е. предположение было таким, что /etc принадлежит root, и как-то другие подключения используются для моего пользователя. Но я не думаю, что это так. nmcli не позволяет мне изменять подключение без прав root.

В интернете есть множество аналогичных вопросов: 1 (У меня нет файла /etc/netplan, который упоминается в комментарии), 2, 3. Но они не помогают в моём случае.

Обновление:

Есть информация о том, как создаётся конфигурация /run, благодаря логам journalctl -u NetworkManager после загрузки компьютера с [loggin] level=TRACE в /etc/NetworkManager/NetworkManager.conf:

NetworkManager[347]: <info>  [1734374462.9312] device (eth0): carrier: link connected
NetworkManager[347]: <trace> [1734374462.9313] ethtool[3]: ETHTOOL_GSET, eth0: success
NetworkManager[347]: <debug> [1734374462.9317] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [platform-init,!user-settings=0x4/0x14/unmanaged/unrealized], set-managed [user-settings=0x10])
NetworkManager[347]: <debug> [1734374462.9318] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [!platform-init,!user-settings=0x0/0x14/managed/unrealized], set-managed [platform-init=0x4])
NetworkManager[347]: <debug> [1734374462.9318] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [!sleeping,!platform-init,!user-settings=0x0/0x15/managed/unrealized], set-managed [sleeping=0x1])
NetworkManager[347]: <trace> [1734374462.9319] dbus-object[e5c0e28febbc1b13]: export: "/org/freedesktop/NetworkManager/Devices/2"

NetworkManager[347]: <info>  [1734374462.9329] manager: (eth0): new Ethernet device (/org/freedesktop/NetworkManager/Devices/2)
NetworkManager[347]: <trace> [1734374462.9349] settings: auto-default: cannot create auto-default connection for device eth0: already has a profile
<----- этот уже существующий "профиль" должен быть конфигурацией в /etc
       когда я добавил no-auto-default=* или eth0 в NetworkManager.conf
       эта строка произнесла: невозможно создать авто-умолчание.. потому что no-auto
...
NetworkManager[347]: <debug> [1734374462.9356] Connection 'eth0' differs from candidate 'eth0' in ipv4.addresses, ipv4.gateway, ipv4.method
NetworkManager[347]: <debug> [1734374462.9357] manager: (eth0): assume: generated connection 'eth0' (b807ebb2-d7a5-4b26-82c1-c321a6e7d5ba)
NetworkManager[347]: <debug> [1734374462.9357] device[e5c0e28febbc1b13] (eth0): assume-state: set guess-assume=0, connection=(null)
NetworkManager[347]: <trace> [1734374462.9370] keyfile: commit: b807ebb2-d7a5-4b26-82c1-c321a6e7d5ba (eth0) added as "/run/NetworkManager/system-connections/eth0.nmconnection" (nm-generated,volatile,external)

Я предполагаю, что вопрос теперь в том, что означает Connection 'eth0' differs from candidate 'eth0' ... – что такое этот кандидат? Т.е. возможно, есть какая-то другая конфигурация для самого устройства eth0, и когда конфигурация из /etc конфликтует с ней, NetworkManager создаёт новую?

Я пытался добавить этот файл, но без изменений в поведении (возможно, он устарел):

$ cat /etc/network/interfaces
auto eth0
iface eth0 inet dhcp

Подобно systemd, конфигурации в /run/ автоматически генерируются. Если вы хотите отключить автоматическое создание профилей для данного сетевого интерфейса (чтобы заставить себя создать профиль для подключения Ethernet даже в сети DHCP, например), вам нужно настроить NetworkManager для отключения профилей по умолчанию или создать собственный профиль.

Для этого добавьте конфигурационный файл в /etc/NetworkManager/conf.d/, который устанавливает no-auto-default для интерфейсов, которые вы не хотите, чтобы получали автоматические профили.

[main]
no-auto-default=eth0

Оставшиеся файлы в /run/NetworkManager/ являются состоянием системы в режиме выполнения для NetworkManager и не должны быть удалены.

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

Для того чтобы NetworkManager использовал конфигурации из директории /etc и не создавал новые соединения в /run, необходимо учесть несколько важных аспектов работы NetworkManager.

1. Понимание структуры конфигурации

NetworkManager создает файлы конфигурации соединений в двух основных местах:

  • /etc/NetworkManager/system-connections/ — هنا находятся постоянные конфигурации, которые сохраняются после завершения работы системы. Эти файлы можно редактировать вручную или создавать с помощью команд nmcli.
  • /run/NetworkManager/system-connections/ — здесь хранятся временные конфигурации на время работы системы. Эти файлы создаются автоматически, когда NetworkManager запускается и обнаруживает активные устройства.

2. Автоматическая генерация соединений

Когда NetworkManager обнаруживает сетевое устройство, он пытается создать автоматически соединение для него. Это происходит, если для устройства уже не существует профиля в /etc. В вашем случае, даже если вы создали файл /etc/NetworkManager/system-connections/eth0.nmconnection, NetworkManager по какой-то причине создает новое соединение с UUID 99e39a32, так как на этапе инициализации устройства он видит, что параметры в конфигурации отличаются от ожидаемых значений (сообщение "Connection ‘eth0’ differs from candidate ‘eth0’").

3. Отключение автоматического создания соединений

Чтобы предотвратить автоматическую генерацию соединений для вашего интерфейса eth0, вы можете использовать опцию no-auto-default. Для этого создайте файл конфигурации (например, no-auto-default.conf) в директории /etc/NetworkManager/conf.d/, в котором добавьте следующее содержимое:

[main]
no-auto-default=eth0

Это укажет NetworkManager не создавать автоматическое соединение для eth0, и он будет полагаться на конфигурацию, хранящуюся в /etc.

4. Перезагрузка NetworkManager

После внесения изменений вам необходимо перезагрузить NetworkManager, чтобы новые параметры вступили в силу. Это можно сделать с помощью команды:

sudo systemctl restart NetworkManager

5. Проверка конфигурации

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

nmcli -f TYPE,FILENAME,UUID,NAME,DEVICE connection

Вы должны увидеть, что ваше соединение из /etc используется и не было создано новое в /run.

6. Почему не используются конфигурации из /etc?

Если по-прежнему возникают конфликты между файлами в /etc и /run, это может быть связано с тем, что NetworkManager не считывает ваш файл из-за ошибок в конфигурации или неверных параметров. Убедитесь, что ваш файл /etc/NetworkManager/system-connections/eth0.nmconnection не содержит синтаксических ошибок и соответствует необходимым параметрам.

Заключение

Правильная настройка NetworkManager требует понимания его внутреннего устройства и механизмов создания соединений. Настроив файл конфигурации для отключения автоматического создания соединений, вы сможете обеспечить стабильность и предсказуемость сетевых настроек на вашей Petalinux плате.

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

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