dnsmasq funktioniert nicht unter Mac OS Sierra

Ich verwende dnsmasq auf einem 2016 MBP mit Mac OS Sierra (10.12.1), aber ich kann keine .dev-Adressen anpingen, obwohl ich die meiner Meinung nach richtige Konfiguration habe. Das Ausführen von dig gibt eine vernünftige Ausgabe zurück.

/usr/local/etc/dnsmasq.conf

resolv-file=/usr/local/etc/resolv-dnsmasq.conf
address=/.dev/127.0.0.1

/etc/resolver/dev

nameserver 127.0.0.1

/usr/local/etc/resolv-dnsmasq.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

Meine DNS-Serverliste in den Systemeinstellungen hat nur einen Eintrag, der auf 127.0.0.1 zeigt.

Wenn ich dig auf einer .dev-Adresse ausführe, erhalte ich die folgende Ausgabe:

; <<>> DiG 9.11.0-P1 <<>> test.dev
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36126
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;test.dev.          IN  A

;; ANSWER SECTION:
test.dev.       0   IN  A   127.0.0.1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 19 23:13:20 PST 2016
;; MSG SIZE  rcvd: 42

Ich kann externe Websites wie google.com perfekt laden, aber wenn ich versuche, auf einen lokalen Webserver zuzugreifen oder sogar eine .dev-Adresse zu pingen, schlägt dies fehl.

Hilfe wäre willkommen!

Danke für den Vorschlag. Ich habe die Zeile entfernt, aber es funktioniert leider immer noch nicht.
Welche Methode verwenden Sie, um Hostnamen zuzuweisen? Die Dateimethode /etc/hosts oder /usr/local/etc/hosts/?
Ich verwende keine dieser Dateien. Ich habe dnsmasq so konfiguriert, dass es den gesamten Datenverkehr, der dem .dev-Muster entspricht, an localhost weiterleiten sollte. Das bedeutet, dass ich nicht jede Domain, die ich umleiten möchte, manuell in meine Hosts-Datei eingeben muss.
Bitte fügen Sie diesen Teil der Datei dnsmasq.conf Ihrer Frage hinzu.
Das wäre die zweite Zeile in der Datei: address=/.dev/127.0.0.1
Hm das meinte ich nicht. Sie müssen Ihre Hostnamen irgendwo definieren (z. B. test1(.dev) > 127.0.0.1, test2(.dev) > 192.168.56.1, test1.sub(.dev)>192.168.56.2 usw.).
Ich habe festgestellt, dass es auch bei mir nicht funktioniert hat, bis ich meinen Mac neu gestartet habe und dann hat es angefangen zu funktionieren ... sogar die Verwendung dscacheutilhat nicht funktioniert. Scheint, dass macOS X die Resolver nur nach einem Hard-Reset aktualisiert.
Ich hatte die gleiche Erfahrung wie @ortonomy

Antworten (2)

Ihr dnsmasq-Daemon ist nicht richtig konfiguriert.

Ihr externer Resolver funktioniert: Alle Anfragen an Hosts /Domains, die keine Entwickler sind, werden mit der Zeile an DNS-Server von Drittanbietern weitergeleitet resolv-file=/usr/local/etc/resolv-dnsmasq.conf- in Ihrem Fall enthält die konfigurierte Datei zwei öffentliche Google-DNS-Server.

Ihr interner Resolver löst jedoch keine internen Namen auf.

Die Zeile address=/.dev/127.0.0.1oder besser address=/dev/127.0.0.1leitet jede *.dev-Anfrage an den Host 127.0.0.1 um. Ein interner Resolver wird dann nicht benötigt und der in /etc/resolver/dev definierte interne Nameserver ist nutzlos.

Vergleichen Sie dies mit dem Beispiel in der Datei dnsmasq.conf:

# Add domains which you want to force to an IP address here.
# The example below send any host in double-click.net to a local
# web-server.
#address=/double-click.net/127.0.0.1

Jede Abfrage für *.double-click.net wird an 127.0.0.1 und an eine beliebige Website umgeleitet, die auf localhost bereitgestellt wird.

Ich empfehle dringend, eine hosts.config-Datei zu definieren und dort alle notwendigen Hosts einzutragen/zu definieren:

Fügen Sie eine Zeile addn-hosts=/usr/local/etc/hosts/hosts.confin dnsmasq.conf hinzu. Fügen Sie dann einen Ordner mit hinzu sudo mkdir /usr/local/etc/hostsund erstellen Sie eine Datei hosts.conf

sudo nano /usr/local/etc/hosts/hosts.conf

mit folgendem Inhalt:

127.0.0.1   localhost
127.0.0.1   test.dev
127.0.0.1   test2.dev
...

Laden Sie nach dem Speichern der Datei Ihren dnsmasq-Daemon neu.

Wenn Sie unterschiedliche IPs für Ihre Hostnamen verwenden möchten, z. B.:

127.0.0.1   localhost
127.0.0.2   test.dev
127.0.0.3   test2.dev
...

Sie müssten zusätzliche IPs hinzufügen mit:

sudo ifconfig lo0 alias 127.0.0.2 up
sudo ifconfig lo0 alias 127.0.0.3 up
...
Ich verstehe Ihren Standpunkt, dass der interne Resolver nutzlos ist, verstehe aber nicht die Notwendigkeit der Datei hosts.conf. Wenn sich dnsmasq korrekt verhalten hat, sollte es alle Entwickleradressen an localhost weiterleiten. Alle Domains und Subdomains in einer Hostdatei fest codieren zu müssen, nimmt den Vorteil der Verwendung von dnsmasq.
@Steve Ich kenne Ihr Setup nicht, aber oft verwenden (Web-)Entwickler mehrere verschiedene Hostnamen auf dem lokalen Computer und/oder zusätzliche Hosts in VMs oder auf anderen realen Computern. Dann brauchen Sie einen einfach zu konfigurierenden und leichtgewichtigen DNS/DHCP-Server wie dnsmasq. IMHO ist der Zweck von dnsmasq nicht , nur lokale Hostnamen in localhost aufzulösen. Dies kann einfacher durch Bearbeiten von /etc/hosts direkt mit sudo nano ...oder mit einer GUI wie Gas Mask erfolgen .
Das Problem mit dem Hostdatei-Ansatz besteht darin, dass er zusammenbricht, wenn Ihre Webanwendung auf dynamisch generierte Subdomains angewiesen ist, wie die, an der ich arbeite. dnsmasq konnte mein Ziel erreichen, alles mit "dev" auf Maschinen umzuleiten, auf denen in der Vergangenheit Linux mit derselben Konfiguration ausgeführt wurde.
@Steve 1. Die DNS-Auflösung ist in OS X bekanntermaßen wackelig. 2. Ich glaube nicht, dass der Ansatz zur Namensauflösung des "Schwarzen Lochs" einem RFC-Standard folgt. 3. In meiner Test-VM funktionierte die "Namensauflösung" mit Ihrer Konfiguration für verschiedene virtuelle Apache-Hosts (test.dev, test2.dev usw.), aber IIRC pingt auch. Ich kann das Ping-Ding erneut testen, ich bin jedoch zu einem gespeicherten VM-Snapshot zurückgekehrt, ohne dass dnsmasq installiert ist, und es dauert einige Zeit, es erneut einzurichten, um das Problem weiter zu untersuchen.
Ich bin mir nicht sicher, was sich geändert hat, aber nach der Installation eines Updates für Mac OS scheint dnsmasq so zu funktionieren, wie es sollte.

Die .dev-TLD kann von Entwicklern nicht mehr als private TLD verwendet werden. Ich bin darauf gestoßen und musste die Dinge ändern, um stattdessen ".priv" oder etwas anderes zu verwenden. Die TLD ".dev" ist keine private Sache mehr, da sie jetzt Google gehört und von Chrome und anderen Browsern auf besondere Weise behandelt wird.

Es folgt ein Clip aus dem folgenden Artikel: https://www.tomshardware.com/news/google-enforces-https-tld-hsts,35564.html

„Google hat angekündigt, dass 45 der kürzlich gekauften Top-Level-Domains (TLDs), darunter .dev, .app, .eat usw., die HTTPS-Sicherheit durchsetzen und garantieren, dass alle Verbindungen zu Websites, die diese TLDs verwenden, überverschlüsselt werden Kanäle."

ths .testtld ist großartig für lokale und tatsächlich für genau diesen Fall konzipiert!