Come posso ottenere la risoluzione DNS on-line e offline per macchina virtuale e app locale utilizzando dnsmasq o simile

1

Ho letto tutte le risposte che posso trovare sull'impostazione di dnsmasq come server DNS locale per lo sviluppo. Ma non posso farlo funzionare per il mio caso. La maggior parte là fuori desidera che 127.0.0.1 sia risolto per i nomi nel dominio .dev.

Nel mio caso ho una macchina virtuale VirtualBox con Windows nel mio MacBook Air. Questo Windows esegue SQL server Express. È configurato con due interfacce - un bridge di rete - per condividere l'interfaccia wifi esterna ed essere un peer sulla mia rete locale quando sono in linea. Ho anche VirtualBox impostato su una rete host-only . Il subbnet è 192.168.56.0/24 con il mio Mac .1 e la macchina virtuale Windows .2.

dnsmasq in esecuzione su MacBook supporta questo e, da una prospettiva Windows, fa tutto perfettamente, in linea e fuori. Usando la sua capacità di assegnare domini completi a un indirizzo fornisce .rab a 192.168.56.1 e .tig a 192.168.56.2

Sul Mac stesso sto sviluppando un'applicazione nodejs, che è un server web (quindi ha bisogno di un nome di dominio - diciamo abc.rab - il mio Mac si chiama Rabbit) e per accedere al database della macchina Windows (chiamato abc. tig - La macchina Windows è chiamata Tigger). Qui le cose non sembrano funzionare.

Ho scritto un piccolo programma nodejs per testare la ricerca DNS

'use strict';
const dns = require('dns');
dns.lookup('abc.tig',(err,add,family) =>{
    console.log('addresses:',add);
});

e non riesce a trovare l'indirizzo. Eppure sul terminale questa ricerca DNS funziona

alan@rabbit:~/Documents$nslookup abc.tig
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   abc.tig
Address: 192.168.56.2

alan@rabbit:~/Documents$

In un browser web abc.rab mi dice anche che non riesce a trovare il nome del dominio.

Come ho detto, avevo impostato dnsmasq per l'esecuzione su tutte le interfacce. Nelle proprietà di rete per la mia interfaccia Wi-Fi ho impostato i nameserver come 127.0.0.1 e 8.8.8.8

In / etc / resolver ho creato un file chiamato letteralmente "qualunque cosa" (la risposta che ho letto su questo non chiarisce se è stato letteralmente chiamato così o era solo un esempio) con

nameserver 127.0.0.1
domain .

in esso

Ovviamente ci sono due processi di risoluzione dei nomi in atto. Il mDNSResponder e il dnsmasq sono entrambi mostrati in esecuzione nel mio pannello delle attività. Presumo che vengano usati diversi dal terminale e dalla mia applicazione

Che cosa sto facendo male qui? (scrivendo e testando questo sono attualmente online)

(PS Ho una configurazione simile che funziona sulla mia macchina per lo sviluppo domestico che esegue linux perfettamente funzionante - voglio solo essere in grado di sviluppare in movimento).

    
posta akc42 09.02.2016 - 16:26
fonte

2 risposte

2

mDNSResponder e dnsmasq devono eseguire entrambi: dnsmasq è il server DNS leggero (e DHCP / Router) e mDNSResponder è responsabile di tutte le query locali.

Per impostare correttamente dnsmasq in OS X nel proprio ambiente, procedere come segue:

Rimuovi qualsiasi server DNS nelle preferenze di rete dell'host dnsmasq (il tuo MacBook Air) eccetto 127.0.0.1.

Rimuovi qualsiasi server DNS nelle preferenze di rete delle VM in uso e sostituiscile con l'indirizzo IP dell'host di macchine virtuali (MacBook Air).

Rimuovi qualsiasi file in / etc / resolver /. Di solito non sono necessari. Puoi conservarli ma probabilmente dovrebbero avere questo modulo:

/ etc / resolver / rab con il contenuto

nameserver    127.0.0.1

/ etc / resolver / tig con il contenuto

nameserver    127.0.0.1

La logica alla base di ciò è menzionata in resolver (5) :

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.     However, domain must be provided when there are multiple resolver clients for the same     domain name, since multiple files may not exist having the same name. See the SEARCH     STRATEGY section for more details.

Quindi modifica /usr/local/etc/dnsmasq.conf e aggiungi / modifica

server=/rab/192.168.0.2 #your main IP-address or 127.0.0.1
server=/tig/192.168.0.2 #your main IP-address or 127.0.0.1
server=8.8.8.8 #forwarder
addn-hosts=/usr/local/etc/hosts/hosts.conf

Ora aggiungi il file hosts.conf in / usr / local / etc / hosts / con il contenuto:

127.0.0.1   localhost
192.168.56.1    abc.rab
192.168.56.2    abc.tig

Quindi riavvia dnsmasq con launchctl per caricare i nuovi file conf.

Poiché la tua VM Windows è già nella rete Wi-Fi a ponte, puoi scaricare completamente la rete solo host e modificare /usr/local/etc/hosts/hosts.conf:

127.0.0.1   localhost
192.168.0.2 abc.rab #IP-address of the MacBook Air Wi-Fi interface
192.168.0.3 abc.tig #IP-address of the Windows bridge interface
    
risposta data 09.02.2016 - 20:26
fonte
0

Se vuoi eliminare tutte le impostazioni del DNS - basta scegliere l'IP statico per tutte le macchine virtuali e le tue app si connettono ai nomi host forniti da xip.io

$ host 192.168.56.2.xip.io
192.168.56.2.xip.io has address 192.168.56.2

Se hai davvero bisogno di abc.tig da risolvere, puoi sovraccaricare il tuo file /etc/hosts con sudo -e /etc/hosts e puntare le cose come segue:

abc.tig       192.168.56.2.xip.io

Speriamo che qualcuno con i consigli di dnsmasq vedrà il tuo post e ti fornisca alcune indicazioni, ma per il mio tempo: usare IP tramite xip.io è molto più facile da eseguire il debug, la manutenzione, l'installazione e il grok. Spendi la tua energia sull'app e non sull'infrastruttura per configurare la VM se il tuo VM non gestisce tutta la rete per te come la finestra mobile e xhyve stanno lavorando per automatizzare (ma non ci sono ancora IMO).

    
risposta data 09.02.2016 - 17:16
fonte

Leggi altre domande sui tag