Вопрос или проблема
У нас есть 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:~$
Ответ или решение
Чтобы настроить хостнейм устройства с использованием NetworkManager и получать его из DHCP-сервера, необходимо внести корректировки как в конфигурацию NetworkManager, так и на уровне хостовой системы.
1. Разберем вашу ситуацию
Ваша текущая конфигурация использует DHCP-сервер на Linux, который раздает адреса и хостнеймы для разных пулов устройств (принтеры, TV-устройства, гости). Вы уже используете команду nmcli
для изменения сетевых параметров, но заданный хостнейм не отображается на устройстве после перезагрузки.
2. Понимание работы с NetworkManager
NetworkManager управляет сетевыми подключениями и может работать с DHCP-сервером для автоматической настройки параметров сети, включая хостнеймы. Ваша цель — настроить так, чтобы хостнейм, назначаемый DHCP, использовался системой.
3. Изменение конфигурации
На основе предоставленных вами команд, вы можете внести изменения, чтобы обеспечить правильное назначение хостнейма:
nmcli connection modify id 'Wired Connection 1' ipv4.method auto
nmcli connection modify id 'Wired Connection 1' hostname.from-dhcp yes
nmcli connection modify id 'Wired Connection 1' hostname.only-from-default false
nmcli connection modify id 'Wired Connection 1' hostname.from-dns-lookup false
Следует обратить внимание на hostname.only-from-default
, который должен быть установлен в false
, чтобы разрешить изменяемый хостнейм по DHCP.
4. Обновление /etc/hostname
После запуска nmcli
и получения настроек от DHCP-сервера, вы можете вручную изменить файл /etc/hostname
, чтобы задать желаемый хостнейм, если это все еще необходимо:
echo "tv-lvl1-180" | sudo tee /etc/hostname
5. Перезагрузка службы
После изменения параметров рекомендуется перезапустить сетевую службу для применения изменений:
sudo systemctl restart NetworkManager
6. Проверка результата
Через некоторое время или после перезагрузки устройства, введите команду для проверки установленного хостнейма:
hostname
Вы должны увидеть tv-lvl1-180
вместо localhost
.
7. Заключение
Убедитесь, что настройки DHCP-сервера корректно возвращают назначаемые хостнеймы. Также важно проверять, что ваш DHCP-сервер корректно настроен для работы с NetworkManager. Это обеспечит, что хостнейм будетConsistent и правильно отображен в системе Linux после получения настроек по DHCP.
С такими изменениями вы сможете получать и использовать заданный хостнейм, что улучшит внешний вид командной строки и упростит идентификацию устройств в сети.