Configure dnsmasq y use el DHCP proporcionado junto con el DNS

1

Ejecutando MacOX Sierra en MacBook Pro, y configurando un entorno de desarrollo local con nginx como servidor web, pero tengo un problema.

Lo que quiero hacer

  1. Use dnsmasq como el servidor dns local que devuelve 127.0.0.1 como host para el dominio comodín *.develop (ya que .dev ahora está en conflicto con la ICANN).
  2. Reenvíe las solicitudes no resueltas a los servidores DNS proporcionadas por DHCP cada vez que me conecto a una red para que pueda resolver todos los demás nombres de host (externos e internos).

Condiciones y restricciones

  1. Me muevo entre redes. Mi red doméstica DHCP es el servidor DNS como 192.168.1.1 , pero mi trabajo DHCP da mi DNS como 10.128.x.x
  2. La red corporativa con 10.128.x.x DNS, también establece un search domain para las direcciones internas.
  3. Estoy en China, así que configurar un grupo de servidores DNS públicos como Google or OpenDNS y 127.0.0.1 puede funcionar, pero son internacionales y están acelerados por GFW.

Lo que he hecho hasta ahora

  1. He instalado nginx y dnsmasq usando homebrew .
  2. Servicios en ejecución usando sudo brew services start xxx . ) Esto es para que pueda ejecutar nginx en port 80 y no en port 8080 .)
  3. establecer la directiva dnsmasq address=/.develop/127.0.0.1
  4. Puedo verificar que dnsmasq funciona, usando 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. La configuración del servidor DNS en 127.0.0.1 en Network Preferences funciona y puedo hacer un "ping":

Ejemplo 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

pero entonces no hay servicios externos disponibles porque el único DNS disponible es mi dnsmasq en 127.0.0.1

El problema

  1. Parece que la solución simple sería simplemente agregar 127.0.0.1 + 192.168.0.1 a mi lista de DNS del adaptador de red. Eso funciona en el hogar, pero no en la ubicación corporativa
  2. Añadir el 10.128.x.x corporativo obviamente funcionaría en la oficina, pero luego no en casa
  3. So add both corporate and home DNS to the list? Esto rompería cualquier otra conexión wifi / ethernet porque no recogería su servidor DHCP DNS
  4. No puedo simplemente agregar servidores DNS públicos (como Google o Open DNS, porque estoy en China. Necesito tener los DHCP, ya que el DNS público es muy lento en China)

Me gustaría saber cómo otros han resuelto lo que parece una configuración muy frecuente, pero estoy teniendo problemas.

Ya he examinado dos preguntas separadas sobre el intercambio de pila que tienen problemas similares pero no idénticas . Las preguntas se adjuntan al final de esta pregunta [1], [2]. Lo que muestran estas preguntas es que en macOS, /etc/resolve.conf tiene este aviso:

en el encabezado

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

Esto sugiere que no se leerán las modificaciones de este archivo, y otras respuestas de las preguntas sugieren que tampoco se leerán los archivos en /etc/resolver/*

Por lo tanto, mi pregunta real es: ¿hay alguna forma de hacerlo:

  1. Siempre use 127.0.0.1 primero
  2. Si no se encuentra, use el DNS dinámico de lo que proporcione DHCP

¿Por qué no solo usaste hosts?

¡Eliminar la idea de tener un dominio * .develop y luego simplemente agregar un sitio que use expresiones regulares para resolver dinámicamente sitios locales es muy atractivo!

es decir, some-sub-domain.develop - > /Users/myuser/www/some-sub-domain/

[1] dnsmasq no funciona en Mac OS Sierra

[2] enlace

    
pregunta ortonomy 20.06.2017 - 06:49

1 respuesta

1

Respuesta encontrada! Para aquellos que buscan hacer que esto funcione, específicamente en MacOS Sierra, la solución estándar de usar un archivo de resolución en /etc/resolver/* realmente funciona, sin la necesidad de cambiar las preferencias de red.

En mi instancia, donde quería que mi nombre de dominio de desarrollo local fuera *.develop , creé un archivo llamado develop (sin extensión) con contenido:

nameserver 127.0.0.1

Pensé que esto no había funcionado y que macOS no lee de estos archivos, ya que usé el comando dscacheutil -flushcache y no funcionó. Solo un reinicio completo fue suficiente para hacer que el sistema utilice el resolvedor local.

Para completar, el contenido de mi archivo dnsmasq.conf es:

no-resolv
address=/.develop/127.0.0.1
    
respondido por el ortonomy 20.06.2017 - 08:54

Lea otras preguntas en las etiquetas