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:
- Existe uma linha
<machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>
- NÃO há outras linhas com
<some IP> <hostname>
, e isso inclui linhas com endereços127.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
ordnsdomainname
.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
.