Puis-je utiliser le fichier /etc/hosts pour configurer un alias [fermé]
le fichier /etc/hosts
peut être utilisé pour outrepasser les définitions dns, c'est-à-dire pour pointer un nom d'hôte vers une ip différente.
je veux utiliser /etc/hosts
pour faire un enregistrement d'alias, i.e. pour faire croire à mon ordinateur que www.mysite.com ne désigne pas une ip" codée en dur", mais est synonyme de mychangingip.myip.com.
est-ce possible?
9 réponses
/etc/hosts
ne peut pas être utilisé (par lui-même) pour produire des "alias" de nom d'hôte.
le fichier hosts produit l'équivalent interne des enregistrements A
et PTR
du DNS, c'est-à-dire la correspondance du nom d'hôte à l'adresse IP et vice-versa.
alors que vous pouvez ajouter plusieurs noms à une adresse IP spécifique, cela exige que vous connaissiez l'adresse IP à l'avance. Il ne peut pas être utilisé pour produire le même effet qu'un enregistrement CNAME
, où un nom pointe un autre nom qui à son tour se résout à L'IP désirée.
si vous voulez SSH sur un serveur (avec une entrée DNS qui change dynamiquement) alors vous pouvez effectivement ajouter un" alias " par (dans le fichier ~/.SSH / config) créant une entrée:
Host myAlias
HostName mychangingip.myip.com
puis vous pouvez "ssh myAlias" (il y a d'autres directives qui peuvent être utiles, par exemple User, Port, etc.).
j'ai eu exactement le même problème et je l'ai résolu en installant et en utilisant nginx sur mon mac. Vous n'avez pas besoin d'un serveur dns pour ce faire. Vous pouvez simplement profiter de l'option proxy_pass
de nginx pour obtenir le même effet que cname.
une fois que vous avez installé et configuré nginx, vous pouvez alias first.com
pour second.com
comme ceci. Dans votre fichier /etc/hosts, faites suivre le trafic first.com
à 127.0.0.1.
127.0.0.1 first.com
puis sur votre NGINX config, ajouter le
server {
listen 80;
server_name first.com;
access_log off;
location / {
proxy_pass http://second.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_connect_timeout 300;
}
}
cela devrait effectivement vous donner une configuration de type cname. Espérons que ça aide!
ce script shell pourrait faire l'affaire pour vous, si vous avez juste besoin d'avoir L'adresse IP à jour dans votre fichier hosts et que vous n'aimez pas la fonction de configuration DNS personnalisée. Vous pouvez par exemple l'exécuter régulièrement comme cronjob.
#!/bin/bash
# Get the dynamic IP (dirty, I know)
IP=`host -t a mychangingip.myip.com | perl -nle '/((?:\d+\.?){4})/ && print ' | head -n1`
# Update the hosts file
if test -n "$IP"; then
grep -v www.thesite.com /etc/hosts > /tmp/hosts
echo "$IP www.thesite.com" >> /tmp/hosts
cp /tmp/hosts /etc/hosts
fi
j'ai regardé dans ce récemment, je n'ai pas pu trouver une VRAIE solution. Cependant, vous pouvez obtenir partiellement ce que vous voulez en ajoutant une ligne de recherche dans /etc/resolv.conf par exemple:
search myip.com
alors il cherchera mychangingip.myip.com en essayant de résoudre mychangingip Voir aussi la page de manuel de resolv.conf
cela peut être fait en exécutant un résolveur DNS local (quelque chose comme dnsmasq ). Vérifier https://serverfault.com/questions/22419/set-dns-server-on-os-x-even-when-without-internet-connection
Une note de prudence est que si vous avez une entrée comme celle-ci :
127.0.0.1 dev.example.com
lorsque vous recevez effectivement la demande dans votre application (dans mon cas ASP.NET) il se sera finalement résolu à 'localhost' de sorte que vous ne pouvez pas faire des choses comme ceci:
if (Request.Url.Authority == "dev.example.com) {
// ...
}
l'alias est résolu en 'localhost'. je pense que ce comportement fonctionne comme si C'était un CNAME
Je ne pense pas, le fichier hosts n'est pas vraiment une alternative au serveur dns. Au lieu d'essayer de comprendre comment installer et configurer bind dns, vous pourriez vouloir essayer SheerDNS basé sur les fichiers. http://threading.2038bug.com/sheerdns / (meilleur serveur DNS léger que j'ai trouvé dans freshmeat).