Configurer le serveur DNS sur OS X même sans connexion Internet


17

J'ai installé, configuré un serveur DNS (instance locale de Dnsmasq) qui se résout en localhost comme je veux, tout va bien.

Lorsque je me déconnecte, cela cesse de fonctionner, car OS X vide le contenu de resolv.conf et ignore la tentative de refléter les modifications dans ce fichier.

Une idée, comment configurer DNS même hors ligne?

Problème similaire (non résolu): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

La motivation principale est le développement aisé de l'application RoR qui utilise des sous-domaines comme clés de compte. Et vous ne pouvez pas utiliser 127.0.0.1 * .yourapp.local dans / etc / hosts. Un type a enregistré le domaine smackaho.st et le DNS srt pour cela comme .smackaho.st à 127.0.0.1 mais vous ne pouvez toujours pas l'utiliser lorsque vous travaillez hors ligne.

EDIT: a essayé la commande scutil, mais il semble que vous pouvez changer le DNS si hors ligne

REMARQUE: lorsque toutes les interfaces sont arrêtées, vous ne pouvez pas définir de serveurs DNS dans Pref. panneau.


Connexes: dnsmasq ne fonctionne pas sans connexion Internet sous OS X Yosemite sur Super User (sans solution mais quelques références).
Arjan

Réponses:


29

VOIR LA MISE À JOUR CI-DESSOUS!

J'aime également utiliser Dnsmasq sur ma machine locale et j'ai également rencontré ce problème. Voici la solution:

De 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/n'est pas présent par défaut; vous devez le créer vous-même.

Également à partir de la page de manuel:

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.

Donc, si vous vouliez que toutes les requêtes DNS pour le domaine de premier niveau devsoient acheminées vers le serveur de noms local, vous devez:

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

configdne modifie pas les fichiers /etc/resolver/, ce paramètre persistera donc lors des modifications et des redémarrages du réseau.

MISE À JOUR 17 juillet 2012

Malheureusement, depuis OS X Lion, le résolveur supérieur (comme indiqué par scutil --dns) disparaît lorsqu'aucune interface n'est active:

# 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

Notez que le résolveur # 1 est vide, mais que l'entrée de serveur de noms dérivée / etc / resolver reste.

Il s'avère que puisque vous pouvez spécifier le domaine de résolution directement dans le fichier / etc / resolver /, la spécification du domaine racine Internet spécial . provoque la création d'une entrée de résolution globale qui ressemble à:

resolver #8
  nameserver[0] : 127.0.0.1

Désormais, toutes les requêtes DNS sont acheminées vers localhost, même hors ligne.

Bien sûr, vous devrez toujours résoudre vos domaines choisis en 127.0.0.1 en utilisant quelque chose comme l'option --address de dnsmasq:

# dnsmasq --address=/dev/127.0.0.1

En résumé:

  • Définissez tous vos serveurs DNS d'interface réseau sur 127.0.0.1:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Créez un fichier / etc / resolver / que ce soit:
    serveur de noms 127.0.0.1
    domaine.
  • Configurez un serveur DNS local et soyez heureux.

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


C'est exactement ce que pow utilise ( pow.cx ).
daeltar

mais malheureusement cela ne fonctionne pas - github.com/37signals/pow/issues/104
daeltar

3
@guns cette solution fonctionne-t-elle toujours dans yosemite? dnsmasq fonctionnait bien pour moi hors ligne jusqu'à la mise à niveau. Maintenant, tout ce que je reçois lorsque je cours scutil --dnssans être connecté à Internet, c'est que No DNS configuration available j'ai suivi vos instructions ci-dessus, mais pas de chance
MatthewLee

1
@MatthewLee, oui vous avez raison, il semble que la seule solution consiste à ajouter des entrées dans le fichier hosts.
Lenciel

1
Quelqu'un a encore trouvé une solution pour Yosemite?
jmagnusson

2

Pourquoi ne pas faire les entrées dans / etc / hosts à la place? J'ai du mal à penser à une situation où vous auriez besoin d'exécuter un serveur DNS complet. J'utilise des entrées de fichier hôte tout le temps pour accomplir des choses comme ça sur mes Mac.

Le résolveur sous OS X fonctionne différemment de celui sous Linux ou d'autres Unix. Cela fait probablement partie de ce qui vous cause du chagrin. Comme par exemple, il a une préférence pour la méthode de résolution à utiliser en premier et il met en cache les résultats de toutes les requêtes pendant un certain temps.

Avez-vous ajouté le serveur DNS à l'interface dans le volet des préférences réseau? Cela devrait garantir que le résolveur utilise ce serveur pour ses requêtes s'il décide de rechercher une entrée DNS.


L'une des raisons d'utiliser un redirecteur DNS sur une machine cliente est de maintenir une grande liste noire de domaines de publicités / programmes malveillants sans subir la pénalité de performance du démon résolveur qui salue le fichier d'hôtes désormais gonflé à chaque demande. Malgré les mérites de cette approche, dnsmasq charge / etc / hosts en mémoire où le temps de recherche sera minuscule. De plus, si vous faites du développement Web, cela vous permet d'éviter les petites nuisances liées à l'ajout de domaines locaux pour chaque site sur lequel vous travaillez.
pistolets

1

(répondant b / c je ne peux pas encore commenter ...)

Comment allez-vous hors ligne?

(meilleure réponse que j'ai eue en ce moment)

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

Ainsi, vous devriez pouvoir saisir quelque chose dans l'interface utilisateur, et cela devrait rester. Je l'avais fait plusieurs fois alors que je n'aimais pas le serveur DNS fourni par mon serveur DHCP local.


La modification de la configuration DNS dans NetworkPreferences modifie le fichier /etc/resolv.conf.
Fabian Zeindl

0

OSX a-t-il le fichier de configuration /etc/dhcp3/dhclient.conf que les configurations client Linux / UNIX DHCP normales ont?

Si c'est le cas, il devrait avoir une ligne pour laquelle vous pouvez décommenter

prepend domain-name-servers 127.0.0.1;

pour que le client DHCP ajoute toujours cette ligne à votre resolv.conf


L'ajout à resolv.conf n'aide pas sous OS X. Le contenu de resolv.conf est généré et est lui-même un lien symbolique sur /var/run/resolv.conf et même lorsque je change /var/run/resolv.conf, il ne reflète pas les changements .
daeltar

0

Essayez d'ajouter un deuxième service Ethernet configuré avec une adresse statique et 127.0.0.1 comme serveur DNS. Ou, ajoutez un emplacement réseau qui définit votre serveur DNS sur 127.0.0.1. Ces deux modifications seraient apportées dans "Préférences Système" sous le panneau "Réseau".


-2

Il pourrait être utile de simplement mettre

127.0.0.1       localhost

dans / etc / hosts, il n'a donc pas besoin de résoudre pour trouver localhost.


1
J'en ai besoin pour les sous-domaines, donc ce n'est pas non.
daeltar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.