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
- 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). - 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
- 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 étant10.128.x.x
- Le réseau d'entreprise avec le
10.128.x.x
DNS, fixe également unsearch domain
pour les adresses internes. - Je suis en Chine, donc il suffit de configurer un tas de serveurs DNS publics comme
Google or OpenDNS
ainsi que127.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
- J'ai installé
nginx
etdnsmasq
en utilisanthomebrew
. - Services fonctionnant avec
sudo brew services start xxx
. )C'est pour que je puisse faire fonctionner nginx surport 80
et nonport 8080
.) - Définir
dnsmasq
directiveaddress=/.develop/127.0.0.1
- Je peux vérifier que
dnsmasq
fonctionne, en utilisantdig
:
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
- Configurer le serveur DNS pour
127.0.0.1
surNetwork 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
- 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. - Ajout de l'entreprise
10.128.x.x
fonctionnerait évidemment au bureau, mais pas à la maison. -
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. - 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 :
- Utilisez toujours 127.0.0.1 en premier.
- 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