É possível alias um nome de host no Linux?

90

É possível alias um nome de host no Linux?

Foi solicitado por jmillikin em vários fóruns do Ubuntu da seguinte maneira:


É possível criar um alias de nome de host? Mais ou menos como / etc / hosts, mas com outros nomes de host em vez de endereços IP. Para que, com um arquivo como este, você possa executar ping em "fakehost1" e ser re-mapeado para "realhost" e, em seguida, "realhost" seja resolvido para um endereço IP.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Alguém respondeu sobre ssh, mas não sobre ping, etc. Meu principal objetivo é usá-lo como um apelido para um servidor Subversion . No meu caso, o realhost está sob um endereço IP dinâmico. Portanto, o alias "/ etc / hosts" não funciona. Eu quero acessar meu servidor Subversion como em svn://my_svnserver/my_reposvez de svn://realhost/my_repos.

Peter Mortensen
fonte
Eu acho que posso estar perdendo alguma coisa. Você está dizendo que não poderia ter o / etc / hosts parecido com 10.0.3.4 some.host.org another.domain.com Você precisa usar uma referência por algum motivo programático?
jim_m_somewhere

Respostas:

56

Para aqueles que não têm uma conta nos fóruns (ou não desejam fazer login):

se o seu problema principal não for o ping, mas o ssh, você poderá criar / editar o seu ~ / .ssh / config adicionando linhas como estas:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3
Xiong Chiamiov
fonte
1
A parte do nome do host precisa estar em uma nova linha. Aqui está um bom tutorial sobre como fazer um arquivo de configuração como esta: mattryall.net/blog/2008/06/ssh-favourite-hosts
Código Commander
1
boa solução alternativa, obrigado. Mas é claro que a melhor solução seria usar cnames no DNS
Yura
31

O Linux suporta aliasing configurando a variável env HOSTALIASES.

echo "fakehost realhost" > /etc/host.aliases
echo "export HOSTALIASES=/etc/host.aliases" >> /etc/profile
. /etc/profile

então você pode

ping fakehost

O ping do NB requer que você configure isso como root, mas você pode fazê-lo como qualquer usuário para qualquer aplicativo que seja executado como esse usuário. ping suids para fazer root.

teknopaul
fonte
3
não funcionou para mim no Ubuntu 12.04 :(
Dimitry K
3
As HOSTALIASES funcionam apenas para executáveis ​​que não possuem o sinalizador setuid definido. Portanto, não funcionará para ping (a menos que você já esteja root ao executar o ping). Eu acho que isso é feito para evitar que os executáveis ​​setuid se conectem a um host diferente do que ele pretendia.
Boris
1
Também não funciona para onda
Benubird
7
raramente acabará no resultado esperado. HOSTALIASES funciona apenas para aplicativos que usam getaddrinfo (3) ou gethostbyname (3) - Isso significa que funcionará para aplicativos que tentam resolver explicitamente o nome do host por uma chamada de sistema específica: nunca é o caso. ver unix.stackexchange.com/questions/10438/... então a única solução é DNS local (dnsmasq)
Nadir
1
Parece que esse truque está obsoleto. As funções gethostbyname * (), gethostbyaddr * (), herror () e hstrerror () estão obsoletas. Se o seu sistema executar o DNSMasq localmente, você poderá usar o alias para qualquer resolução que use o DNS.
teknopaul
24

Você pode configurar isso no servidor DNS, os registros CNAME permitem que uma máquina seja conhecida por mais de um nome de host. Portanto, adicione registros CNAME ao seu servidor DNS assim:


fakehost1 IN CNAME realhost 
fakehost2 IN CNAME realhost 
fakehost3 IN CNAME realhost 

Ali Mezgani
fonte
3
um servidor DNS leve para tentar seria dnsmasq(também serve DHCP).
sybreon 14/09/09
17

Costumo fazer isso com variáveis ​​de ambiente. Eu sei que isso só funciona para a linha de comando, mas é onde eu geralmente anseio por aliases de nome de host (trabalhei com várias contas de supercomputador, todas com URLs longas). Aqui está um exemplo, se você estiver usando o BASH. Em ~ / .bashrc:

exportar fakehost = "long.ass.annoying.url.org"

então, em uma casca fresca:

ssh christopher @ $ fakehost


fonte
11

A única maneira de fazer isso é se você tiver seu próprio servidor DNS local.

theotherreceive
fonte
1
Sim, agora parece a única solução. Obrigado. Não é possível votar, pois não tenho reputação suficiente.
Se o problema do endereço IP em constante mudança de uma conexão DSL ou discada é o problema, o dyndns é uma solução melhor, IMHO.
Sven
Não, não é uma solução melhor. Depois que o servidor tiver um nome de host tratado por outra coisa, o OP precisará de um CNAME para o primeiro nome de host. DYNDNS e similares dependem do host que informa ao servidor DNS que seu IP foi alterado.
theotherreceive
5

O uso de /etc/hosts.aliases é um recurso padrão das bibliotecas de resolvedores de ligação. É mais robusto do que adicionar entradas ao / etc / hosts e pode ser usado se você não pode adicionar CNAMES ao seu DNS (não tem acesso a ele).

Em geral, a melhor prática é usar CNAMES no DNS com a PESQUISA apropriada definida em /etc/resolv.conf.

A atualização do / etc / hosts não é muito robusta, pois as entradas devem ser mantidas em sincronia com as alterações de IP. Isso realmente funciona em pequena escala ou quando você está usando um serviço de nomes para distribuir o mapa de hosts (por exemplo, via ldap).

Outra solução pode ser o DNSMasq http://en.wikipedia.org/wiki/Dnsmasq

Tom Hallam
fonte
Tentei usar o /etc/hosts.aliases no CENTOS 6, mas esse recurso não parece funcionar. Também não consigo encontrar nenhuma documentação sobre seu uso ou existência. Onde eu deveria estar olhando?
Mdpc
5

Você precisará de um servidor dyndns que mapeie seu endereço IP atual para um nome de host. Você informará esse servidor sobre seu endereço IP atual sempre que fizer login e ele atualizará seu registro de nome de host.

Sven
fonte