Wie ist die DNS-Suche für OSX Mountain Lion konfiguriert?

33

Wenn ich meine resolv.conf katze, sehe ich diese Meldung:

#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#

Ich versuche, einen DNS-Eintrag hinzuzufügen. Ich habe meine Hosts-Datei bearbeitet und den DNS-Cache geleert, aber der Name wird nicht aufgelöst, wenn ich ihn verwende host servername. Ich dachte, vielleicht hostwar das nicht konfiguriert, um die hostsDatei anzusehen . Wie kann ich meinen neuen Eintrag auflösen und was verwendet OSX, wenn nicht resolv.conf?

Ben Flynn
quelle

Antworten:

17

Das Host-Tool löst nicht einfach Namen auf (wie in, indem es den Systemnamen-Resolver verwendet), sondern fragt DNS-Server ab (wie in, indem es Pakete an udp / 53 und möglicherweise an tcp / 53 sendet): Es kennt die lokale hostsDatei nicht und verwendet sie auch nicht .

Wenn Sie den Resolver des Betriebssystems (wie in gethostbyname () und ähnliche libc-Funktionen) testen möchten, können Sie versuchen, den Namen, den Sie hinzugefügt haben, mit einem Ping zu versehen /etc/hosts.

Wie Sie bereits herausgefunden haben, wird die DNS-Suche unter Mac OS X nicht verwendet /etc/resolv.conf. Die richtige Methode zum Konfigurieren der abgefragten DNS-Server finden Sie in der Benutzeroberfläche für die Netzwerkeinstellungen und / oder im networksetupBefehlszeilentool. Ich weiß ehrlich gesagt nicht, ob Sie die Reihenfolge konfigurieren können, in der Quellen ausprobiert werden, aber das Standardverhalten besteht darin, /etc/hostszuerst DNS-Server und danach DNS-Server auszuprobieren .

Luke404
quelle
1
Ich habe einen Perl-Wrapper für getaddrinfo gefunden: search.cpan.org/~pevans/Socket-GetAddrInfo-0.22
Ben Flynn
26

DNS-Resolver können in OS X über den folgenden networksetupBefehl hinzugefügt werden :

sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4

Geben Sie den entsprechenden Namen der Netzwerkverbindung ein. Diese Resolver werden in der resolv.conf angezeigt, da sie automatisch generiert werden. Direkte Änderungen an der resolv.conf führen jedoch nicht dazu, dass diese Resolver verwendet werden. Ich gehe davon aus, dass die Resolver irgendwo in einer Pliste gespeichert sind; Ich werde suchen und berichten.

Bearbeitet, um hinzuzufügen: Es sieht aus wie die XML-Plist-Datei, in der die DNS-Server gespeichert sind /Library/Preferences/SystemConfiguration/preferences.plist.

Die Hostdatei in / private / etc / hosts sollte funktionieren, um die Auflösung für bestimmte Namen zu erzwingen (/ etc ist ein Symlink zu / private / etc). Können Sie Ihre Syntax überprüfen und sicherstellen, dass Sie die richtige Datei bearbeiten?

phoebus
quelle
Also könnte ich diesen Befehl verwenden, um die Hosts-Datei hinzuzufügen?
Ben Flynn
Sie können nicht und Sie müssen nicht
Luke404
Nein, wenn Sie der hosts-Datei Namen hinzufügen möchten, fügen Sie diese einfach direkt hinzu. Die Hosts-Datei wird zuerst beim Auflösen von Namen geprüft, gefolgt vom lokalen Auflösungs-Cache und dann von Ihren konfigurierten DNS-Servern. Wenn Sie den Befehl "host" zum Testen verwenden, wird die lokale Hosts-Datei jedoch nicht überprüft. Eine einfache Möglichkeit zum Testen ist die Verwendung eines Netzwerkdienstprogramms wie Ping.
Phoebus
1
Manchmal erhält die Oberfläche doofe Namen, um den genauen Namen zu erhalten, den Sie benötigen. networksetup -listallnetworkservices Außerdem müssen Sie , wenn dieser Leerzeichen enthält, den gesamten Namen in einfache Anführungszeichen setzen, dh:sudo networksetup -setdnsservers 'white space' 8.8.8.8 8.8.4.4
Marcin
2
Ist es möglich, den Resolver so zu konfigurieren, dass er einen anderen Port als 53 verwendet?
Rune FS