Imposta il server DNS su OS X anche quando non è presente una connessione Internet


17

Ho installato, configurato il server DNS (istanza locale di Dnsmasq) che si risolve in localhost come voglio, tutto a posto.

Quando vado offline, smette di funzionare, perché OS X svuota il contenuto di resolv.conf e ignora il tentativo di riflettere le modifiche in questo file.

Qualche idea, come configurare il DNS anche quando sei offline?

Problema simile (non risolto): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

La motivazione principale è lo sviluppo semplificato dell'applicazione RoR che utilizza i sottodomini come chiavi dell'account. E non puoi usare 127.0.0.1 * .yourapp.local in / etc / hosts. Qualcuno ha registrato domini smackaho.st e DNS DNS per esso come .smackaho.st a 127.0.0.1 ma ancora, non puoi usarlo quando lavori offline.

EDIT: provato il comando scutil, ma sembra che puoi cambiare DNS se offline

NOTA: quando tutte le interfacce sono inattive, non è possibile impostare i server DNS in Pref. pannello.


Correlati: dnsmasq non funziona senza connessione a Internet in OS X Yosemite su Super User (senza soluzione ma alcuni riferimenti).
Arjan,

Risposte:


29

VEDI AGGIORNAMENTO QUI SOTTO!

Mi piace anche usare Dnsmasq sul mio computer locale e ho avuto anche questo problema. Ecco la soluzione:

Da 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/non è presente per impostazione predefinita; devi crearlo tu stesso.

Anche dalla pagina man:

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.

Quindi, se si desidera che tutte le query DNS per il dominio di primo livello devvengano instradate al server dei nomi locale, è necessario:

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

configdnon modifica i file /etc/resolver/, quindi questa impostazione persisterà attraverso le modifiche e i riavvii della rete.

AGGIORNAMENTO 17 luglio 2012

Sfortunatamente, a partire da OS X Lion, il risolutore principale (come mostrato da scutil --dns) scompare quando non sono attive interfacce:

# 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

Notare che il resolver n. 1 è vuoto, ma che rimane la voce del nameserver derivata / etc / resolver.

Si scopre che poiché è possibile specificare il dominio del resolver direttamente nel file / etc / resolver /, la specifica del dominio radice Internet speciale . provoca la creazione di una voce del resolver globale che assomiglia a:

resolver #8
  nameserver[0] : 127.0.0.1

Ora tutte le query DNS vengono instradate a localhost, anche quando offline.

Ovviamente, dovrai comunque risolvere i domini scelti come 127.0.0.1 usando qualcosa come l'opzione --address di dnsmasq:

# dnsmasq --address=/dev/127.0.0.1

In sintesi:

  • Impostare tutti i server DNS dell'interfaccia di rete su 127.0.0.1:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Crea un file / etc / resolver / qualunque:
    nameserver 127.0.0.1
    dominio.
  • Imposta un server DNS locale e sii felice.

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


Questo è esattamente ciò che Pow sta usando ( pow.cx ).
daeltar,

ma sfortunatamente non funziona - github.com/37signals/pow/issues/104
daeltar

3
@guns questa soluzione funziona ancora in yosemite? dnsmasq funzionava bene per me offline fino a quando non ho effettuato l'aggiornamento. Ora tutto ciò che ottengo quando corro scutil --dnsquando non sono connesso a Internet tutto ciò che ottengo è che No DNS configuration available ho seguito le tue istruzioni sopra, ma senza fortuna
MatthewLee,

1
@MatthewLee, sì, hai ragione, sembra che l'unica soluzione sia l'aggiunta di voci nel file hosts.
Lenciel,

1
Qualcuno ha ancora trovato una soluzione per Yosemite?
jmagnusson,

2

Perché non inserire invece le voci in / etc / hosts? Ho problemi a pensare a una situazione in cui avresti effettivamente bisogno di eseguire un server DNS completo. Uso sempre le voci del file host per eseguire cose del genere sui miei Mac.

Il resolver in OS X funziona in modo diverso da quello in Linux o in altri Unix. Questo è probabilmente parte di ciò che ti sta causando dolore. Come ad esempio ha una preferenza per quale metodo di risoluzione utilizzare per primo e memorizza nella cache i risultati di tutte le query per un periodo di tempo.

Hai aggiunto il server DNS all'interfaccia nel riquadro delle preferenze di Rete? Ciò dovrebbe garantire che il resolver utilizzi quel server per le sue query qualora decidesse di cercare una voce DNS.


Un motivo per utilizzare un server d' inoltro DNS su un computer client è quello di mantenere una vasta lista nera di domini di annunci / malware senza subire la penalità delle prestazioni del daemon risolutore che annulla il file degli host ora gonfio su ogni richiesta. Nonostante i vantaggi di questo approccio, dnsmasq carica / etc / hosts in memoria dove il tempo di ricerca sarà minimo. Inoltre, se fai lo sviluppo web, ti consente di evitare il piccolo fastidio dell'aggiunta di domini locali per ogni sito su cui stai lavorando.
pistole il

1

(rispondendo a b / c non posso ancora commentare ...)

Come stai andando offline?

(migliore risposta che ho ricevuto in questo momento)

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

Quindi, dovresti essere in grado di inserire qualcosa nell'interfaccia utente e dovrebbe rimanere. L'avevo fatto un paio di volte quando non mi piaceva il server DNS fornito dal mio server DHCP locale.


La modifica della configurazione DNS in NetworkPreferences modifica il file /etc/resolv.conf.
Fabian Zeindl,

0

OSX ha il file di configurazione /etc/dhcp3/dhclient.conf che hanno le normali configurazioni client DHCP Linux / UNIX?

In tal caso, dovrebbe avere una linea per cui puoi rimuovere il commento

prepend domain-name-servers 127.0.0.1;

per fare in modo che il client DHCP aggiunga sempre quella linea a resolv.conf


L'aggiunta a resolv.conf non aiuta su OS X. Il contenuto di resolv.conf viene generato e di per sé è symlink su /var/run/resolv.conf e anche quando cambio /var/run/resolv.conf non riflette le modifiche .
Daeltar,

0

Prova ad aggiungere un secondo servizio Ethernet configurato con un indirizzo statico e 127.0.0.1 come server DNS. In alternativa, aggiungere un percorso di rete che imposta il server DNS su 127.0.0.1. Entrambe queste modifiche verrebbero apportate in "Preferenze di Sistema" nel pannello "Rete".


-2

Potrebbe aiutare a dirlo

127.0.0.1       localhost

in / etc / hosts, quindi non è necessario risolverlo per trovare localhost.


1
Ne ho bisogno per i sottodomini, quindi questo è no.
Daeltar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.