2009-03-12 11 views
158

Die Datei /etc/hosts kann verwendet werden, um DNS-Definitionen zu überschreiben, d. H. Einen Hostnamen auf eine andere IP zu verweisen.Kann ich die Datei/etc/hosts verwenden, um einen Alias ​​zu konfigurieren?

Ich möchte /etc/hosts verwenden, um einen Alias-Eintrag zu erstellen, d. H. Damit mein Computer denkt, dass www.mysite.com nicht auf eine "hartcodierte" IP verweist, sondern stattdessen ein Synonym von mychangingip.myip.com ist.

Kann es getan werden?

Antwort

138

/etc/hosts kann nicht (an sich) verwendet werden, um Hostnamen "Aliase" zu erzeugen.

Die Host-Datei erzeugt, die internen äquivalent A und PTR Datensätze aus der DNS, d.h. Abbildung von Hostnamen-Adresse und umgekehrt auf IP.

Während Sie mehrere Namen zu einer bestimmten IP hinzufügen können, müssen Sie die IP im Voraus kennen. Es kann nicht verwendet werden, um den gleichen Effekt zu erzeugen wie ein CNAME Datensatz, bei dem ein Name auf einen anderen Namen zeigt, der wiederum in die gewünschte IP aufgelöst wird.

+1

Ich glaube, alles nach 2 "Spalten" von/etc/hosts Datei gilt als "Alias", die cname Konzept ähnlich ist. Außerdem können Sie mehr von ihnen haben. aber Sie können nicht "files" -Methode mit "DNS" -Methode kombinieren (siehe nsswitch.conf), so dass es nicht möglich ist, es mit DNS-CNAME-Datensatz zu verknüpfen. – mighq

+0

@mighq in der Tat können Sie _additional_ aliases mit diesen Spalten erstellen, aber Sie müssen noch etwas in die Spalte _first_ setzen. Daher benötigt Ihre "Lösung" immer noch eine fest codierte IP-Adresse. – Alnitak

-2

Ich glaube nicht, Hosts-Datei ist nicht wirklich eine DNS-Server-Alternative. Anstatt zu versuchen, herauszufinden, wie man Bind-DNS installiert und konfiguriert, möchten Sie vielleicht dateibasiertes SheerDNS ausprobieren. http://threading.2038bug.com/sheerdns/ (beste leichte DNS-Server fand ich durch Freshmeat).

+8

SheerDNS scheint sehr zerbrochen: es sendet illegale DNS-Pakete zurück, wenn Sie einen Ressourceneintragstyp eingeben, den es nicht erkennt, nicht behandelt (wie SPF), AAAA-Datensätze nicht erkennt, antwortet nicht auf Anfragen usw. Es scheint ein Studentenexperiment zu sein, nicht mehr. – bortzmeyer

10

Ich habe vor kurzem untersucht, ich konnte keine echte Lösung finden. Sie können jedoch teilweise bekommen, was Sie durch das Hinzufügen einer Suchlinie wollen /etc/resolv.conf zB:

search myip.com

Dann wird es für mychangingip.myip.com aussehen, wenn sie versuchen mychangingip See zu lösen auch Die man-Seite für resolv.conf

13

Dieses Shell-Skript könnte den Trick für Sie tun, wenn Sie nur die aktuelle IP-Adresse in Ihrer Hosts-Datei benötigen und den Overhead einer benutzerdefinierten DNS-Konfiguration nicht mögen . Sie könnten es zum Beispiel regelmäßig als Cronjob ausführen.

#!/bin/bash 
# Get the dynamic IP (dirty, I know) 
IP=`host -t a mychangingip.myip.com | perl -nle '/((?:\d+\.?){4})/ && print $1' | 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 
1

Es gibt Dienstleister, die das komfortabel und zuverlässig für Sie erledigen. Ein prominentes Beispiel ist dyndns.

2

Ein Wort der Warnung, wenn Sie einen Eintrag wie folgt aus:

127.0.0.1  dev.example.com 

Wenn Sie tatsächlich die Anforderung innerhalb Ihrer Anwendung (in meinem Fall ASP.NET) wird es haben actaully aufgelöst ‚localhost‘ also können Sie solche Dinge nicht tun:

if (Request.Url.Authority == "dev.example.com) { 
    // ... 
} 

Der Alias ​​wird auf 'localhost' aufgelöst. Ich denke, dass dieses Verhalten funktioniert, als ob es ein CNAME wäre

+0

Wenn dies etwas ist, das Sie identifizieren können, können Sie den Loopback-Netzwerkadapter konfigurieren (ja ist es immer noch in Windows 8 verfügbar) und eine beliebige Anzahl lokaler IPs für Testzwecke erstellen. –

151

Wenn Sie SSH zu einem Server (mit einem dynamisch wechselnden DNS-Eintrag) wollen, dann können Sie effektiv einen "Alias" hinzufügen (in der Datei ~/.ssh/config) Erstellen Sie einen Eintrag:

Host myAlias 
    HostName mychangingip.myip.com 

Dann können Sie „ssh Meinalias“ (es gibt auch andere Richtlinien, die von nutzen sein kann, wie zB Benutzer, Port usw.).

+9

@WeiboLi stimme ich absolut nicht zu - das OP speziell erwähnt 'www.mysite.com', was bedeutet, dass HTTP verwendet wird, und nicht SSH. – Alnitak

+1

Sie haben meinen Anwendungsfall genagelt, obwohl ich in der gleichen Weise wie das OP dachte. Ich dachte an Hosts und das Netzwerk, nicht an ssh. –

10

Dies kann durch Ausführen eines lokalen DNS-Resolvers (etwa dnsmasq) erfolgen. Überprüfen Sie https://serverfault.com/questions/22419/set-dns-server-on-os-x-even-when-without-internet-connection

+2

+1 Dies ist die stabilste Lösung für das allgemeine Problem der Konfiguration von DNS-Aliasen auf einem lokalen Rechner. Alle anderen vorgeschlagenen Lösungen sind entweder wirklich hacky (wie das Aktualisieren von/etc/hosts mit cron) oder funktionieren nur für bestimmte Protokolle (ssh, http). – Ajedi32

30

Ich hatte das gleiche genaue Problem und ich löste es durch die Installation und Verwendung von Nginx auf meinem Mac. Sie benötigen dazu keinen DNS-Server. Sie können nur die Option proxy_pass von nginx nutzen, um denselben Effekt wie cname zu erhalten.

Sobald Sie Nginx installiert und eingerichtet haben, können Sie Alias ​​first.com für wie folgt. In Ihrem/etc/hosts weiterleiten first.com Verkehr zu 127.0.0.1.

127.0.0.1 first.com 

Die auf nginx Config, fügen Sie die folgenden Schritte aus:

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; 
    } 
} 

Dies sollte man effektiv eine cname ähnlichen Einrichtung geben. Ich hoffe, das hilft!

+1

Das ist genial. Ich habe gerade diese Technik verwendet, um eine WordPress-Site zu testen, die ich auf einen neuen Server migriert habe - normalerweise muss man sich damit herumärgern, Konfigurationsdateien zu ändern, aber ich habe einfach alles auf den neuen Server kopiert (der unter einer anderen URL verfügbar war) Dann habe ich die oben genannte verwendet, um die alte URL auf die neue umzuleiten, um zu überprüfen, ob sie funktioniert hat. Danke, dass du mir viel Zeit gespart hast! –