Вопрос или проблема
У нас есть сервер DHCP (Linux), который обслуживает несколько принтеров и устройства Nuc. Он настроен на назначение IPv4-адресов, шлюза, dns1, dns2, dns3, dns4, ntp1, ntp2, доменов dns-search, суффикса домена и имени хоста на основе пула.
1 пул: Принтеры
2 пул: Телевизоры (устройства Nuc)
3 пул: Гости
Каждый пул имеет запись для назначения имени хоста устройству в формате [p|tv|g]-lvl(n)-[NNN].
Для пула ТВ у нас есть следующий шаблон имени хоста: tv-lvl(n)-[NNN], где (n) — это этаж, а [NNN] — последние 1 до 3 цифр IP-адреса (например: tv-lvl1-180).
Во время установки Linux мы не настраиваем имя хоста и оставляем его по умолчанию (localhost), затем с помощью скрипта оболочки настраиваем сетевое соединение для получения настроек DHCP так, как они настроены на сервере DHCP. Однако имя хоста устройства остается localhost.
Вот что делает скрипт (обратите внимание, что это не фактический код):
nmcli connection modify id 'Wired Connection 1' ipv4.addresses ""
nmcli connection modify id 'Wired Connection 1' ipv4.gateway ""
nmcli connection modify id 'Wired Connection 1' ipv4.dns ""
nmcli connection modify id 'Wired Connection 1' ipv4.dns-search ""
nmcli connection modify id 'Wired Connection 1' ipv4.method auto
nmcli connection modify id 'Wired Connection 1' autoconnect yes
nmcli connection modify id 'Wired Connection 1' hostname.from-dhcp
nmcli connection modify id 'Wired Connection 1' hostname.only-from-default true
nmcli connection modify id 'Wired Connection 1' hostname.from-dns-lookup true
Затем мы перезагружаем, и устройство получает правильные IP-настройки.
Я могу пинговать устройство откуда угодно, например, ping tv-lvl1-180
, без проблем, и даже могу подключиться к устройству по SSH ssh tv-lvl1-180
, однако подсказка остается следующей:
user@localhost: ~$
Как сделать назначенное имя хоста фактическим именем хоста устройства?
С user@localhost: ~$
на user@tv-lvl1-180: ~$
В случае необходимости, вот что мы получаем, когда выполняем:
user@localhost:~$ hostname
localhost
user@localhost:~$ hostnamectl
Статическое имя хоста: localhost
Красивое имя хоста: linuxmint <- Мы изменили его по другим причинам.
Имя иконки: computer-desktop
[...]
user@localhost:~$ cat /etc/hostname
localhost
user@localhost:~$
Ответ или решение
Чтобы изменить имя хоста на устройстве под управлением Linux, которое получает конфигурацию через DHCP, необходимо внести некоторые изменения в настройки NetworkManager и использовать правильные команды. В вашем случае, хотя устройство получает корректное имя хоста от DHCP-сервера, оно не отображается на командной строке, что может вызвать путаницу.
Проблема
Ваше устройство, после перезагрузки, получает необходимые параметры (IP-адрес, DNS и т.д.) от DHCP-сервера, включающего имя хоста, но по умолчанию отображается как localhost
. Это связано с тем, что имя хоста, полученное от DHCP, не устанавливается в качестве статического имени хоста для системы.
Решение
Для изменения отображаемого имени хоста на tv-lvl1-180
, вы можете следовать этому пошаговому руководству:
-
Настройка NetworkManager: Вам необходимо изменить некоторые параметры настройки в NetworkManager. Вы уже начали этот процесс, но давайте убедимся, что мы используем правильные команды.
Например:
nmcli connection modify 'Wired Connection 1' ipv4.method auto nmcli connection modify 'Wired Connection 1' hostname.from-dhcp yes
Это должно позволить устройству получать имя хоста от DHCP. Убедитесь также, что другие параметры настроены правильно.
-
Установка имени хоста: Вы можете вручную установить имя хоста, используя команду
hostnamectl
. Сделайте это следующим образом:sudo hostnamectl set-hostname tv-lvl1-180
Это установит статическое имя хоста для вашего устройства. Обратите внимание, что после этого изменения перезагрузка устройства может не понадобиться.
-
Проверка изменений: После установки нового имени хоста выполните следующую команду, чтобы проверить, изменилась ли конфигурация:
hostname hostnamectl
Убедитесь, что вывод показывает новое имя хоста.
-
Редактирование файла
/etc/hostname
: Убедитесь, что файл/etc/hostname
содержит новое имя:echo "tv-lvl1-180" | sudo tee /etc/hostname
-
Перезагрузка службы сети: Для применения всех изменений можно перезагрузить сетевую службу:
sudo systemctl restart NetworkManager
Заключение
После выполнения всех этих шагов командная строка должна показывать новое имя хоста при каждом запуске. Теперь, вместо вывода user@localhost: ~$
, вы должны видеть user@tv-lvl1-180: ~$
. Это изменит не только интерфейс командной строки, но и улучшит управление вашим устройством в сети.
Не забудьте проверить, что все изменения сохранены и работают, а также что ваше имя хоста больше не конфликтует с другими устройствами в сети.