¿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.


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

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.


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 


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


11

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


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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.