Est-il possible d'aliaser un nom d'hôte sous Linux?

90

Est-il possible d'aliaser un nom d'hôte sous Linux?

Jmillikin l’a demandé lors de divers forums Ubuntu comme suit:


Est-il possible de créer un alias de nom d'hôte? Un peu comme / etc / hosts, mais avec d'autres noms d'hôte plutôt que des adresses IP. Ainsi, avec un fichier comme celui-ci, vous pouvez envoyer une requête ping à "fakehost1" et le mapper de nouveau sur "realhost", puis "realhost" serait résolu en une adresse IP.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Quelqu'un a répondu à propos de ssh, mais pas à propos de ping, etc. Mon objectif principal est de l'utiliser comme alias pour un serveur Subversion . Dans mon cas, realhost est sous une adresse IP dynamique. Ainsi, l'alias "/ etc / hosts" ne fonctionne pas. Je veux accéder à mon serveur Subversion au svn://my_svnserver/my_reposlieu de svn://realhost/my_repos.

Peter Mortensen
la source
Je suppose que je peux manquer quelque chose. Voulez-vous dire que vous ne pouvez pas avoir / etc / hosts ressemblant à 10.0.3.4 some.host.org another.domain.com Vous devez utiliser une référence pour une raison programmatique?
jim_m_somewhere

Réponses:

56

Pour ceux qui n'ont pas de compte sur les forums (ou ne souhaitent pas se connecter):

si votre problème principal n'est pas de cingler mais de ssh, vous pouvez créer / éditer votre ~ / .ssh / config en ajoutant des lignes comme celles-ci:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3
Xiong Chiamiov
la source
1
La partie nom d'hôte doit être sur une nouvelle ligne. Voici un bon tutoriel sur la manière de créer un fichier de configuration comme celui-ci: mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander
1
bonne solution de contournement, merci. Mais bien sûr, une meilleure solution consisterait à utiliser des noms de domaine sur DNS
Yura
31

Linux prend en charge les alias en définissant la variable env HOSTALIASES.

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

Ensuite vous pouvez

ping fakehost

NB: vous devez configurer ceci en tant que root, mais vous pouvez le faire en tant qu'utilisateur pour toute application exécutée sous cet utilisateur. ping suids à la racine.

teknopaul
la source
3
n'a pas fonctionné pour moi sur Ubuntu 12.04 :(
Dimitry K
3
Les HOSTALIASES ne fonctionnent que pour les exécutables pour lesquels l’indicateur setuid n’est pas défini. Cela ne fonctionnera donc pas pour le ping (sauf si vous êtes déjà root lors de l'exécution du ping). J'imagine que cela est fait pour éviter d'inciter setuid-exécutables à se connecter à un hôte différent de celui auquel il est destiné.
Boris
1
Aussi ne fonctionne pas pour curl
Benubird
7
cela aboutira rarement au résultat attendu. HOSTALIASES ne fonctionne que pour les applications utilisant getaddrinfo (3) ou gethostbyname (3) - Cela signifie que cela fonctionnera pour les applications essayant de résoudre explicitement le nom d'hôte par un appel système spécifique: ce n'est jamais le cas. voir unix.stackexchange.com/questions/10438/… donc la seule solution est le DNS local (dnsmasq)
Nadir
1
Semble que cette astuce est obsolète. Les fonctions gethostbyname * (), gethostbyaddr * (), herror () et hstrerror () sont obsolètes. Si votre système exécute DNSMasq localement, vous pouvez y aliaser pour toute résolution utilisant DNS.
Teknopaul
24

Vous pouvez configurer cela sur votre serveur DNS. Les enregistrements CNAME permettent à une machine d'être connue sous plusieurs noms d'hôte. Ajoutez donc les enregistrements CNAME à votre serveur DNS de la manière suivante:


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

Ali Mezgani
la source
3
un serveur DNS léger à essayer serait dnsmasq(il sert également DHCP).
Sybreon
17

Je le fais souvent avec des variables d'environnement. Je sais que cela ne fonctionne que pour la ligne de commande, mais c’est là que je cherche le plus souvent des alias de noms d’hôte (j’ai travaillé avec plusieurs comptes de superordinateurs, tous dotés d’URL longues). Voici un exemple, si vous utilisez BASH. Dans ~ / .bashrc:

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

puis, dans une coquille fraîche:

ssh christopher @ $ fakehost


la source
11

La seule façon de le faire est d’avoir votre propre serveur DNS local.

theotherreceive
la source
1
Oui, maintenant, il semble que la seule solution. Merci. Je ne peux pas voter car je n'ai pas assez de réputation.
Si le problème est l’adresse IP toujours changeante d’une connexion ADSL ou à distance, dyndns est une meilleure solution, IMHO.
Sven
Non, ce n'est pas une meilleure solution. Une fois que le serveur a un nom d’hôte qui est géré par quelque chose d’autre, alors tout ce dont l’opérateur a besoin est un CNAME pour le premier nom d’hôte. DYNDNS et similaires s'appuient sur l'hôte pour informer le serveur DNS que son adresse IP a changé.
theotherreceive
5

L'utilisation de /etc/hosts.aliases est une fonctionnalité standard des bibliothèques de résolveur de liaison. C'est plus robuste que d'ajouter des entrées à / etc / hosts et peut être utilisé si vous ne pouvez pas ajouter CNAMES à votre DNS (n'y avez pas accès).

En règle générale, la meilleure pratique consiste à utiliser CNAMES dans le DNS avec SEARCH approprié défini dans /etc/resolv.conf.

La mise à jour de / etc / hosts n’est pas très robuste car les entrées doivent être synchronisées avec les changements d’IP. Cela ne fonctionne vraiment que sur une petite échelle ou lorsque vous utilisez un service de noms pour distribuer la carte des hôtes (par exemple via ldap).

Une autre solution peut être DNSMasq http://en.wikipedia.org/wiki/Dnsmasq

Tom Hallam
la source
J'ai essayé d'utiliser /etc/hosts.aliases dans CENTOS 6 mais cette fonctionnalité ne semble pas fonctionner. Je ne trouve pas non plus de documentation sur son utilisation ou son existence. Où devrais-je chercher?
Mdpc
5

Vous aurez besoin d’un serveur Dyndns qui mappera votre adresse IP actuelle sur un nom d’hôte. Vous communiquerez votre adresse IP actuelle au serveur à chaque fois que vous vous connecterez et il mettra à jour l'enregistrement de votre nom d'hôte.

Sven
la source