Como definir o nome completo do host no CentOS 7.0?

17

Como eu defino o nome completo do host no CentOS 7.0?

Já vi algumas postagens on-line, por exemplo, usando:

$ sudo hostnamectl set-hostname nodename.domainname

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

$ domainname
(none)

Além disso:

$ hostname
nodename.domainname

No entanto,

$ 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
    
por Chris Snow 31.10.2015 / 10:21

3 respostas

25

Para definir o hostname do use hostnamectl , mas apenas com o nome do host, assim:

hostnamectl set-hostname nodename


Para definir o nome de domínio (DNS) , edite o arquivo /etc/hosts e verifique se:

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

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

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


NIS vs. domínio DNS

Esse problema me confundiu quando me deparei com ele pela primeira vez. Parece que o comando domainname é anterior à popularidade da Internet. Em vez do nome de domínio DNS, ele mostra ou define o NIS (Serviço de Informações da Rede) do sistema nome de domínio 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 função de biblioteca padrão getdomainname(2) . ( nisdomainname e ypdomainname são nomes alternativos para este comando.)

Exibe o nome de domínio FQDN ou DNS

Para verificar o nome de domínio DNS (Internet), você deve executar o comando dnsdomainname ou hostname com as opções -d, --domain . (Observe que o comando dnsdomainname 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 hostname com as opções -f, --fqdn, --long (da mesma forma, esse 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 função gethostbyname(3) da biblioteca padrão, conforme especificado pelo POSIX) para determinar o nome de domínio DNS e o FQDN.

Resolução de nomes

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

hosts:      files dns

Isso significa que quando as funções do resolvedor procurarem nomes de host ou endereço IP, elas primeiro verificam se há uma entrada no arquivo /etc/hosts e, em seguida, tentam o servidor DNS que estão listados em /etc/resolv.conf .

Ao executar hostname -f para 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 arquivo /etc/hosts ou pelo servidor DNS relevante, a tentativa falhará e hostname informará que Name or service not known .

Quando hostname -d é executado para obter o nome do domínio, as mesmas operações são realizadas e a parte do nome do domínio é determinada pela remoção da 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 do CentOS 7 no servidor DNS para minha LAN local, assim quando o FQDN não foi encontrado no arquivo /etc/hosts quando eu corri hostname com a -d ou -f , os serviços DNS locais puderam resolver totalmente o FQDN para meu novo nome de host.

2. Use o arquivo /etc/hosts

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

172.22.0.9  nodename.domainname nodename

Trecho da página de manual hostname

You cannot change the FQDN with hostname or dnsdomainname.

The recommended method of setting the FQDN is to make the hostname be an alias for the fully qualified name using /etc/hosts, DNS, or NIS. For example, if the hostname was "ursula", one might have a line in /etc/hosts which reads:

27.0.1.1    ursula.example.com ursula

Technically: The FQDN is the name getaddrinfo(3) returns for the host name returned by gethostname(2). The DNS domain name is the part after the first dot.

Therefore it depends on the configuration of the resolver (usually in /etc/host.conf) how you can change it. Usually the hosts file is parsed before DNS or NIS, so it is most common to change the FQDN in /etc/hosts.

    
por 31.10.2015 / 14:13
1

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

    
por 29.08.2018 / 10:23
0

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

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

    
por 02.02.2017 / 20:31