Stellen Sie den DNS-Server unter OS X auch dann ein, wenn keine Internetverbindung besteht


17

Ich habe den DNS-Server (lokale Instanz von Dnsmasq) installiert und konfiguriert, der sich wie gewünscht in localhost auflöst. Alles in Ordnung.

Wenn ich offline gehe, funktioniert es nicht mehr, da OS X den Inhalt von resolv.conf leer lässt und versucht, Änderungen in dieser Datei zu ignorieren.

Irgendeine Idee, wie man DNS auch offline konfiguriert?

Ähnliches Problem (ungelöst): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

Hauptmotivation ist die einfache Entwicklung einer RoR-Anwendung, die Subdomains als Kontoschlüssel verwendet. Und Sie können 127.0.0.1 * .yourapp.local nicht in / etc / hosts verwenden. Ein Typ hat die Domain smackaho.st und srt DNS dafür wie .smackaho.st bei 127.0.0.1 registriert, aber Sie können sie trotzdem nicht verwenden, wenn Sie offline arbeiten.

BEARBEITEN: versucht scutil Befehl, aber es scheint, dass Sie DNS ändern können, wenn Sie offline sind

HINWEIS: Wenn alle Schnittstellen ausgefallen sind, können Sie in Pref keine DNS-Server festlegen. panel.


Verwandte: DNSMASQ funktioniert nicht ohne Internetverbindung in OS X Yosemite auf Super User (ohne eine Lösung, aber einige Verweise).
Arjan

Antworten:


29

SIEHE UPDATE UNTEN!

Ich benutze Dnsmasq auch gerne auf meinem lokalen Computer und hatte auch dieses Problem. Hier ist die Lösung:

Von man 5 resolver:

The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.

/etc/resolver/ist standardmäßig nicht vorhanden; Sie müssen es selbst erstellen.

Auch von der Manpage:

domain
  Domain name associated with this resolver configuration. This
  option is normally not required by the Mac OS X DNS search system
  when the resolver configuration is read from a file in the
  /etc/resolver directory. In that case the file name is used as the
  domain name.

Wenn Sie also alle DNS-Abfragen für die Top-Level-Domain von devan den lokalen Nameserver weiterleiten möchten, würden Sie:

# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev

configdÄndert keine Dateien in /etc/resolver/, daher bleibt diese Einstellung bei Netzwerkänderungen und Neustarts erhalten.

UPDATE 17. Juli 2012

Leider scutil --dnsverschwindet ab OS X Lion der Top-Resolver (wie von gezeigt ), wenn keine Schnittstellen aktiv sind:

# scutil --dns # Online
DNS configuration

resolver #1
  nameserver[0] : 127.0.0.1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

# scutil --dns # Offline
DNS configuration

resolver #1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

Beachten Sie, dass der Resolver 1 leer ist, der von / etc / resolver abgeleitete Nameserver-Eintrag jedoch erhalten bleibt.

Da Sie die Resolver-Domäne direkt in der Datei / etc / resolver / angeben können, wird durch die Angabe der speziellen Internet-Stammdomäne . ein globaler Resolver-Eintrag erstellt, der wie folgt aussieht:

resolver #8
  nameserver[0] : 127.0.0.1

Jetzt werden alle DNS-Abfragen auch offline an localhost weitergeleitet.

Natürlich müssen Sie die von Ihnen ausgewählten Domains immer noch als 127.0.0.1 auflösen, indem Sie die Option --address von dnsmasq verwenden:

# dnsmasq --address=/dev/127.0.0.1

In Summe:

  • Stellen Sie alle DNS-Server Ihrer Netzwerkschnittstelle auf 127.0.0.1 ein:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Erstellen Sie eine Datei / etc / resolver / whatever:
    Nameserver 127.0.0.1
    Domain.
  • Richten Sie einen lokalen DNS-Server ein und seien Sie glücklich.

vgl. http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c


Genau das nutzt pow ( pow.cx ).
5.

aber leider funktioniert es nicht - github.com/37signals/pow/issues/104
daeltar

3
@guns funktioniert diese lösung noch in yosemite? dnsmasq hat bei mir offline einwandfrei funktioniert, bis ich ein Upgrade durchgeführt habe. Jetzt bekomme ich nur noch, wenn ich scutil --dnsNo DNS configuration available
renne

1
@MatthewLee, ja, Sie haben recht, es scheint, als ob die einzige Lösung darin besteht, Einträge in die hosts-Datei aufzunehmen.
Lenciel

1
Hat jemand schon eine Lösung für Yosemite gefunden?
jmagnusson

2

Warum nicht stattdessen die Einträge in / etc / hosts machen? Es fällt mir schwer, mir eine Situation vorzustellen, in der Sie tatsächlich einen vollwertigen DNS-Server ausführen müssen. Ich verwende ständig Einträge in Hostdateien, um auf meinen Macs solche Aufgaben auszuführen.

Der Resolver unter OS X funktioniert anders als unter Linux oder anderen Unixen. Dies ist wahrscheinlich ein Teil dessen, was dir Kummer bereitet. Wie zum Beispiel hat es Voreinstellungen für die zuerst zu verwendende Auflösungsmethode und speichert die Ergebnisse aller Abfragen für einen bestimmten Zeitraum im Cache.

Haben Sie den DNS-Server zur Benutzeroberfläche im Bereich "Netzwerkeinstellungen" hinzugefügt? Dies sollte sicherstellen, dass der Resolver diesen Server für seine Abfragen verwendet, falls er nach einem DNS-Eintrag sucht.


Ein Grund für die Verwendung einer DNS- Weiterleitung auf einem Clientcomputer besteht darin, eine große schwarze Liste von Anzeigen- / Malware-Domänen zu führen, ohne dass die Leistung des Resolver-Daemons beeinträchtigt wird, der bei jeder Anforderung die jetzt aufgeblähte Hostdatei greift. Ungeachtet der Vorteile dieses Ansatzes lädt dnsmasq / etc / hosts in den Speicher, wo die Nachschlagezeit winzig ist. Wenn Sie eine Webentwicklung durchführen, können Sie außerdem das lästige Hinzufügen lokaler Domänen für jede Site, an der Sie arbeiten, vermeiden.
Waffen

1

(Beantwortung b / c kann ich noch nicht kommentieren ...)

Wie gehst du offline?

(Beste Antwort, die ich gerade habe)

# man -S 5 resolver
 .
 .
 .
 Note that the /etc/resolv.conf file,
 which contains configuration for the default (or "primary") DNS resolver
 client, is maintained automatically by Mac OS X and should not be edited manu-
 ally.  Changes to the DNS configuration should be made by using the Network
 Preferences panel.

Sie sollten also in der Lage sein, etwas in die Benutzeroberfläche einzugeben, und es sollte bleiben. Ich hatte dies ein paar Mal getan, als ich den DNS-Server nicht mochte, den mein lokaler DHCP-Server bereitstellt.


Durch Ändern der DNS-Konfiguration in NetworkPreferences wird die Datei /etc/resolv.conf geändert.
Fabian Zeindl,

0

Verfügt OSX über die Konfigurationsdatei /etc/dhcp3/dhclient.conf, die normale Linux / UNIX-DHCP-Client-Konfigurationen haben?

In diesem Fall sollte eine Zeile vorhanden sein, für die Sie ein Kommentar abgeben können

prepend domain-name-servers 127.0.0.1;

Damit der DHCP-Client diese Zeile immer zu Ihrer resolv.conf hinzufügt


Das Hinzufügen zu resolv.conf hilft unter OS X nicht. Der Inhalt von resolv.conf wird generiert und selbst ist ein Symlink auf /var/run/resolv.conf, und selbst wenn ich /var/run/resolv.conf ändere, spiegelt er keine Änderungen wider .
daeltar

0

Versuchen Sie, einen zweiten Ethernet-Dienst hinzuzufügen, der mit einer statischen Adresse und 127.0.0.1 als DNS-Server konfiguriert ist. Oder fügen Sie einen Netzwerkspeicherort hinzu, der Ihren DNS-Server auf 127.0.0.1 setzt. Diese beiden Änderungen werden in den "Systemeinstellungen" unter "Netzwerk" vorgenommen.


-2

Es könnte helfen, einfach zu setzen

127.0.0.1       localhost

in / etc / hosts, daher muss es nicht aufgelöst werden, um localhost zu finden.


1
Ich brauche es für Subdomains, das ist also nein nein.
daeltar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.