Um sistema de computador (Linux) possui apenas um nome de host?

15

hostname é usado para exibir o nome DNS do sistema e para exibir ou definir seu nome de host ou nome de domínio NIS.

Um sistema de computador (Linux) possui apenas um nome de host?

Na hospedagem virtual, vários nomes de host podem ser resolvidos para diferentes diretórios raiz em um servidor da web. Se um sistema de computador (Linux) pode ter apenas um nome de host, como é possível a hospedagem virtual?

Obrigado.

StackExchange for All
fonte
Os registros DNS A ou AAA apontam para o mesmo endereço IP para vários domínios. O nome do host da máquina não é necessariamente importante.
RubberStamp 11/02/19
(1) A saída hostnamejá foi usada na resolução do nome do host para o endereço IP? (2) A significa endereço IPv4, AAAA IPv6. O que é AAA?
StackExchange for All
serviços mDNS, como avahidependem do nome do host da máquina. Nesse caso, hostname.localresolveria o endereço IP local da máquina. Vejo que alguém escreveu uma resposta que é uma expansão do meu primeiro comentário ... muito simultânea para as notificações do meu navegador.
RubberStamp 11/02/19
AAA é um erro de digitação curto 'A'
RubberStamp 11/02/19
Host virtual não tem nada a ver com o nome do host. Depende apenas do comportamento do servidor da web. O servidor responde de maneira diferente ao campo Host diferente do cabeçalho da solicitação HTTP. Eu não acho que um servidor Web típico faria algo relacionado ao DNS ou nome de host para oferecer funcionalidade de host virtual.
炸鱼薯条德里克

Respostas:

26

Sim e não. Existem duas coisas distintas chamadas nomes de host.

O nome do host "interno" é basicamente uma string mantida pelo kernel. É aquele retornado pelo hostnamecomando (ou pela gethostname()chamada) e é único dentro de um sistema (*) .

É usado principalmente quando um programa deseja gerar algum identificador para o sistema em que está sendo executado. Por exemplo, \hno Bash se PS1expande para o nome do host. Da mesma forma, os arquivos de log no estilo syslog também incluem o nome do host nas entradas de log.

(* Embora, como comenta Stephen Kitt, os namespaces possam ser usados ​​para mostrar nomes de host diferentes para processos no mesmo sistema. Isso é usado principalmente para contêineres, que tentam agir como se fossem sistemas distintos.)

Depois, há também nomes DNS que são usados ​​por outros sistemas para procurar o endereço IP de outro. Pode haver mais de um nome DNS que aponte para o mesmo endereço IP e, portanto, o mesmo host.

O nome do host interno e os nomes DNS não precisam ser os mesmos. Suponha que alguém tenha um servidor da web que eles decidiram ligar orange(*) , com o endereço IP 192.0.2.9. Poderia servir dois domínios diferentes e o DNS seria configurado para ter www.example.orge www.example.comambos apontam para 192.0.2.9, enquanto o nome do host interno do sistema pode ser orange.example.orgou apenas orange. Nesse caso, a configuração do DNS normalmente também teria uma pesquisa inversa no 192.0.2.9ponto de volta ao nome orange.example.org, mas não há nada para forçar isso.

(* porque eles gostam de nomear seus servidores como frutas. Alguém pode usar webserver1isso, mas o ponto é que ele não precisa ser nomeado como um dos domínios reais.)

Além disso, a hospedagem virtual exige que o navegador informe ao servidor da Web o nome do site que ele tentou acessar. Caso contrário, o servidor não saberia qual site virtual o cliente tentou acessar. HTTP tem o Hostcabeçalho para isso.


O que atrapalha a distinção entre um nome DNS e o nome do host interno é o protocolo mDNS (implementado, por exemplo, pelo daemon avahi ) e outros protocolos de descoberta. O mDNS possibilita que os hosts consultem todos os outros hosts na mesma rede em busca de informações de nome e tornem seus próprios nomes de host visíveis em outros hosts sem configurá-los explicitamente no DNS.

ilkkachu
fonte
Obrigado. (1) "a configuração do DNS normalmente teria 192.0.2.9 apontado para o nome orange.example.org" Não é possível resolver o endereço IP de um determinado nome de host, por que o contrário? (2) A saída hostnamejá foi usada na resolução do nome do host para o endereço IP?
StackExchange for All
(2) ... Ao configurar uma rede wifi local em sua casa a partir de um ISP usando um roteador e modem, as máquinas na rede podem ser identificadas pelas saídas de seus hostnamecomandos, correto? O roteador age como um DNS para resolver as saídas de hostnameendereços IP privados na rede?
StackExchange for All
2
quanto a (1), também há pesquisas reversas que pegam o endereço IP e retornam um nome. (Para um sistema com um único nome e um único endereço, que você gostaria de ter os dois resolve para o outro, apenas por uma questão de clareza)
ilkkachu
3
Redes pequenas podem estar usando mDNS. Para melhor ou pior, permite que os proprietários do sistema escolham seus próprios nomes de host, acessíveis por outros sistemas na rede local, sem a necessidade de se registrar em um servidor DNS.
Mark Plotnick
2
Em muitas redes domésticas, o roteador local atua como um resolvedor de DNS. Os hosts enviam seus nomes de host quando solicitam um endereço usando DHCP, e o roteador lembra esse nome e o resolve para todos os hosts na rede. Como Mark e RubberStamp mencionam, também há Bonjour (implementado em Avahi) que permite a descoberta de serviços na LAN (impressoras em particular). Observe também que os hosts podem ter vários endereços IP e os nomes de host agora estão com espaço para nome, para que os processos possam ver nomes de host diferentes no mesmo host.
Stephen Kitt
7

Um sistema de computador (Linux) possui apenas um nome de host?

Não.

[Ignorarei completamente que qualquer pessoa possa dar ao seu host o nome que desejar, tendo um registro DNS apontando para seu endereço, ou que você possa ter mais de um apelido para ele /etc/hostsou quaisquer considerações filosóficas sobre o nome de um nome realmente é ]

Em um sistema linux, o nome do host é simplesmente um recurso por processo (o "espaço de nome UTS") que é herdado por seus filhos por padrão, mas pode ser separado de unshare(2)ou clone(2)com o CLONE_NEWUTSsinalizador. Você deve olhar para onamespaces(7) manual.

Assim como pids, números de portas, pontos de montagem etc. o nome do host não é mais um identificador global e pode ser virtualizado da mesma forma que o espaço de endereço (memória virtual) ou a tabela de descritores de arquivo de um processo.

Na hospedagem virtual, vários nomes de host podem ser resolvidos para diferentes diretórios raiz em um servidor da web. Se um sistema de computador (Linux) pode ter apenas um nome de host, como é possível a hospedagem virtual?

Hospedagem virtual é algo completamente diferente, e geralmente é feito configurando um registro DNS curinga (por exemplo, *.foo.com=> 13.13.13.13) com um servidor Web executando 13.13.13.13e servindo diferentes diretórios / recursos com base no valor do Host:cabeçalho http [1] (que é altamente configurável ; a maioria dos servidores da Web pode servir recursos diferentes com base em qualquer cabeçalho http, não apenasHost: ). Em tudo isso, o sistema operacional do sistema em que o servidor da web está sendo executado não faz parte.

[1] ou no valor da indicação do nome do servidor no caso de https, que permite que o mesmo servidor da Web use certificados diferentes para diferentes hosts virtuais.

Tio Billy
fonte
Eu tenho que discordar de você sobre isso. Para hospedagem virtual, geralmente temos um conjunto específico de registros cname apontando para o host único. Não usamos um registro DNS curinga, pois temos muitos sistemas no domínio que precisam de hosts virtuais. Excluindo os namespaces UTS (quão amplamente usado é esse?), Você tem o hostnamectl relatando um único nome de host para um determinado servidor. DNS e hostnamectl são ortogonais e têm pouco a ver um com o outro.
doneal24
1
@ DougO'Neal Do que você está discordando? Esses registros DNS curinga são usados ​​da maneira que eu os descrevo? Eles são muito usados ​​assim (desculpe o trocadilho), quer você goste ou não. Que a informação uts é virtualizada por processo no linux? Simplesmente é assim. Quanto à ideia de que os namespaces são usados ​​apenas / a serem utilizados por soluções de contêineres / virtualização enlatadas (como sugerido na outra resposta), desculpe, mas isso é "apenas as meninas brincam com bonecas" ou "as transmissões manuais são usadas apenas em caminhões pesados" qualidade ;-)
Tio Billy
1

Você geralmente define um único nome de host em / etc / hostname. E você define muitos nomes de domínio em / etc / hosts.

Os espaços de nome UTS permitem que um único sistema pareça ter diferentes nomes de host e domínio para diferentes processos. Para mais informações: https://en.wikipedia.org/wiki/Linux_namespaces . Portanto, é absolutamente possível ter vários nomes de host e nomes de domínio para o mesmo sistema. Por exemplo, o contêiner do docker dentro do mesmo host possui um nome de host diferente do sistema do host.

Uddhav Gautam
fonte