AlmaLinux 8.10 VPS имя хоста постоянно перезаписывается, вероятно, NetworkManager.

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

AlmaLinux 8.10 VPS имя хоста постоянно перезаписывается, вероятно, NetworkManager.

На AlmaLinux 8.10 ….

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

На большинстве серверов это работает с hostnamectl set-hostname new.myhost.example.com, на этом тоже работает, но оно меняется при перезагрузке.

Это VPS, я предполагаю, что это делается из-за более высокой сетевой конфигурации моего хостинг-провайдера, потому что они могут изменить его с их стороны, но я хочу изменить его самостоятельно, когда это необходимо. Их ответ: “мы можем изменить это отсюда или погуглить, как изменить это самостоятельно“.

Следующие логи показывают, как имя хоста возвращается обратно, когда сеть подключена после перезагрузки.

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

  1. Я пытался DHCP_HOSTNAME=new.myhost.example.com внутри этих 2 файлов:
/etc/sysconfig/network-scripts/ifcfg-2
/etc/sysconfig/network-scripts/ifcfg-eth0
  1. Я пытался:
# внутри: /etc/NetworkManager/NetworkManager.conf

[main]
plugins=keyfile
hostname-mode=none

[keyfile]
hostname=new.myhost.example.com

Однако теперь я увидел в логе, что написано keyfile: 'hostname' option is deprecated and has no effect.

Это то, что показывает лог при выполнении каждой команды:

hostnamectl set-hostname new.myhost.example.com

Sep 15 22:09:52 new dbus-daemon[628]: [system] Activating via systemd: service name="org.freedesktop.hostname1" unit="dbus-org.freedesktop.hostname1.service" requested by ':1.44' (uid=0 pid=1296 comm="hostnamectl set-hostname new.myhost.example.com ")
Sep 15 22:09:52 new systemd[1]: Starting Hostname Service...
Sep 15 22:09:52 new dbus-daemon[628]: [system] Successfully activated service 'org.freedesktop.hostname1'
Sep 15 22:09:52 new systemd[1]: Started Hostname Service.
Sep 15 22:09:52 new systemd-hostnamed[1297]: Changed static host name to ' new.myhost.example.com'
Sep 15 22:09:52 new NetworkManager[629]: <info>  [1726452592.3467] hostname: static hostname changed from "old.myhost.example.com" to " new.myhost.example.com"
Sep 15 22:09:52 new systemd-hostnamed[1297]: Changed host name to ' new.myhost.example.com'
Sep 15 22:09:52 new dbus-daemon[628]: [system] Activating via systemd: service name="org.freedesktop.nm_dispatcher" unit="dbus-org.freedesktop.nm-dispatcher.service" requested by ':1.2' (uid=0 pid=629 comm="/usr/sbin/NetworkManager --no-daemon ")
Sep 15 22:09:52 new systemd[1]: Starting Network Manager Script Dispatcher Service...
Sep 15 22:09:52 new dbus-daemon[628]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Sep 15 22:09:52 new systemd[1]: Started Network Manager Script Dispatcher Service.
Sep 15 22:10:02 new systemd[1]: NetworkManager-dispatcher.service: Succeeded.

перезагрузка
Лог показывает, как имя хоста возвращается обратно, когда сеть подключена!

Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9600] manager: NetworkManager state is now CONNECTING
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9601] device (eth0): state change: prepare -> config (reason 'none', sys-iface-state: 'managed')
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9604] device (eth0): state change: config -> ip-config (reason 'none', sys-iface-state: 'managed')
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9608] policy: set 'prl_nettool-nm-eth0' (eth0) as default for IPv4 routing и DNS
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9624] device (eth0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'managed')
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9645] device (eth0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'managed')
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9646] device (eth0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'managed')
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9648] manager: NetworkManager state is now CONNECTED_SITE
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9650] device (eth0): Activation: successful, device activated.
Sep 15 22:12:15 new NetworkManager[631]: <info>  [1726452735.9653] manager: NetworkManager state is now CONNECTED_GLOBAL
Sep 15 22:12:15 new chronyd[636]: Source 213.239.154.12 online
Sep 15 22:12:15 new chronyd[636]: Source 178.239.19.63 online
Sep 15 22:12:15 new chronyd[636]: Source 185.51.192.61 online
Sep 15 22:12:15 new chronyd[636]: Source 178.239.19.61 online
Sep 15 22:12:16 new systemd-hostnamed[653]: Changed static host name to 'old.myhost.example.com'
Sep 15 22:12:16 new NetworkManager[631]: <info>  [1726452736.1383] hostname: static hostname changed from "new.myhost.example.com" to "old.myhost.example.com"
Sep 15 22:12:16 new NetworkManager[631]: <info>  [1726452736.1412] policy: set-hostname: set hostname to 'old.myhost.example.com' (from system configuration)
Sep 15 22:12:16 new NetworkManager[631]: <info>  [1726452736.1413] audit: op="hostname-save" arg="old.myhost.example.com" pid=1228 uid=0 result="success"
Sep 15 22:12:16 new systemd-hostnamed[653]: Changed host name to 'old.myhost.example.com'
Sep 15 22:12:16 new qemu-ga[669]: info: guest-exec close [stdout cid=2] queue=0 total=0

Соответствующие конфигурационные файлы следующие, на случай если нужно будет опубликовать их содержимое:

find /etc/NetworkManager/

/etc/NetworkManager/
/etc/NetworkManager/system-connections
/etc/NetworkManager/system-connections/prl_nettool-nm-eth0.nmconnection
/etc/NetworkManager/dnsmasq.d
/etc/NetworkManager/NetworkManager.conf
/etc/NetworkManager/conf.d
/etc/NetworkManager/conf.d/60-prl_nettool_eth0.conf
/etc/NetworkManager/dnsmasq-shared.d
/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dispatcher.d/20-chrony-dhcp
/etc/NetworkManager/dispatcher.d/pre-down.d
/etc/NetworkManager/dispatcher.d/20-chrony-onoffline
/etc/NetworkManager/dispatcher.d/pre-up.d
/etc/NetworkManager/dispatcher.d/no-wait.d

После 3-4 дней неприятной отладки и разочарования, я пришел к выводу, что проблема с изменением имени хоста является ошибкой NetworkManager (возможно, эта ошибка) в определенных конфигурациях и версиях, таких как:

NetworkManager 1.40.16-15.el8_9 и другие
AlmaLinux 8.1, замечено и в других 8.x
Ядро 6.10.10, также происходит с старым ядром 4.x

Это также, похоже, связано с конфигурациями, которые по умолчанию берут имя хоста от DHCP.


Если кто-то столкнется с этим, имя хоста продолжает изменяться на стандартное при попытке установить его с помощью hostnamectl set-hostname new.myserver.tld, и если у вас есть возможность изменить его в интерфейсе веб-хостинга / интернет-провайдера, выберите этот путь. Проще и надежнее.


Краткая версия

  • не меняйте его с помощью hostnamectl, если вы это сделали, перезагрузите, прежде чем продолжить
  • установите имя хоста, добавив kernel.hostname = new.myserver.tld в новый файл sysctl /lib/sysctl.d/60-my-custom-settings.conf, (60 или тот, который следующий номер файла в этой папке).
  • установите hostname-mode=none в /etc/NetworkManager/NetworkManager.conf в секции [main]
  • перезагрузите ДВАЖДЫ, чтобы убедиться, что настройки сохраняются, потому что некоторые команды, такие как hostnamectl set-hostname, могут вызвать сброс имени хоста на стандартное при первой загрузке (даже с установленным выше kernel.hostname)!
  • проверьте с помощью hostnamectl; он должен показать, что transient hostname это новое имя хоста, а static hostname остается старым.
  • hostname; команда показывает новое имя хоста
  • файл /etc/hostname продолжает показывать СТАРОЕ статическое значение

Длинная версия TL;DR

Я хотел найти решение, поэтому ниже приведено то, что [в некотором роде] сработало:

  1. не используйте hostnamectl set-hostname your-new-hostname, если вы это сделали, перезагрузите машину дважды, не меняя ничего еще. Более подробная информация в самом конце.

  2. предоставьте настраиваемое имя хоста ядра либо в /etc/sysctl.conf, ЛИБО создав настраиваемый файл с более высоким номером, чем у других файлов в /lib/sysctl.d/ директории:

/lib/sysctl.d/60-my-custom-settings.conf

kernel.hostname = new.myserver.tld
  1. отредактируйте /etc/NetworkManager/NetworkManager.conf и скажите NetworkManager “не управлять временным именем хоста и никогда его не устанавливать” (hostname-mode=none).
[main]
hostname-mode=none

# в самом конце, под логированием, включите эти 2, чтобы легче отлаживать сообщения NetworkManager
[logging]
level=TRACE
domains=ALL

Совет: запустите NetworkManager --print-config, чтобы проверить, использовали ли вы переменную в неправильной [section] или если переменная неизвестна и т.д.

  1. перезагрузите

Результаты:

  • hostnamectl; все еще покажет старое имя хоста под static hostname, но всегда надежно будет показывать new.myserver.tld как Transient hostname
hostnamectl;

Static hostname: old.myserver.tld
Transient hostname: new.myserver.tld
  • простая команда hostname; вернет new.myserver.tld корректно
  • файл /etc/hostname все еще будет показывать старое статическое значение old.myserver.tld, но это менее важно, так как большинство программ должны получать его из команды hostname.
  • service systemd-hostnamed status показывает новое имя хоста как префикс лога:
[date] new.myserver.tld systemd[1]: Started Hostname Service.
[date] new.myserver.tld systemd[1]: systemd-hostnamed.service: Succeeded.
  • service NetworkManager status обнаружит старое статическое old.myserver.tld (см. строку #1), но затем должно сказать, что hostname is unmanaged и будет продолжать показывать новое имя хоста как префикс лога:
[date] new.myserver.tld NetworkManager[647]: <info>  audit: op="hostname-save" arg="old.myserver.tld" pid=1358 uid=0 result="success"
[date] new.myserver.tld NetworkManager[647]: <trace> policy: set-hostname: hostname is unmanaged
[date] new.myserver.tld NetworkManager[647]: <trace> device[871fb723854d0965] (eth0): remove_pending_action (0):

На этом я смог остановиться в изменении имени хоста на этой машине. Если я попробую обычным способом:

hostnamectl set-hostname new.myserver.tld

То после перезагрузки в логе NetworkManager этой машины написано, что он обнаружил статическое имя хоста как “none”, затем устанавливает на старое статическое old.myserver.tld и затем продолжает использовать его, а не то, которое вы указали в hostnamectl set-hostname new.myserver.tld перед перезагрузкой И НИ ДАЖЕ НЕ то, которое было установлено с помощью kernel.hostname. То же самое происходит, если я пытаюсь вручную установить новое имя хоста в /etc/hostname, после перезагрузки оно обнаруживается как none, затем меняется на старое статическое old.myserver.tld.

Таким образом, в этой ситуации самым надежным решением было: не менять его с помощью hostnamectl, установить его с помощью kernel.hostname в конфигурационном файле sysctl, установить hostname-mode=none в NetworkManager.conf

Я даже пытался запустить hostnamectl при запуске или отредактировать файл /etc/hostname при запуске, все не срабатывает и затем сбрасывается на стандартное old.myserver.tld как в статическом, так и временном имени хоста. Чтобы усложнить отладку, попытка изменить имя хоста при запуске иногда срабатывает до или после старта NetworkManager, тогда результаты случайные.

Я сказал, что иногда требуется две перезагрузки, потому что вы могли установить правильное новое имя хоста в файле kernel.hostname sysctl на пункте #2 выше, но если вы также использовали hostnamectl set-hostname your-new-hostname перед перезагрузкой, то при первой загрузке оно сбросится на стандартное статическое имя хоста (как для статического, так и для временного имени хоста), и только при второй перезагрузке оно возьмет из kernel.hostname sysctl файл и использует это как временное имя хоста.

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

Проблема изменения.hostname на AlmaLinux 8.10 VPS

Ваша ситуация с изменением имени хоста на AlmaLinux 8.10, которая сбрасывается при перезагрузке, скорее всего, связана с настройками NetworkManager, который по умолчанию может перезаписывать имя хоста, если оно получает значение по DHCP. Это довольно распространённая проблема на VPS, где хостинг-провайдер управляет сетевыми настройками.

Вот пошаговое руководство к решению вашей проблемы:

Шаг 1: Не используйте hostnamectl

Если вы уже использовали команду hostnamectl set-hostname new.myserver.tld, перезагрузите сервер, чтобы убедиться, что все настройки сброшены. После этого следуйте остальным шагам.

Шаг 2: Задайте новое имя хоста через sysctl

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

  1. Откройте терминал и создайте новый файл:

    sudo nano /lib/sysctl.d/60-my-custom-settings.conf
  2. Вставьте следующую строку:

    kernel.hostname = new.myserver.tld
  3. Сохраните и закройте файл.

Шаг 3: Настройте NetworkManager

Теперь нужно изменить параметры конфигурации NetworkManager, чтобы он не управлял именем хоста:

  1. Откройте конфигурационный файл NetworkManager:

    sudo nano /etc/NetworkManager/NetworkManager.conf
  2. Измените секцию [main], добавив строку hostname-mode=none:

    [main]
    hostname-mode=none
  3. Внизу добавьте для упрощения диагностики:

    [logging]
    level=TRACE
    domains=ALL
  4. Сохраните и закройте файл.

Шаг 4: Перезагрузите сервер

Теперь нужно перезагрузить сервер для применения изменений:

sudo reboot

Шаг 5: Проверьте имя хоста

После перезагрузки проверьте текущее имя хоста:

hostnamectl

Вы должны увидеть, что статическое имя хоста все еще старое, но временное имя хоста должно быть изменено на new.myserver.tld.

Примечание

  • Проверьте, что файл /etc/hostname всё ещё показывает старое значение, так как это не так важно. Основные службы будут использовать вывод команды hostname.
  • В случае повторной перезагрузки (иногда требуется дважды), так как некоторые команды могут сбросить имя хоста на начальном этапе, сверьтесь с логами NetworkManager для получения дополнительной информации, если что-то пойдёт не так.

Заключение

С учётом описанных шагов, вы сможете установить постоянное имя хоста на вашем VPS с AlmaLinux 8.10. Если вам предоставляется возможность настроить имя хоста через интерфейс управления вашего хостинга, это может быть более простым решением в некоторых случаях.

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

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