Como definir o nome completo do host no CentOS 7.0?

19

Como defino o nome completo do host no CentOS 7.0?

Vi algumas postagens online, por exemplo, usando:

$ sudo hostnamectl set-hostname nodename.domainname

No entanto, a execução de nome de domínio não retorna nada:

$ domainname
(none)

Além disso:

$ hostname
nodename.domainname

Contudo,

$ hostname -f
hostname: Name or service not known
$ hostname -d
hostname: Name or service not known

Alguma saída de depuração:

$ cat /etc/hostname
nodename.domainname

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns
Chris Snow
fonte

Respostas:

30

Para definir o nome do host , use hostnamectlapenas o nome do host, desta forma:

hostnamectl set-hostname nodename


Para definir o arquivo de edição de nome de domínio (DNS)/etc/hosts e verifique se:

  1. Há uma linha <machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>
  2. Não existem outras linhas com <some IP> <hostname>, e isso inclui linhas com 127.0.0.1e ::1endereços (IPv6).

Observe que, a menos que você esteja usando o NIS, (none)é a saída correta ao executar o domainnamecomando.

Para verificar se seu nome de domínio DNS está definido corretamente, use o dnsdomainnamecomando e verifique a saída de hostnamevs hostname -f(FQDN).


NIS vs. domínio DNS

Esse problema me confundiu quando o vi pela primeira vez. Parece que o domainnamecomando antecede a popularidade da Internet. Em vez do nome de domínio DNS, ele mostra ou define o nome de domínio NIS (Serviço de Informações da Rede), também conhecido como YP (Páginas Amarelas) (um grupo de computadores que possuem serviços fornecidos por um servidor NIS mestre). Este comando simplesmente exibe o nome retornado pela getdomainname(2)função de biblioteca padrão. ( nisdomainnamee ypdomainnamesão nomes alternativos para este comando.)

Exibir o nome de domínio FQDN ou DNS

Para verificar o nome de domínio DNS (Internet), você deve executar o dnsdomainnamecomando ou hostnamecom as -d, --domainopções. (Observe que o dnsdomainnamecomando não pode ser usado para definir o nome de domínio DNS - ele é usado apenas para exibi-lo.)

Para exibir o FQDN (nome de domínio totalmente qualificado) do sistema, execute hostnameas -f, --fqdn, --longopções (da mesma forma, este comando não pode ser usado para definir a parte do nome de domínio).

Os comandos acima usam o resolvedor do sistema (implementado pela gethostbyname(3)função da biblioteca padrão, conforme especificado pelo POSIX) para determinar o nome de domínio DNS e o FQDN.

Resolução de nomes

Em sistemas operacionais modernos, como o RHEL 7, a hostsentrada /etc/nsswitch.confé usada para resolver nomes de host. Na sua máquina CentOS 7, esta linha está configurada como (padrão para o CentOS 7):

hosts:      files dns

Isso significa que, quando as funções do resolvedor pesquisam nomes de host ou endereços IP, primeiro procuram uma entrada no /etc/hosts arquivo e depois tentam os servidores DNS listados em /etc/resolv.conf.

Ao executar hostname -fpara obter o FQDN de um host, as funções do resolvedor tentam obter o FQDN para o nome do host do sistema. Se o host não estiver listado no /etc/hostsarquivo ou pelo servidor DNS relevante, a tentativa falhará e o hostnamereportará Name or service not known.

Quando hostname -dé executado para obter o nome do domínio, as mesmas operações são executadas e a parte do nome do domínio é determinada retirando a parte do nome do host e o primeiro ponto do FQDN.

Configure o nome do domínio

1. Atualize o servidor de nomes DNS relevante

No meu caso, eu já havia adicionado uma entrada para minha nova máquina CentOS 7 no servidor DNS da minha LAN local; assim, quando o FQDN não foi encontrado no /etc/hostsarquivo quando executei hostnamecom a opção -dou -f, os serviços DNS locais puderam resolva completamente o FQDN para o meu novo nome de host.

2. Use o /etc/hostsarquivo

Se o servidor DNS não tiver sido configurado, o nome de domínio totalmente qualificado poderá ser especificado no /etc/hostsarquivo. A maneira mais comum de fazer isso é especificar o endereço IP principal do sistema seguido por seu FQDN e seu nome abreviado de host. Por exemplo,

172.22.0.9  nodename.domainname nodename

Trecho da hostnamepágina do manual

Você não pode alterar o FQDN com hostnameou dnsdomainname.

O método recomendado para definir o FQDN é tornar o nome do host um alias para o nome completo usando /etc/hosts,DNS ou NIS. Por exemplo, se o nome do host for "ursula", pode haver uma linha na /etc/hostsqual se lê:

27.0.1.1    ursula.example.com ursula

Tecnicamente: O FQDN é o nome que getaddrinfo (3) retorna para o nome do host retornado por gethostname (2). O nome do domínio DNS é a parte após o primeiro ponto.

Portanto, depende da configuração do resolvedor (geralmente em /etc/host.conf) como você pode alterá-lo. Normalmente, o arquivo hosts é analisado antes do DNS ou NIS, portanto, é mais comum alterar o FQDN /etc/hosts.

Anthony G - justiça para Monica
fonte
Obrigado pela sua resposta. Atualizei a pergunta - infelizmente o hostname -fcomando não funciona no meu CentOS vm.
31515 Chris
@SHC Você pode editar sua pergunta para incluir também o conteúdo /etc/hostnamee a saída de grep ^hosts: /etc/nsswitch.conf? Eu não sei muito sobre Network Manager mas eu também notei que minha /etc/NetworkManager/NetworkManager.confcontém uma linha em sua [keyfile]seção: hostname=<nodename>.
Anthony G - justiça para Monica
1
@SHC Desde então, estou pesquisando a questão e revi radicalmente minha resposta; Agora, ele deve responder à sua pergunta de maneira mais abrangente.
Anthony G - justice para Monica
O lede a esta resposta é inconsistente com o corpo. hostnamectl set-hostname nodename.domainnamese não definir o nome de domínio DNS (e não é que ele define o nome de domínio NIS quer).
sourcejedi
@sourcejedi Não tenho tempo no momento, mas tentarei esclarecer minha resposta quando tiver a chance.
Anthony G - justiça para Monica
1

No Centos7, usar nmtui para definir o nome do host e fornecer o formato nodename.domainname / FQDN está fornecendo resultados consistentes. nome do host [d / f / s] todos fornecem os resultados esperados corretos. Não é armazenado no /etc/resolv.conf OR / etc / hosts. Mas o FQDN é gravado em / etc / hostname como uma entrada de linha única.

Ponn Dk
fonte
0

Para mim, o arquivo / etc / hostname continha o FQDN em vez do nome do host (por exemplo, nome do host em vez do nome do host.exemplo.com). Depois que removi o domínio do nome do host em / etc / hostname, o comando 'hostname -f' funcionou normalmente.

Eu acho que isso foi introduzido quando eu instalei a VM do CentOS 7. Eu deveria ter digitado apenas o nome do host, não o nome de domínio totalmente qualificado.

KenR
fonte