Sous OS X, est-il possible de remplacer les serveurs DNS attribués par DHCP mais de les conserver pour le repli?

9

Par défaut, je voudrais utiliser les serveurs DNS publics google et revenir à ceux intranet lorsque ceux-ci échouent.

Est-ce possible? ... Je recherche une configuration qui ne se casserait pas lorsque je déplacerais mon ordinateur portable sans autres réseaux.

Il serait acceptable que je trouve une solution spécifique à cette connexion réseau wifi (pour ne faire l'astuce que dans ce cas, et pour utiliser les valeurs par défaut pour les autres).

Sorin
la source
Qu'est-ce que cela signifie "lorsque les serveurs DNS publics de Google échouent"? Il existe de nombreuses façons de scripter les emplacements réseau changeants et / ou simplement de scripter l'entrée de différents DNS, mais la façon dont vous testeriez l'échec de Google DNS n'est pas claire. Pire encore, le commentaire ci-dessous sur VPN compliquera encore les choses si vous ajoutez cela à votre mix d'exigences.
bmike
Je suis surpris que ce ne soit pas possible. J'ai parfois des serveurs DNS qui me sont fournis via DHCP échouent donc j'utilise ceux de Google. Cependant, je ne peux pas utiliser de réseaux qui utilisent DNS pour implémenter un portail captif maintenant. Si je pouvais avoir les serveurs fournis par DHCP comme sauvegarde, cela résoudrait cela. Avez-vous trouvé une solution?
Jake

Réponses:

4

Vous pouvez utiliser ipconfig getpacketpour trouver le serveur DNS recommandé par DHCP:

$ ipconfig getpacket en0 
...
domain_name_server (ip_mult): {192.168.3.2, 192.168.42.1}
...

Donc, en supposant que vous utilisez l' Wi-Fiadaptateur et son appareil en0, vous pouvez:

#!/bin/bash

default_servers=$( ipconfig getpacket en0 | \
   perl -ne'/domain_name_server.*: \{(.*)}/ && print join " ", split /,\s*/, $1' )
networksetup -setdnsservers Wi-Fi 127.0.0.1 $default_servers
Mark Grimes
la source
2

Oui, vous pouvez ajouter les serveurs DNS de Google en haut de la liste et les suivre avec vos propres serveurs (intranet).

  • Allez dans Préférences Système> Réseau
  • Sélectionnez votre interface réseau dans la liste de gauche
  • Cliquez sur le bouton Avancé à droite
  • Dans l' onglet DNS de la boîte de dialogue, cliquez sur "+" pour ajouter ou "-" pour supprimer les entrées (vous pouvez également modifier les entrées en double-cliquant ou en sélectionnant et en cliquant sur l'adresse)
  • Ajoutez les adresses DNS de Google en tant que deux premières entrées
  • Ajoutez vos serveurs DNS intranet en dessous de ceux
  • Cliquez OK
  • Cliquez sur Appliquer
  • Fermer les préférences système
MK
la source
1
Je le sais, mais le problème est que cela me rend impossible d'utiliser le même VPN à partir d'un autre emplacement. Ce devrait être une autre solution, peut-être quelque chose à configurer dans le serveur VPN (PPTP) ou à configurer un DNS avec une adresse 127.0.0.1 et à configurer un DNS local qui utilise toujours les serveurs DNS fournis par DHCP.
Sorin
1

Il existe également un moyen de le faire à partir de la ligne de commande si vous êtes un administrateur réseau à la recherche d'un moyen de le faire dans un lot:

networksetup listallnetworkservices
# look for the correct network device here, probably "Wi-Fi"
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4

Remplacez «Wi-Fi» par le bon appareil réseau. Vous pouvez, à la place, souhaiter utiliser:

device=`networksetup listallnetworkservices | grep Wi-Fi`
sudo networksetup -setdnsservers "$device" 8.8.8.8 8.8.4.4
Cory
la source
1

J'essaye de faire pareil. Je vais exécuter manuellement un serveur DNS de mise en cache localement et lui faire apprendre les intranets lorsque je me joins.

Je suis ravi que le serveur DNS puisse même faire la différence entre les noms d'hôte intranet et Internet avant d'effectuer l'appel récursif.

Je crains d'avoir besoin de TTL courts ou d'écrire des hooks pour que chaque fois qu'une interface change, je pense à vider le cache DNS, ou similaire.

Je ferai rapport en cas de succès ...

Les 50 premiers%

Après avoir regardé la comparaison Wikipedia des serveurs DNS , Dnsmasq arrive en haut de ma liste.

Il s'avère qu'il y brewa un forumla pour dnsmasq, et il a même une servicessous-interface écrite pour brew... génial, moins de réflexion, il suffit de travailler sur la config.

$ brew install dnsmasq  # [libidn] internation domain names
$ cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
# To have launchd start dnsmasq now and restart at startup:
$ sudo brew services start dnsmasq 

(a brewégalement bind, mais l'état minimal est aussi attrayant pour moi - ne pas avoir à l'effacer lors de la configuration du réseau).

Faire

  • Comprendre la configuration des préférences réseau pour utiliser mes nouveaux DNS, et
  • Configurez dnsmasqpour vous assurer qu'il peut utiliser les paramètres intranet. (le vrai défi)
mcint
la source