Configura dnsmasq e usa DNS fornito DHCP insieme

1

Esecuzione di MacOX Sierra su MacBook Pro e impostazione dell'ambiente di sviluppo locale con nginx come server Web, ma ho un problema.

Che cosa voglio fare

  1. Usa dnsmasq come server DNS locale che restituisce 127.0.0.1 come host per il dominio jolly *.develop (come .dev ora si scontra con ICANN).
  2. Inoltra qualsiasi richiesta irrisolta ai server DNS fornita da DHCP ogni volta che mi collego a una rete in modo da poter risolvere tutti gli altri nomi host (esterni e interni).

Condizioni e vincoli

  1. Mi muovo tra le reti. La mia rete domestica DHCP è il server DNS come 192.168.1.1 , ma il mio lavoro DHCP fornisce il mio DNS come 10.128.x.x
  2. La rete aziendale con 10.128.x.x DNS, imposta anche un search domain per gli indirizzi interni.
  3. Sono in Cina, quindi impostare solo un gruppo di server DNS pubblici come Google or OpenDNS e 127.0.0.1 potrebbe funzionare, ma sono internazionali e vengono rallentati da GFW.

Cosa ho fatto finora

  1. Ho installato nginx e dnsmasq utilizzando homebrew .
  2. Servizi in esecuzione utilizzando sudo brew services start xxx . ) Questo è così posso eseguire nginx su port 80 e non port 8080 .)
  3. Imposta dnsmasq direttiva address=/.develop/127.0.0.1
  4. Posso verificare che dnsmasq funzioni, utilizzando 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. L'impostazione del server DNS su 127.0.0.1 in Network Preferences funziona e posso eseguire il ping di questo:

Esempio di ping:

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

ma non sono disponibili servizi esterni perché l'unico DNS disponibile è il mio dnsmasq a 127.0.0.1

Il problema

  1. Sembra che la soluzione semplice sarebbe solo aggiungere 127.0.0.1 + 192.168.0.1 all'elenco DNS della mia scheda di rete. Funziona a casa, ma non nella sede aziendale
  2. L'aggiunta del 10.128.x.x aziendale funzionerebbe ovviamente in ufficio, ma non a casa
  3. So add both corporate and home DNS to the list? Questo quindi interromperà qualsiasi altra connessione wifi / ethernet perché non prenderei il loro server DNS DHCP
  4. Non posso semplicemente aggiungere server DNS pubblici (come Google o Open DNS, perché sono in Cina. Devo avere quelli forniti da DHCP, dato che il DNS pubblico è molto lento in Cina)

Mi piacerebbe sapere come altri hanno risolto quello che sembra un setup molto frequente, ma ho dei problemi.

Ho già esaminato due domande separate sullo scambio di stack che hanno problemi simili ma non identici . Le domande sono allegate alla fine di questa domanda [1], [2]. Ciò che queste domande mostrano sono che su macOS, /etc/resolve.conf ha questo avviso:

nell'intestazione

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

Questo suggerisce che qualsiasi modifica non verrà letta da questo file, e altre risposte dalle domande suggeriscono che anche i file in /etc/resolver/* non saranno letti

Quindi, la mia domanda reale è: c'è un modo per farlo:

  1. Utilizza sempre 127.0.0.1 prima
  2. Se non viene trovato, usa il DNS dinamico da qualunque DHCP dia

Perché non hai appena usato gli host?

Diventa l'idea di avere un dominio * .develop e quindi aggiungere semplicemente un singolo sito che utilizza espressioni regolari per risolvere dinamicamente i siti locali è molto interessante!

vale a dire. some-sub-domain.develop - > /Users/myuser/www/some-sub-domain/

[1] dnsmasq non funziona su Mac OS Sierra

[2] link

    
posta ortonomy 20.06.2017 - 06:49
fonte

1 risposta

1

Risposta trovata! Per coloro che cercano di farlo funzionare, in particolare in MacOS Sierra, la soluzione standard di utilizzare un file resolver in /etc/resolver/* funziona davvero, senza la necessità di modificare le preferenze di rete.

Nella mia istanza, dove volevo che il mio nome di dominio di sviluppo locale fosse *.develop , ho creato un file chiamato develop (senza estensione) con contenuto:

nameserver 127.0.0.1

Ho pensato che questo non avesse funzionato e che macOS non leggesse da questi file, poiché ho usato il comando dscacheutil -flushcache e non ha funzionato. Solo un riavvio forzato è stato sufficiente per avviare il sistema con il resolver locale.

Per completezza, il contenuto del mio file dnsmasq.conf è:

no-resolv
address=/.develop/127.0.0.1
    
risposta data 20.06.2017 - 08:54
fonte

Leggi altre domande sui tag