Compreendendo nomes de host

4

Recentemente, configurei um MTA em um VPS e, ao configurá-lo, percebi que estava confuso sobre o conceito e a implementação de nomes de host no Unix.

Eu tenho um sólido entendimento do DNS, e estou familiarizado com seu antecessor, o arquivo hosts , mas não tenho experiência com redes internas clássicas, pois sempre trabalhei com servidores diretamente conectados à Internet .

Existem muitas explicações contraditórias se pesquisarmos o assunto, então, em primeiro lugar, gostaria de pedir uma introdução completa aos nomes de host (não apenas nomes simples, mas complexos, em vários níveis), independente do DNS e da Internet, e então para uma explicação sobre sua relação com o DNS, e o perplexo termo "nome de domínio totalmente qualificado" (é o mesmo que no DNS, ou qualquer outra coisa).

Eu também gostaria de saber quais arquivos e comandos em uma típica caixa Unix (ou pelo menos no Debian / Ubuntu) estão desempenhando um papel no gerenciamento de nomes de host, especialmente:

  • o papel e a configuração correta de /etc/hostname (nome simples ou complexo? isso é algo com um registro A?)
  • o papel e a configuração correta de /etc/hosts em relação à configuração do nome do host (não é apenas para resolver? quais nomes e para onde apontar?)
  • quaisquer outros arquivos
  • como aplicar alterações ao nome do host sem reiniciar?

Respostas mais detalhadas são preferidas em relação àquelas que tentam simplificar o assunto, uma vez que há muito por aí do último tipo, que é a fonte da confusão.

    
por Joó Ádám 02.11.2014 / 15:54

2 respostas

3

De acordo com o comentário do slm, o nome do host do sistema é mantido na memória pelo kernel e a maneira correta de o software do usuário acessar é através da chamada do sistema gethostname() .

O nome do host padrão é, na verdade, compilado no kernel (linux), portanto, se você criar o seu próprio, poderá configurá-lo dessa maneira. Os kernels de distribuição geralmente usam localhost , eu acho (também pode estar vazio).

Como a maioria das pessoas provavelmente não deseja compilar um kernel apenas para definir o nome do host, há também uma chamada do sistema para configurá-lo, sethostname() ; isso é usado por comandos como hostname . Normalmente, durante a inicialização, um serviço init fará isso usando o valor de /etc/hostname . No entanto, isso não é obrigatório.

Não há restrições para o nome do host, mas observe que ele não é o mesmo que o nome de domínio totalmente qualificado (FQDN). O FQDN é o nome do host mais seu nome de domínio. Se você usar o método abaixo para definir o nome do domínio, provavelmente não deverá ter pontos no seu nome de host.

the role and correct setup of /etc/hosts in regard to setting the hostname (is it not just for resolving? what names and where to point?)

É para a resolução de DNS, mas Patrick tem uma explicação de como usá-lo para definir as obras de nomes de domínio aqui . É uma pesquisa no nome do host e, em seguida, uma pesquisa inversa usando o endereço IP; meio tortuoso e confuso comparado a apenas configurá-lo com hostname --fqdn , mas aparentemente mais comum.

Isso não impede que domainname retorne (none) , mas talvez isso seja irrelevante.

    
por 02.11.2014 / 16:45
2

Primeiro, o nome do host do sistema é inicializado durante o tempo de inicialização do sistema. O nome do host não é compilado com o kernel.

No Debian, /etc/init.d/hostname.sh é executado como parte dos scripts de inicialização. Este script lê o nome do host de /etc/hostname e usa o comando hostname para defini-lo.

O nome do host de um sistema é simplesmente se identificar. Mesmo que um sistema não esteja conectado à rede, o sistema precisa de um nome para si mesmo, principalmente para registro e outros fins. Por exemplo, todas as mensagens de log possuem nome de host. É apenas para se identificar.

O nome do host não tem nenhum relacionamento com /etc/hosts , ele usa completamente /etc/hostname .

O /etc/hostname deve conter apenas a parte hostname e não o FQDN.

Abaixo, você pode saber a diferença.

$ hostname
kannan

$ hostname -d
oongil.com

$ hostname -f
kannan.oongil.com

Agora a parte do FQDN.

O FQDN é necessário principalmente se o seu sistema faz parte de uma rede enorme e precisa ser identificado de maneira exclusiva.

O arquivo

/etc/hosts contém a tabela de consulta para nomes de host e o FQDN do sistema é mapeado aqui

127.0.1.1 kannan.oongil.com kannan

Nos sistemas baseados em Debian, o 127.0.1.1 é mapeado para o sistema FQDN. E assim, quando hostname -fqdn for invocado, o sistema consultará /etc/hosts para obter essa informação.

A ordem do conteúdo /etc/hosts é muito importante.

No caso, se você não quiser que /etc/hosts seja consultado para o FQDN, poderá alterar a ordem em /etc/nsswitch.conf .

Minha configuração é como abaixo, aqui /etc/hosts é consultado primeiro e depois o DNS.

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

Se você precisar entender mais sobre hostname e FQDN , consulte este Encadeamento de discussão Debian .

    
por 03.11.2014 / 11:20