1 votes

Configurer dnsmasq et utiliser ensemble le DNS fourni par DHCP

J'utilise MacOX Sierra sur MacBook Pro, et je configure un environnement de développement local avec nginx comme serveur web, mais j'ai un problème.

Ce que je veux faire

  1. Utilisez dnsmasq comme serveur DNS local qui renvoie les données. 127.0.0.1 en tant qu'hôte pour le domaine joker *.develop (car .dev est désormais en conflit avec l'ICANN).
  2. Transférer toutes les requêtes non résolues aux serveurs DNS fournis par DHCP chaque fois que je me connecte à un réseau afin de pouvoir résoudre tous les autres noms d'hôtes (externes et internes).

Conditions et contraintes

  1. Je me déplace entre les réseaux. Mon réseau domestique DHCP le serveur DNS en tant que 192.168.1.1 mais le DHCP de mon travail donne mon DNS comme étant 10.128.x.x
  2. Le réseau d'entreprise avec le 10.128.x.x DNS, fixe également un search domain pour les adresses internes.
  3. Je suis en Chine, donc il suffit de configurer un tas de serveurs DNS publics comme Google or OpenDNS ainsi que 127.0.0.1 pourrait bien fonctionner, mais ils sont internationaux et se font étouffer par la GFW.

Ce que j'ai fait jusqu'à présent

  1. J'ai installé nginx et dnsmasq en utilisant homebrew .
  2. Services fonctionnant avec sudo brew services start xxx . )C'est pour que je puisse faire fonctionner nginx sur port 80 et non port 8080 .)
  3. Définir dnsmasq directive address=/.develop/127.0.0.1
  4. Je peux vérifier que dnsmasq fonctionne, en utilisant 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. Configurer le serveur DNS pour 127.0.0.1 sur Network Preferences fonctionne et je peux le "ping" :

Exemple de 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

mais alors aucun service externe n'est disponible car le seul DNS disponible est mon dnsmasq à l'adresse 127.0.0.1

Le problème

  1. Il semble que la solution la plus simple serait de simplement ajouter 127.0.0.1 + 192.168.0.1 à la liste des DNS de mon adaptateur réseau. Cela fonctionne à la maison, mais pas au siège de l'entreprise.
  2. Ajout de l'entreprise 10.128.x.x fonctionnerait évidemment au bureau, mais pas à la maison.
  3. So add both corporate and home DNS to the list? Cela interromprait alors toute autre connexion wifi/ethernet car je ne capterais pas leur serveur DNS DHCP.
  4. Je ne peux pas simplement ajouter des serveurs DNS publics (comme Google ou Open DNS, car je suis en Chine. J'ai besoin des serveurs fournis par le DHCP, car les DNS publics sont très lents en Chine).

J'aimerais savoir comment les autres ont résolu ce qui semble être une configuration très fréquente, mais j'ai des difficultés.

J'ai déjà examiné deux questions distinctes sur l'échange de piles qui ont problèmes similaires mais pas identique . Les questions sont jointes au bas de cette question [1], [2]. Ce que ces questions montrent, c'est que sous MacOS, /etc/resolve.conf a cet avis :

dans l'en-tête

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

Cela suggère que les modifications ne seront pas lues à partir de ce fichier, et d'autres réponses aux questions suggèrent que tous les fichiers de la section /etc/resolver/* ne sera pas non plus lu

Donc, mon La vraie question est : existe-t-il un moyen de faire :

  1. Utilisez toujours 127.0.0.1 en premier.
  2. S'il n'est pas trouvé, utilisez le DNS dynamique à partir de ce que le DHCP donne.

Pourquoi n'avez-vous pas simplement utilisé des hôtes ?

Parce que l'idée d'avoir un domaine *.develop et de n'ajouter qu'un seul site qui utilise des expressions régulières pour résoudre dynamiquement les sites locaux est très attrayante !

c'est-à-dire some-sub-domain.develop -> /Users/myuser/www/some-sub-domain/

[1] dnsmasq ne fonctionne pas sur Mac OS Sierra

[2] https://serverfault.com/questions/478534/how-is-dns-lookup-configured-for-osx-mountain-lion

1voto

ortonomy Points 195

Réponse trouvée ! Pour ceux qui cherchent à faire fonctionner ce système, en particulier sous MacOS Sierra, la solution standard qui consiste à utiliser un fichier de résolution dans le dossier de l'utilisateur est la suivante /etc/resolver/* fonctionne réellement, sans qu'il soit nécessaire de modifier les préférences du réseau.

Dans mon exemple, où je voulais que le nom de domaine de développement local soit *.develop J'ai créé un fichier appelé develop (sans extension) avec le contenu :

nameserver 127.0.0.1

Je pensais que cela n'avait pas fonctionné et que MacOS ne lit pas ces fichiers, car j'ai utilisé la commande dscacheutil -flushcache et ça n'a pas marché. Seulement un redémarrage brutal était suffisant pour que le système utilise le résolveur local.

Pour être complet, le contenu de mon fichier dnsmasq.conf est :

no-resolv
address=/.develop/127.0.0.1

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X