Existe uma maneira de fazer isso com um pequeno script para um gancho dhcp, conforme descrito aqui .
Crie um novo arquivo:
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
e cole o seguinte código:
#!/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
Substitua eth0
e wlan0
pelos nomes das interfaces das quais você deseja obter o nome do host. Na maioria dos casos eth0
e wlan0
deve permanecer o mesmo.
Verifique se é legível ...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
Isso é tudo. Na próxima resposta dhcp, o nome do host será atualizado automaticamente.
host
comando) para extrair o nome do host associado ao endereço IP atribuído. Na verdade, os servidores DHCP podem definir explicitamente uma opção de nome de host (opção 12), que pode ser diferente do nome de host que você obtém de uma consulta DNS no IP (isso também pode falhar, se nenhum registro PTR para o IP existir no DNS )Você pode obter seu nome de host no servidor DHCP - faz parte da especificação DHCP.
https://tools.ietf.org/html/rfc1533#section-3.14
"Esta opção especifica o nome do cliente"
fonte
A resposta de d_inevitable quase resolveu meu problema, mas não completamente. O problema era que, embora:
O servidor DHCP estava enviando um nome de host (adicionando o
no dhcpd.conf) e verifiquei capturando e analisando o conteúdo da oferta DHCP com o wireshark
O cliente DHCP esperava o nome do host do servidor DHCP (adicionando
no dhclient.conf)
O cliente não estava recebendo um novo nome de host (facilmente verificado digitando
no terminal e obtendo o nome do host antigo ou nenhum nome do host, se eu tivesse excluído o conteúdo / arquivo). Como resultado, a solução proposta por d_inevitable estava apenas copiando uma sequência vazia.
Para resolver isso, apliquei uma solução grosseira, que geralmente não deve ser seguida, a menos que você esteja desesperado para fazê-la funcionar, como eu.
Primeiro, abra com capacidade de edição o script de controle do cliente DHCP:
Lá, você terá que localizar a função
Basta usar a pesquisa e ela deve aparecer. Agora, pelo menos no meu computador, essa função tem três condições if-then-else, encapsuladas uma à outra:
Agora, o que você precisa é forçar a atribuição do novo nome de host ao seu host, não importa o quê. Portanto, você deseja comentar os dois encapsulados se-então-outro. O resultado deve ser algo como:
Agora o d_inevitable ou isso deve funcionar como esperado. Espero que ajude se você estiver em uma frustração desesperada semelhante à minha.
fonte
A resposta de Oli é comprovadamente falsa ("Você não obtém seu nome de host do servidor DHCP"), como evidenciado pelas outras respostas aqui e também pela minha experiência recente em um sistema RHEL7. Esse sistema recebeu seu nome de host do servidor DHCP.
E, de fato, há coisas nos arquivos de configuração do DHCP que devem fazer isso acontecer. Por exemplo:
Deveria dizer ao host que seu nome é host4.
Como se vê, o dhclient do isc NÃO APOIA APOIAR ISSO!
No entanto, o dhcpcd5, pronto para uso. Pare o dhclient, instale o dhcpcd5, execute o dhcpcd, renove sua concessão e, poof, o nome do host no seu cliente DHCP está definido como o nome enviado do servidor DHCP. Sem
dhclient-exit-hooks.d
scripts, sem invasõesrc.local
, nada.Como nota final, passei muito tempo tentando fazer isso funcionar usando o dhclient do ISC. Absolutamente nenhuma alegria, mesmo quando o servidor envia o nome do host.
Minha solução inicial para o problema foi escrever um código atraente
rc.local
para detectar quando a rede surgiu e forçar uma (no meu caso) uma pesquisa/etc/hosts
para obter o nome do host e depois executarhostname
com esse nome de host. Funciona, mas até a rede aparecer, seu nome de host provavelmente está errado (quando eu implanto um host pela primeira vez, removo/etc/hostname
, então o nome do host ficalocalhost
até eu poder executar/etc/init.d/hostname.sh start
uma vez que a rede é criada - portanto, ao obter um novo nome pela primeira vez, é necessário inicializar duas vezes - uma vez para obter seu nome de host e uma vez para ter esse nome disponível quando tudo for iniciado ...).fonte
Você não obtém seu nome de host do servidor DHCP.
Você pode enviar seu nome de host para o servidor, o que pode alterar o IP atribuído. Você pode alterar o nome enviado editando sua conexão do Network Manager (o campo é chamado de DHCP Client ID) ou pode editar (como raiz)
/etc/dhcp/dhclient.conf
. Procure a linha que diz:... e mude
<hostname>
para o que quiser.Por padrão, o Ubuntu obterá as configurações de DNS do roteador (se as enviar), mas desconfio que você esteja falando de DNS / mDNS local onde é possível acessar outros computadores pelo nome do host. Isso é chamado Ahavi ou Zeroconf no Ubuntu e é instalado por padrão.
Você deve poder acessar seu computador
<hostname>.local
fonte
hostname
e domínio digitandohostname -d
. por isso é fqdn deve ser hostname.domainsend host-name "example.com";
objetivo de obter um endereço IP específico, você também pode solicitá -lorequest host-name;
.Se encontrado, pode ser um erro de script do dhcpclient. http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html
Tente limpar $ old_host_name na renovação de ip
Também estático / etc / hostname parece ter prioridade sobre a resposta dhcp, então deixe em branco
Testado no ubuntu 14.04 e no servidor dnsmasq.
fonte
Observe que, ao usar o Ubuntu 18.04, os scripts de conexão não são mais necessários. Se o nome do host da instalação estiver definido como
localhost
no/etc/hostname
cliente DHCP, ele será definido automaticamente na inicialização, usando o nome emitido pelo DHCP, se presente. Ao executá-hostnamectl
lo, ele será listadolocalhost
como o nome do host permanente e quaisquer problemas de DHCP como um nome de host transitório.fonte
A resposta depende se você está usando concessões estáticas ou não no servidor DHCP. Se você é, não é necessário obter o nome do host do DNS. Você pode alterar esta linha na solução de d_inevitable
para
Mas isso deve acontecer automaticamente se o nome do host estiver originalmente definido como localhost.localdomain, para que você não precise escrever um script. No entanto, se você deseja definir o nome do host para o FQDN, precisará alterar o script de d_inevitable para
Novamente, tudo isso funciona apenas se você estiver usando concessões estáticas.
fonte
Não tenho reputação suficiente para comentar, mas eu gostaria de retroceder na resposta anterior, pois quase resolveu o problema para mim usando um gancho dhclient.
Descobri que, usando o servidor DHCP ISC padrão por algum motivo, o gancho mencionado acima gera um nome de host com um '.' caractere de ponto final no final do nome do host por algum motivo.
Portanto, na resposta anterior, você pode precisar "cortar" o período estranho com um sed:
Se tornaria:
fonte