¿Es posible alias un nombre de host en Linux?

90

¿Es posible alias un nombre de host en Linux?

Jmillikin lo ha pedido en varios foros de Ubuntu de la siguiente manera:


¿Es posible crear un alias de nombre de host? Algo así como / etc / hosts, pero con otros nombres de host en lugar de direcciones IP. De modo que con un archivo como este, podría hacer ping a "fakehost1", y se volvería a asignar a "realhost", y luego "realhost" se resolvería a una dirección IP.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Alguien ha respondido sobre ssh, pero no sobre ping, etc. Mi propósito principal es usarlo como un alias para un servidor Subversion . En mi caso, realhost está bajo una dirección IP dinámica. Entonces, el alias "/ etc / hosts" no funciona. Quiero acceder a mi servidor Subversion como en svn://my_svnserver/my_reposlugar de svn://realhost/my_repos.

Peter Mortensen
fuente
Creo que me falta algo. ¿Está diciendo que no podría tener / etc / hosts como 10.0.3.4 some.host.org another.domain.com Tiene que usar una referencia por alguna razón programática?
jim_m_somewhere

Respuestas:

56

Para aquellos que no tienen una cuenta en los foros (o no desean iniciar sesión):

si su problema principal no es hacer ping sino ssh, puede crear / editar su ~ / .ssh / config agregando líneas como estas:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3
Xiong Chiamiov
fuente
1
La parte del nombre de host debe estar en una nueva línea. Aquí hay un buen tutorial sobre cómo hacer un archivo de configuración como este: mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander
1
buena solución, gracias. Pero, por supuesto, una mejor solución sería usar cnames en dns
Yura
31

Linux admite alias configurando la variable env HOSTALIASES.

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

entonces tú puedes

ping fakehost

NB ping requiere que lo configure como root, pero puede hacerlo como cualquier usuario para cualquier aplicación que se ejecute como ese usuario. ping suids a la raíz.

teknopaul
fuente
3
no funcionó para mí en Ubuntu 12.04 :(
Dimitry K
3
Los HOSTALIAS solo funcionan para ejecutables que no tienen el setuid flag establecido. Por lo tanto, no funcionará para ping (a menos que ya sea root cuando ejecute ping). Supongo que esto se hace para evitar engañar a los ejecutables setuid para que se conecten a un host diferente al previsto.
Boris
1
Tampoco funciona para el rizo
Benubird
77
rara vez terminará en el resultado esperado. HOSTALIASES solo funciona para aplicaciones que utilizan getaddrinfo (3) o gethostbyname (3) . Esto significa que funcionará para aplicaciones que intentan resolver explícitamente el nombre de host mediante una llamada específica del sistema: nunca es el caso. ver unix.stackexchange.com/questions/10438/… así que la única solución es dns local (dnsmasq)
Nadir
1
Parece que este truco está en desuso. Las funciones gethostbyname * (), gethostbyaddr * (), herror () y hstrerror () están obsoletas. Si su sistema ejecuta DNSMasq localmente, puede usar un alias para cualquier resolución que use DNS.
teknopaul
24

Puede configurar esto en su servidor DNS, los registros CNAME permiten que una máquina sea conocida por más de un nombre de host. Entonces agregue registros CNAME a su servidor DNS así:


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

Ali Mezgani
fuente
3
sería un servidor DNS ligero para probar dnsmasq(también sirve DHCP).
sybreon
17

A menudo hago esto con variables de entorno. Sé que esto solo funciona para la línea de comando, pero es donde a menudo anhelo los alias de nombres de host (trabajé con varias cuentas de supercomputadora, todas con URL largas). Aquí hay un ejemplo, si estás usando BASH. En ~ / .bashrc:

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

entonces, en una cáscara fresca:

ssh christopher @ $ fakehost


fuente
11

La única forma en que esto se puede hacer es si tiene su propio servidor DNS local.

el otro recibir
fuente
1
Sí, ahora parece la única solución. Gracias. No puedo votar porque no tengo suficiente reputación.
Si la dirección IP siempre cambiante de una conexión DSL o de acceso telefónico es el problema, dyndns es una mejor solución, en mi humilde opinión.
Sven
No, no es una mejor solución. Una vez que el servidor tiene un nombre de host manejado por otra cosa, todo lo que el OP necesita es un CNAME para el primer nombre de host. DYNDNS y similares confían en que el host informe al servidor dns que su ip ha cambiado.
theotherrecibido el
5

El uso de /etc/hosts.aliases es una característica estándar de las bibliotecas de resolución de enlaces. Es más robusto que agregar entradas a / etc / hosts y puede usarse si no puede agregar CNAMES a su DNS (no tiene acceso a él).

En general, la mejor práctica es usar CNAMES en el DNS con la BÚSQUEDA apropiada definida en /etc/resolv.conf.

La actualización de / etc / hosts no es muy robusta ya que las entradas deben mantenerse sincronizadas con los cambios de IP. Esto realmente solo funciona a pequeña escala o cuando está utilizando un servicio de nombres para distribuir el mapa de hosts (por ejemplo, a través de ldap).

Otra solución puede ser DNSMasq http://en.wikipedia.org/wiki/Dnsmasq

Tom Hallam
fuente
Intenté usar /etc/hosts.aliases en CENTOS 6 pero esta característica no parece funcionar. Tampoco puedo encontrar ninguna documentación sobre su uso o existencia. ¿Dónde debería estar mirando?
mdpc
5

Necesitará un servidor dyndns que asigne su dirección IP actual a un nombre de host. Le informará a este servidor sobre su dirección IP actual cada vez que inicie sesión, y actualizará su registro de nombre de host.

Sven
fuente