Как получить имя хоста с сервера DHCP

Мне удалось установить pdftk из хитрых (17.10) пакетов deb. Загрузите и затем установите в этом порядке:

libgcj-common libgcj17 pdftk

Лучше всего установить gcc-6-base, чтобы избежать ошибок зависимостей, если вы делаете это из cli. [!d8 ]

Это должно сделать трюк ... пока.

1
задан 8 January 2015 в 01:36

6 ответов

Вы можете получить свое имя хоста от вашего DHCP-сервера - это часть спецификации DHCP.

https://tools.ietf.org/html/rfc1533#section-3.14

"Этот параметр указывает имя клиента"

4
ответ дан 25 May 2018 в 14:12

Вы не получаете свое имя хоста от сервера DHCP.

Вы можете отправить свое имя хоста на сервер, что может изменить IP-адрес, который вы назначили. Вы можете изменить, какое имя отправлено, либо отредактировав соединение с сетевым менеджером (поле называется DHCP Client ID), либо вы можете редактировать (с правами root) /etc/dhcp/dhclient.conf. Посмотрите на строку, которая говорит:

send host-name "<hostname>";

... и измените <hostname> на все, что вам нравится.

По умолчанию Ubuntu получит свое Параметры DNS с маршрутизатора (если он их отправляет), но я подозреваю, что вы говорите о локальных DNS / mDNS, где вы можете получить доступ к другим компьютерам по имени своего хоста. Это называется Ahavi или Zeroconf в Ubuntu, и оно установлено по умолчанию.

Вы должны иметь доступ к вашему компьютеру с помощью <hostname>.local

2
ответ дан 25 May 2018 в 14:12
  • 1
    У меня в сети есть сервер dns и dhcp (windows 2008). Ant назначает имя хоста и имя DNS для каждого ip, но ubuntu не обновляет имя хоста и имя DNS. Я должен уметь видеть это назначенное имя хоста, набрав hostname и домен, набрав hostname -d. так что это fqdn должно быть hostname.domain – Oguz Bilgic 17 February 2012 в 07:31
  • 2
    AFAIR, если клиент не подключен к домену Windows, сервер DHCP Windows не будет динамически обновлять записи Windows DNS. Я не уверен, хотя ... зависит от конфигурации Windows DHCP / DNS – oddfellow 18 February 2012 в 02:54
  • 3
    По умолчанию 12.04 имеет эту строку «отправить имя хоста = gethostname (); " и вы можете увидеть это значение, набрав " hostname " в командной строке. По умолчанию это не повлияет на сеть Windows. По первому вопросу. – Móż 22 November 2013 в 09:09
  • 4
    Хотя zeroconf установлен по умолчанию, он ужасно ненадежный. Я искренне удивлен, когда это работает, поскольку pinging hostname или hostname.local редко приводит к успеху, хотя ничто не изменилось в моей сети в течение нескольких месяцев. – Cerin 18 April 2015 в 22:14
  • 5
    Это не совсем так. Хотя вы можете отправить ваше имя хоста на DHCP-сервер с send host-name "example.com";, чтобы получить определенный IP-адрес, вы также можете запросить один с request host-name;. – Dmitry Grigoryev 17 November 2015 в 14:33

Ответ d_inevitable почти решил мою проблему, но не полностью. Проблема заключалась в том, что хотя:

DHCP-сервер отправил имя хоста (добавив
option host name 'client1' 
в dhcpd.conf), и я действительно проверил его, захватив и проанализировав содержимое предложения DHCP с помощью wirehark Клиент DHCP ожидал имя хоста с сервера DHCP (добавив
request host-name 
в dhclient.conf)

Клиент не получал новое имя хоста (его легко проверить, набрав

hostname

в терминале и получить старое имя хоста или без имени хоста, если я удалил содержимое / файл). В результате предлагаемое решение d_inevitable только копировало пустую строку.

Чтобы решить эту проблему, я применил решение crud, которое, как правило, не должно выполняться, если вы не отчаянно пытаетесь заставить его работать, как я был.

Сначала открываем с возможностью редактирования сценарий управления клиентом DHCP:

sudo vi /sbin/dhclient-script

Там вам нужно будет найти функцию

set_hostname()

Просто используйте поиск, и он должен появиться. Теперь, по крайней мере на моем компьютере, эта функция имеет три условия if-then-else, инкапсулированные друг другу:

# установить имя хоста set_hostname () {local current_hostname
if [ -n "$new_host_name" ]; then
    current_hostname=$(hostname)

    # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP
    if [ -z "$current_hostname" ] ||
       [ "$current_hostname" = '(none)' ] ||
       [ "$current_hostname" = 'localhost' ] ||
       [ "$current_hostname" = "$old_host_name" ]; then
       if [ "$new_host_name" != "$old_host_name" ]; then
           hostname "$new_host_name"
       fi
    fi
fi }
[d17 ] Теперь вам нужно принудительно назначить новое имя хоста вашему хосту, несмотря ни на что. Поэтому вы хотите прокомментировать два инкапсулированные if-then-else. Результат должен выглядеть примерно так:

# установить имя хоста set_hostname () {local current_hostname

if [ -n "$new_host_name" ]; then
    current_hostname=$(hostname)

    # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP
    #if [ -z "$current_hostname" ] ||
    #   [ "$current_hostname" = '(none)' ] ||
    #   [ "$current_hostname" = 'localhost' ] ||
    #   [ "$current_hostname" = "$old_host_name" ]; then
    #   if [ "$new_host_name" != "$old_host_name" ]; then
           hostname "$new_host_name"
    #   fi
    #fi
fi }

# установить имя хоста set_hostname () {local current_hostname

2
ответ дан 25 May 2018 в 14:12

Если обнаружено, что может быть ошибкой скриптов dhcpclient. http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html

Попробуйте очистить $ old_host_name на ip renew

[d3 ] echo unset old_host_name> /etc/dhcp/dhclient-enter-hooks.d/unset_old_hostname

Также статическое / etc / hostname, по-видимому, имеет приоритет над ответом dhcp, поэтому оставьте его пустым

echo unset old_host_name> /etc/dhcp/dhclient-enter-hooks.d/unset_old_hostname

> / etc / hostname

1
ответ дан 25 May 2018 в 14:12

Ответ зависит от того, используете ли вы статические лизинг на своем DHCP-сервере. Если это так, нет необходимости получать имя хоста из DNS. Вы можете изменить эту строку в решении d_inevitable

hostname=$(host $new_ip_address | cut -d ' ' -f 5)

на

hostname=${new_host_name}

Но это должно произойти автоматически, если ваше имя хоста первоначально установлено на localhost.localdomain, поэтому вы не нужно написать сценарий. Однако, если вы хотите установить имя хоста для полного доменного имени, вам нужно будет сменить сценарий d_inevitable на

hostname=${new_host_name}.${new_domain_name}

. И все это работает только в том случае, если вы используете статические лизинг.

0
ответ дан 25 May 2018 в 14:12

Не хватает репутации для комментариев, но мне хотелось бы ответить на предыдущий ответ, поскольку он почти решил проблему для меня, используя крюк dhclient.

Я обнаружил, что с использованием стандартного DHCP-сервера ISC по какой-либо причине вышеупомянутый хост выводит имя хоста с именем «.» (! d1)

Итак, в предыдущем ответе вам может понадобиться «вырезать» посторонний период с помощью sed:

hostname=$(host $new_ip_address | cut -d ' ' -f 5)

Would стать:

hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -e "s/\.$//g")
0
ответ дан 25 May 2018 в 14:12

Другие вопросы по тегам:

Похожие вопросы: