Konfigurieren Sie dnsmasq und verwenden Sie gemeinsam DHCP bereitgestelltes DNS

Ausführen von MacOX Sierra auf MacBook Pro und Einrichten der lokalen Entwicklungsumgebung mit nginx als Webserver, aber ich habe ein Problem.

Was ich machen will; was ich vorhabe zu tun

  1. Verwenden Sie dnsmasq als lokalen DNS-Server, der 127.0.0.1als Host für die Platzhalterdomäne zurückkehrt *.develop(da .dev jetzt mit ICANN kollidiert).
  2. Leiten Sie alle nicht aufgelösten Anfragen an DNS-Server weiter, die von DHCP bereitgestellt werden, wenn ich mich mit einem Netzwerk verbinde, damit ich alle anderen Hostnamen (extern und intern) auflösen kann.

Bedingungen und Einschränkungen

  1. Ich bewege mich zwischen Netzwerken. Mein Heimnetzwerk DHCP ist der DNS-Server als 192.168.1.1, aber mein Arbeits-DHCP gibt meinen DNS als an10.128.x.x
  2. Das Firmennetzwerk mit dem DNS setzt auch für interne Adressen 10.128.x.xein .search domain
  3. Google or OpenDNSIch bin in China, also 127.0.0.1kann es gut funktionieren, nur ein paar öffentliche DNS-Server einzurichten , aber sie sind international und werden von GFW gedrosselt.

Was ich bisher gemacht habe

  1. Ich habe installiert nginxund dnsmasqbenutze homebrew.
  2. Dienste, die mit sudo brew services start xxx. ) Das ist so, dass ich nginx ausführen kann port 80und nicht port 8080.)
  3. dnsmasqDirektive setzenaddress=/.develop/127.0.0.1
  4. Ich kann überprüfen, ob das dnsmasqfunktioniert, indem ich Folgendes verwende dig:

dig testing.testing.one.two.three.develop @127.0.0.1

; <<>> DiG 9.8.3-P1 <<>> testing.testing.one.two.three.develop @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46013
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;testing.testing.one.two.three.develop. IN A

;; ANSWER SECTION:
testing.testing.one.two.three.develop. 0 IN A   127.0.0.1

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jun 20 12:04:44 2017
;; MSG SIZE  rcvd: 71
  1. Das Festlegen des DNS-Servers auf 127.0.0.1in Network Preferencesfunktioniert und ich kann dies 'pingen':

Ping-Beispiel:

ping -c 1 this.is.a.test.develop
PING this.is.a.test.develop (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.036 ms

--- this.is.a.test.develop ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.036/0.036/0.036/0.000 ms

aber dann sind keine externen Dienste verfügbar, weil der einzige verfügbare DNS mein dnsmasq at ist127.0.0.1

Das Problem

  1. 127.0.0.1Es scheint, als wäre die einfache Lösung, einfach + 192.168.0.1zu meiner Netzwerkadapter-DNS-Liste hinzuzufügen . Das funktioniert zu Hause, aber nicht am Firmenstandort
  2. Das Hinzufügen des Unternehmens 10.128.x.xwürde natürlich im Büro funktionieren, aber dann nicht zu Hause
  3. So add both corporate and home DNS to the list?Dies würde dann alle anderen WLAN-/Ethernet-Verbindungen unterbrechen, weil ich ihren DHCP-DNS-Server nicht abholen würde
  4. Ich kann nicht einfach öffentliche DNS-Server hinzufügen (wie Google oder Open DNS, weil ich in China bin. Ich brauche die von DHCP bereitgestellten, da das öffentliche DNS in China sehr langsam ist).

Ich würde gerne wissen, wie andere ein scheinbar sehr häufiges Setup gelöst haben, aber ich habe Probleme.

Ich habe mir bereits zwei separate Fragen zum Stapelaustausch angesehen, die ähnliche Probleme haben , aber nicht identisch sind . Die Fragen sind am Ende dieser Frage angehängt [1], [2]. Was diese Fragen zeigen, ist, dass unter macOS /etc/resolve.confdieser Hinweis vorhanden ist:

in der Kopfzeile

#
# 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.
#

Dies deutet darauf hin, dass keine Änderungen aus dieser Datei gelesen werden, und andere Antworten auf die Fragen deuten darauf hin, dass alle darin enthaltenen Dateien /etc/resolver/*ebenfalls nicht gelesen werden

Meine eigentliche Frage ist also : Gibt es eine Möglichkeit:

  1. Verwenden Sie immer zuerst 127.0.0.1
  2. Wenn es nicht gefunden wird, verwenden Sie das dynamische DNS von dem, was DHCP bereitstellt

Warum hast du nicht einfach Hosts verwendet?

Denn die Idee, eine *.develop-Domain zu haben und dann einfach eine einzelne Site hinzuzufügen, die reguläre Ausdrücke verwendet, um lokale Sites dynamisch aufzulösen, ist sehr attraktiv!

dh some-sub-domain.develop->/Users/myuser/www/some-sub-domain/

[1] dnsmasq funktioniert nicht unter Mac OS Sierra

[2] https://serverfault.com/questions/478534/how-is-dns-lookup-configured-for-osx-mountain-lion

Antworten (1)

Antwort gefunden! Für diejenigen, die dies zum Laufen bringen möchten, insbesondere in MacOS Sierra, funktioniert die Standardlösung der Verwendung einer Resolver-Datei tatsächlich /etc/resolver/*, ohne dass die Netzwerkeinstellungen geändert werden müssen.

In meinem Fall, in dem ich wollte, dass mein lokaler Entwicklungsdomänenname lautet *.develop, habe ich eine Datei namens develop(ohne Erweiterung) mit Inhalt erstellt:

nameserver 127.0.0.1

Ich dachte, das hätte nicht funktioniert und dass macOS diese Dateien nicht liest, da ich den Befehl verwendet habe dscacheutil -flushcacheund es nicht funktioniert hat. Nur ein harter Neustart reichte aus, um das System dazu zu bringen, den lokalen Resolver zu verwenden.

Der Vollständigkeit halber ist der Inhalt meiner dnsmasq.conf-Datei:

no-resolv
address=/.develop/127.0.0.1