Есть способ сделать это с помощью небольшого скрипта для ловушки dhcp, как описано здесь .
Создайте новый файл:
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
и вставьте следующий код:
#!/bin/sh
# Filename: /etc/dhcp/dhclient-exit-hooks.d/hostname
# Purpose: Used by dhclient-script to set the hostname of the system
# to match the DNS information for the host as provided by
# DHCP.
#
# Do not update hostname for virtual machine IP assignments
if [ "$interface" != "eth0" ] && [ "$interface" != "wlan0" ]
then
return
fi
if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \
&& [ "$reason" != REBIND ] && [ "$reason" != REBOOT ]
then
return
fi
echo dhclient-exit-hooks.d/hostname: Dynamic IP address = $new_ip_address
hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -r 's/((.*)[^\.])\.?/\1/g' )
echo $hostname > /etc/hostname
hostname $hostname
echo dhclient-exit-hooks.d/hostname: Dynamic Hostname = $hostname
Замените eth0
и wlan0
на имена интерфейсов, из которых вы хотите получить имя хоста. В большинстве случаев eth0
и wlan0
должно оставаться прежним.
Убедитесь, что это читабельно ...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
Это все. При следующем ответе dhcp ваше имя хоста будет обновлено автоматически.
host
команду) для извлечения имени хоста, связанного с назначенным IP-адресом. Серверы DHCP могут на самом деле явно установить опцию имени хоста (опция 12), которая потенциально может отличаться от имени хоста, которое вы получаете из DNS-запроса на IP (это также может привести к сбою, если в DNS не существует записи PTR для IP-адреса). )Вы можете получить ваше имя хоста от вашего DHCP-сервера - это часть спецификации DHCP.
https://tools.ietf.org/html/rfc1533#section-3.14
«Эта опция указывает имя клиента»
источник
Ответ d_inevitable почти решил мою проблему, но не полностью. Проблема заключалась в том, что хотя:
DHCP-сервер отправлял имя хоста (добавив
в dhcpd.conf), и я фактически проверил это, захватив и проанализировав содержимое предложения DHCP с помощью wireshark
DHCP-клиент ожидал имя хоста от DHCP-сервера (добавив
в dhclient.conf)
Клиент не получил новое имя хоста (легко проверить, набрав
в терминале и получить старое имя хоста, или нет имени хоста, если я удалил содержимое / файл). В результате предложенное решение d_inevitable только копировало пустую строку.
Чтобы решить эту проблему, я применил грубое решение, за которым обычно не следует следовать, если только вы не отчаянно пытаетесь заставить его работать, как я.
Сначала откройте с возможностью редактирования сценарий управления клиентом DHCP:
Там вам нужно будет найти функцию
Просто используйте поиск, и он должен прийти прямо вверх. Теперь, по крайней мере на моем компьютере, эта функция имеет три условия if-then-else, инкапсулированных друг в друга:
Теперь вам нужно принудительно назначить новое имя хоста вашему хосту, несмотря ни на что. Поэтому вы хотите закомментировать два инкапсулированных if-then-else. Результат должен выглядеть примерно так:
Теперь d_inevitable или это должно работать как ожидалось. Надеюсь, это поможет, если вы в таком же отчаянном отчаянии, как и я.
источник
Ответ Оли явно ложный («Вы не получаете свое имя хоста от сервера DHCP»), о чем свидетельствуют другие ответы здесь, а также мой недавний опыт работы с системой RHEL7. Указанная система получила имя хоста от сервера DHCP.
И действительно, в файлах конфигурации DHCP есть вещи, которые должны это сделать. Например:
Предполагается, что хост говорит, что его зовут host4.
Оказывается, клиент ISC НЕ ВИДЕТСЯ, ЧТОБЫ ПОДДЕРЖАТЬ ЭТО!
Тем не менее, dhcpcd5 делает, из коробки. Остановите dhclient, установите dhcpcd5, запустите dhcpcd, возобновите аренду и poof, в качестве имени вашего хоста на вашем DHCP-клиенте будет указано имя, отправленное с DHCP-сервера. Нет
dhclient-exit-hooks.d
сценариев, нет взломовrc.local
, ничего.В заключение, я потратил много времени, пытаясь заставить это работать, используя dhclient ISC. Абсолютно не радость, даже когда сервер отправляет имя хоста.
Моим первоначальным решением проблемы было написание какого-то симпатичного кода,
rc.local
чтобы определить, когда возникла сеть, и принудительно (в моем случае)/etc/hosts
выполнить поиск, чтобы получить имя хоста, а затем запуститьhostname
с этим именем хоста. Это работает, но до тех пор, пока не появится сеть, ваше имя хоста, вероятно, будет неправильным (при первом развертывании хоста я удаляю его/etc/hostname
, поэтому имя хоста сохраняетсяlocalhost
до тех пор, пока я не смогу работать, как/etc/init.d/hostname.sh start
только сеть начнет работать - поэтому при первом получении нового имени вам нужно загрузиться дважды - один раз, чтобы получить ваше имя хоста, и один раз, чтобы это имя было доступно, когда все запускается ...).источник
Вы не получаете свое имя хоста от сервера DHCP.
Вы можете отправить свое имя хоста на сервер, который может изменить назначенный вам IP-адрес. Вы можете изменить то, какое имя отправляется, отредактировав свое соединение с Network Manager (поле называется DHCP Client ID), или вы можете редактировать (как root)
/etc/dhcp/dhclient.conf
. Ищите строку, которая говорит:... и смени
<hostname>
на что хочешь.По умолчанию Ubuntu получает настройки DNS от маршрутизатора (если он их отправляет), но я подозреваю, что вы говорите о локальном DNS / mDNS, где вы можете получить доступ к другим компьютерам по их имени хоста. Это называется Ahavi или Zeroconf в Ubuntu и устанавливается по умолчанию.
Вы должны иметь возможность получить доступ к вашему компьютеру
<hostname>.local
источник
hostname
и домен, набравhostname -d
. так что это fqdn должно быть hostname.domainsend host-name "example.com";
целью получения определенного IP-адреса, вы также можете запросить его с помощьюrequest host-name;
.Если найдено, это может быть ошибка скриптов dhcpclient. http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html
Попробуй очистить $ old_host_name при продлении ip
Также статический файл / etc / hostname имеет приоритет перед dhcp-ответом, поэтому оставьте его пустым
Протестировано на Ubuntu 14.04 и сервере dnsmasq.
источник
Обратите внимание, что при использовании Ubuntu 18.04 сценарии встраивания больше не нужны. Если имя хоста установки установлено
localhost
в/etc/hostname
DHCP-клиенте, при запуске будет автоматически задано имя хоста, используя имя, выданное DHCP, если оно есть. При запускеhostnamectl
он будет указанlocalhost
как постоянное имя хоста, а все, что DHCP выдает как временное имя хоста.источник
Ответ зависит от того, используете ли вы статическую аренду на DHCP-сервере. Если да, то нет необходимости получать имя хоста из DNS. Вы можете изменить эту строку в решении d_inevitable
в
Но это должно происходить автоматически, если ваше имя хоста изначально установлено в localhost.localdomain, поэтому вам не нужно писать скрипт. Однако, если вы хотите установить полное имя хоста в полное доменное имя, вам нужно изменить скрипт d_inevitable на
Опять же, все это работает, только если вы используете статический лизинг.
источник
У меня недостаточно репутации, чтобы комментировать, но я бы хотел добавить свой ответ к предыдущему ответу, так как он почти решил проблему для меня, используя крючок dhclient.
Я обнаружил, что с использованием стандартного ISC DHCP-сервера вышеупомянутый хук выводит имя хоста с символом «.» символ точки в конце имени хоста по какой-то причине.
Итак, в предыдущем ответе вам может понадобиться «вырезать» посторонний период с помощью sed:
Станет:
источник