wake-up-neo.net

Mac OSX Lion DNS-Suchreihenfolge

Nach dem Upgrade auf Mac OSX Lion stellte ich fest, dass/etc/hosts nicht mehr an erster Stelle für die Namensauflösung gesucht wird. Dies führt zu einigen Nebenwirkungen wie:

  1. Einträge in/etc/hosts werden schmerzhaft langsam aufgelöst
  2. Sie können vorhandene Domänen nicht überschreiben, z. 127.0.0.1 www.google.com
  3. Wenn Sie Suchdomäneneinträge von DHCP erhalten, sagen wir .lan, und ein komischer Typ hat localhost.lan auf etwas anderes als 127.0.0.1 im lokalen DNS konfiguriert, können Sie Ihren localhost nicht mehr erreichen.

Ist dieses Verhalten beabsichtigt? Macht es irgendeinen Sinn? Und vor allem, wie kann ich zum alten Verhalten zurückkehren.

96
Meik

Ich denke, er ist wichtig, Lion behandelt .local TLD anders, weil es für einige Multicast-DNS-Funktionen (von Bonjour verwendet) reserviert ist. Die einzige Möglichkeit, dieses Problem zu lösen, ist die Verwendung einer anderen TLD für Entwicklungshosts (dh .dev). Es funktioniert gut für mich, hoffe, es wird für andere hilfreich sein!

78

In Bezug auf das Überschreiben von Domänen in der Hosts-Datei habe ich festgestellt, dass Lion unter bestimmten Umständen die IPv6-Adresse einer Domäne abfragt, wenn festgestellt wird, dass eine Domäne über das IPv4-Netzwerk nicht erreichbar ist.

Dies stellte ich fest, als ich einige Anzeigen bemerkte, die ich noch nie auf Snow Leopard gesehen hatte, weil ich die Anzeigen-Domains auf 127.0.0.1 Umgeleitet hatte. Ich habe wireshark gestartet und dabei AAAA (IPv6-DNS-Einträge) Abfragen nach den IPv4-Abfragen A (IPv4) festgestellt. Die Ad-Server haben in der Tat IPv6-Adressen und konnten mir deren Inhalte zur Verfügung stellen.

Die Lösung dafür ist a

::1 mydomain.com

eintritt für jeden

127.0.0.1 mydomain.com

eintrag in Ihrer Hosts-Datei.

Interessanterweise wird, wenn auf 127.0.0.1:80 Zufällig ein lokaler Webserver ausgeführt wird und Ihr Browser eine Antwort vom Webserver erhält (Fehler oder anderweitig), keine AAAA -Anfrage ausgegeben, da diese scheinbar erfüllt ist dass zumindest eine TCP Verbindung möglich war.


Wenn Sie die Hosts-Datei intensiv nutzen (zum Blockieren von Werbung, zur lokalen Webentwicklung usw.), möchten Sie möglicherweise Ihren eigenen lokalen DNS-Resolver ausführen. Es ist eine erhebliche Belastung für die Festplatte/CPU, wenn Sie bei jeder Anforderung /etc/hosts Lesen müssen. Es ist daher in Ihrem Interesse, diese Datei sehr leicht zu halten.

Ein Vorteil der lokalen Ausführung von dnsmasq (neben der erheblichen Leistungssteigerung) besteht darin, dass Sie ganze Domänen der obersten Ebene zurück auf Ihren lokalen Computer umleiten können. Auf diese Weise können Sie beispielsweise den gesamten * .dev-Namespace für die Entwicklung verwenden, ohne jede Domain, die Sie lokal auflösen möchten, einzeln in /etc/hosts Eingeben zu müssen.

50
guns

Das Problem war, dass ich die Datei/etc/hosts verlinkt habe. Wenn/etc/hosts eine einfache Datei ist, ist alles in Ordnung.

17
Meik

Update (2): OSX 10.10.5 bringt die Rückkehr von mDNSResponder.

Update: OSX 10.10 Yosemite hat mDNSResponder durch "discoveryd" ersetzt. Ich habe kein Upgrade durchgeführt, daher bin ich mir nicht sicher, wie sich DNS-Lookups und /etc/hosts.

Der DNS-Resolver des Systems unter Lion ist der mDNSResponder -Prozess.

Sie denken vielleicht, "aber mDNSResponder ist der Multicast-DNS-Responder." Du hast recht; dafür war es ursprünglich, und es erfüllt noch diese Funktion. Bei neueren MacOS-Versionen werden jedoch auch Standard-Host-Lookups ausgeführt.

In Lion scheint es nicht so zu sein, als würde es /etc/hosts wenn es sich ändert, zumindest nicht immer. mDNSResponder zu töten (und zuzulassen, dass es automatisch neu gestartet wird) scheint das Problem zu beheben.

Sudo killall mDNSResponder

sollte den Trick machen.

unten ist meine ursprüngliche Antwort für die Nachwelt. Ich nehme an, es könnte in einigen Fällen immer noch ein Problem sein.

Stellen Sie sicher, dass Ihre /etc/hosts-Datei ist eine Textdatei im Unix-Stil mit Zeilenvorschub als Endung und nicht als cr-Datei.

Bei der Bearbeitung mit TextWrangler oder einem Unix-Texteditor sollte die Datei erhalten bleiben.

Wenn Ihre Datei bereits fehlerhaft ist, versuchen Sie dies zu beheben

tr '\015' '\012' < /etc/hosts > /tmp/hosts.$$
mv /etc/hosts /etc/hosts.bad
mv /tmp/hosts.$$ /etc/hosts
# fix up permissions while we are at it
chown root:wheel /etc/hosts
chmod 644 /etc/hosts

gutschrift für diesen Fix an:

http://techpatio.com/2011/guides-how-to/fixed-mac-osx-lion-etc-hosts-bugs-dns

14
Dan Pritts

ich hatte dieses Problem für eine Weile, da ich in einem Team von Entwicklern arbeite und es notwendig wurde, .local anstatt .dev oder .localhost zu verwenden, fand ich diesen Artikel sehr nützlich.

iTand.me - Löwe lokale Domänen und usw. Hosts ..

Zusammenfassend;

Wenn Sie jedoch .local verwenden müssen, ist das Dienstprogramm dscl die eleganteste Lösung, die ich gefunden habe. Die Verwendung ist sehr einfach. Gehen Sie folgendermaßen vor, um einen Host mit dem Namen mydev.local hinzuzufügen und auf den lokalen Host zu verweisen:

Sudo dscl localhost -create /Local/Default/Hosts/mydev.local IPAddress 127.0.0.1

Anzeigen aller derzeit definierten Hosts und ihrer IP-Adressen

Sudo dscl localhost -list /Local/Default/Hosts IPAddress

Und um einen Host zu entfernen:

Sudo dscl localhost -delete /Local/Default/Hosts/mydev.local

Insgesamt ziemlich unkompliziert und funktioniert gut. Ich würde es immer noch vorziehen, stattdessen/etc/hosts bearbeiten zu können, aber dies ist eine bessere Alternative, als alle unsere .local-Server umbenennen zu müssen.

4
Opentuned

Meine Situation war ähnlich, aber die Verzögerungen von genau 5 Sekunden traten nur bei URLs auf, die mit ".local" enden. Bei der Anzeige von Websites, die mit ".dev" endeten, trat keine Verzögerung auf.

Einige der anderen Entwickler in meinem Büro hatten dieses Problem, einige nicht. Ich hatte auf eine einfache Lösung gehofft und wollte die Site aufgrund anderer Abhängigkeiten nicht in ".local" umbenennen.

Ich habe den folgenden Befehl in Terminal ausgeführt und meine Ausgabe mit einigen anderen Benutzern im Büro ausgetauscht.

scutil --dns

Dieser Abschnitt war der einzige Unterschied:

resolver #2
  domain   : 00000000.members.btmm.icloud.com
  options  : pdns
  timeout  : 5
  order    : 150000

Mein Mac war mit meinem iCloud-Konto verknüpft und Back To My Mac war aktiviert. Nachdem ich Back To My Mac deaktiviert hatte, verschwand der zusätzliche Resolver und die Verzögerung von 5 Sekunden verschwand.

3

Bevor ich von Snow Leopard zu Lion wechselte, hatte ich mehrere app-spezifische Einträge in /etc/hosts, so was:

127.0.0.1 foo.bar.local

Nach dem Update war das Laden meiner lokalen Apps SEHR langsam. Ich bemerkte, dass die Verzögerung passierte, bevor die Anforderung in der Protokolldatei angezeigt wurde, und dass die App selbst danach genauso schnell war wie üblich.

Jetzt habe ich zwei Zeilen pro App, so:

127.0.0.1 foo.bar.local
::1       foo.bar.local

... und alles ist wieder schnell.

Anscheinend fügt dies IPv6-Adressen hinzu? Ich verstehe es nicht ganz, aber es funktioniert.

3
Nathan Long

Wow, was für ein Albtraum. Ich habe absolut alles zu diesem Thema gelesen und alles, was bisher vorgeschlagen wurde, war quälend nahe an dem, was ich erlebte, aber keine der Lösungen funktionierte für mich.

Und ich habe herausgefunden warum.

Im Gegensatz zu anderen habe ich/etc/hosts nicht verwendet, um lokale Domänen einzurichten. Meine Datei/etc/hosts war auf Lager und enthielt nur die Einträge, die für die Loopback-Schnittstelle und den Broadcast-Host erforderlich sind. Außerdem war es eine korrekt codierte Unix-Datei, da ich die Art von Person bin, die das nur von der Kommandozeile aus mit Emacs bearbeiten würde. Und Gott sei Dank musste ich nicht auf meinen eigenen DNS-Server wie DNSmasq zurückgreifen, um das Problem zu umgehen.

(Das Symptom, das mich auf dieses Problem aufmerksam gemacht hat, war, dass der Start des Emacs etwa 10 Sekunden dauerte, aber nur, wenn ich WLAN aktiviert hatte. Wenn ich WLAN deaktiviert habe, wurde der Emac sofort wie erwartet gestartet.)

Meine Lösung: Mein Laptop hat einen Namen, "Terminator". (Ja, sein glänzendes Aluminium-Äußeres ließ mich an den Arnold-Schwarzenegger-Charakter denken.) Ich musste nur Einträge zu/etc/hosts für den Namen der Maschine selbst hinzufügen:

127.0.0.1   terminator
::1         terminator

Ich habe den Namen meines Hosts gefunden, indem ich im Terminal einen einfachen Befehl ausgeführt habe:

hostname

... was mit der Ausgabe zurückkam: "terminator". Nachdem Sie/etc/hosts so geändert haben, dass es diese beiden Einträge enthält, kann emacs den Namen meines Laptops jetzt schnell auflösen.

Ich hoffe das hilft jemandem.

1
pohl

Ich hatte Geschwindigkeitsprobleme bei der Verwendung von OSX Lion als Web-Entwicklungs-Box. Aufgrund einer Kombination von Vorschlägen habe ich die IPv6-Vernetzung deaktiviert und IPv6 an localhost6 weitergeleitet.

Sudo networksetup -setv6off Ethernet

/ etc/hosts ...

127.0.0.1    localhost
127.0.0.1    dev.aliasdomain.com
... 
::1          localhost6 
0
Eddie B

Ich denke, es wurden einige Fehler behoben. Ich habe eine Menge erwähnter Probleme gesehen, und keines davon scheint derzeit zuzutreffen (zum Beispiel funktioniert es jetzt für mich, mehrere Aliase in eine einzige Zeile zu setzen).

Auf jeden Fall scheint es, dass mit Lion Apple) einige drastische Änderungen an mDNSResponder vorgenommen wurden, der alle DNS-Suchvorgänge und (zumindest mit Lion) auch das/etc/hosts-Cache handhabt Lookups funktionieren jetzt auch, aber Reverse Lookups (z. B. 1.2.3.4 statt google.com) funktionieren nicht.

Nach vielen Schmerzen sieht es so aus, als würde mDNSResponder diese Suche nach 4.3.2.1.in-addr.arpa konvertieren und eine Namenssuche durchführen. So arbeitet DNS zwar am liebsten, aber mit/etc/hosts funktioniert es überhaupt nicht.

Es sei denn, Sie fügen für jeden Host einen Alias ​​4.3.2.1.in-addr.arpa hinzu, wobei 4.3.2.1 die IP-Adresse in der umgekehrten Reihenfolge ist, in der Sie sie normalerweise sehen. Das repariert alles für mich. Hier ist ein Beispiel für einen Eintrag in/etc/hosts:

1.2.3.4 foo foo.example.com alias.example.com 4.3.2.1.in-addr.arpa

0
thomasafine