¿Cómo puedo obtener la resolución de DNS en línea y fuera de línea para la máquina virtual y la aplicación local mediante dnsmasq o similar?

1

He leído todas las respuestas que puedo encontrar acerca de la configuración de dnsmasq como un servidor DNS local para el desarrollo. Pero no puedo hacer que funcione para mi caso. La mayoría de los usuarios quieren que 127.0.0.1 se resuelva para los nombres en el dominio .dev.

En mi caso, tengo una máquina virtual VirtualBox que ejecuta Windows en mi MacBook Air. Este Windows ejecuta SQL Server Express. Se configura con dos interfaces, un puente de red, para compartir la interfaz wifi externa y ser un igual en mi red local cuando estoy en línea. También tengo VirtualBox configurado una red host-only . La red secundaria es 192.168.56.0/24, con mi Mac siendo .1 y la máquina virtual de Windows siendo .2.

dnsmasq que se ejecuta en el MacBook es compatible con esto y desde una perspectiva de Windows hace todo perfectamente, en línea y apagado. Usando su capacidad para asignar dominios completos, una dirección le da .rab a 192.168.56.1 y .tig a 192.168.56.2

En la propia Mac, estoy desarrollando una aplicación nodejs, que es un servidor web (por lo que necesita un nombre de dominio, digamos abc.rab, mi Mac se llama Rabbit) y para acceder a la base de datos de la máquina de Windows (llamada abc. tig - la máquina de Windows se llama Tigger). Aquí las cosas no parecen funcionar.

Escribí un pequeño programa de nodejs para probar la búsqueda de DNS

'use strict';
const dns = require('dns');
dns.lookup('abc.tig',(err,add,family) =>{
    console.log('addresses:',add);
});

y no puede encontrar la dirección. Sin embargo, en la terminal esta búsqueda de DNS funciona

alan@rabbit:~/Documents$nslookup abc.tig
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   abc.tig
Address: 192.168.56.2

alan@rabbit:~/Documents$

En un navegador web, abc.rab también me dice que no puede encontrar el nombre de dominio.

Como dije, había configurado dnsmasq para ejecutarse en todas las interfaces. En las propiedades de red de mi interfaz Wi-Fi, he configurado los servidores de nombres como 127.0.0.1 y 8.8.8.8

En / etc / resolver, creé un archivo llamado literalmente 'lo que sea' (la respuesta que leí sobre esto no dejó claro si literalmente tenía que llamarse así o solo era un ejemplo) con

nameserver 127.0.0.1
domain .

en ella

Obviamente hay dos procesos de resolución de nombres implementados. El mDNSResponder y dnsmasq se muestran ejecutándose en mi panel de actividades. Supongo que el terminal y mi aplicación están utilizando otros diferentes

¿Qué estoy haciendo mal aquí? (Escribiendo y probando esto estoy actualmente en línea)

(PS: Tengo una configuración similar que funciona en mi máquina de desarrollo doméstico con Linux funcionando perfectamente, solo quiero poder desarrollarlo sobre la marcha).

    
pregunta akc42 09.02.2016 - 16:26

2 respuestas

2

mDNSResponder y dnsmasq deben ejecutar ambos: dnsmasq es el servidor DNS ligero (y DHCP / Router) y mDNSResponder es responsable de todas las consultas locales.

Para configurar dnsmasq en OS X en su entorno, haga lo siguiente:

Elimine cualquier servidor DNS en las preferencias de red del host dnsmasq (su MacBook Air) excepto 127.0.0.1.

Elimine cualquier servidor DNS en las preferencias de red de las máquinas virtuales en uso y reemplácelas por la dirección IP de la máquina virtual (su MacBook Air).

Eliminar cualquier archivo en / etc / resolver /. Normalmente no son necesarios. Puede mantenerlos pero probablemente deberían tener este formulario:

/ etc / resolver / rab con el contenido

nameserver    127.0.0.1

/ etc / resolver / tig con el contenido

nameserver    127.0.0.1

La lógica detrás de esto se menciona en resolución (5) :

  

dominio
       Nombre de dominio asociado a esta configuración de resolución. Esta opción normalmente no es requerida por el sistema de búsqueda de DNS de Mac OS X cuando la configuración de resolución se lee desde un archivo en / etc / resolución        directorio. En ese caso, el nombre del archivo se utiliza como nombre de dominio. Sin embargo, el dominio debe ser proporcionado        cuando hay varios clientes de resolución para el mismo nombre de dominio, ya que es posible que no existan varios archivos        teniendo el mismo nombre Consulte la sección ESTRATEGIA DE BÚSQUEDA para obtener más detalles.

Luego edite /usr/local/etc/dnsmasq.conf y agregue / modifique

server=/rab/192.168.0.2 #your main IP-address or 127.0.0.1
server=/tig/192.168.0.2 #your main IP-address or 127.0.0.1
server=8.8.8.8 #forwarder
addn-hosts=/usr/local/etc/hosts/hosts.conf

Ahora agregue el archivo hosts.conf en / usr / local / etc / hosts / con el contenido:

127.0.0.1   localhost
192.168.56.1    abc.rab
192.168.56.2    abc.tig

Luego reinicie dnsmasq con launchctl para cargar los nuevos archivos conf.

Ya que su máquina virtual de Windows ya está en la red Wi-Fi puenteada, puede volcar completamente la red solo de host y modificar /usr/local/etc/hosts/hosts.conf:

127.0.0.1   localhost
192.168.0.2 abc.rab #IP-address of the MacBook Air Wi-Fi interface
192.168.0.3 abc.tig #IP-address of the Windows bridge interface
    
respondido por el klanomath 09.02.2016 - 20:26
0

Si desea eliminar toda la configuración de DNS, simplemente elija IP estática para todas sus máquinas virtuales y haga que sus aplicaciones se conecten a los nombres de host proporcionados por xip.io

$ host 192.168.56.2.xip.io
192.168.56.2.xip.io has address 192.168.56.2

Si realmente necesita abc.tig para resolverlo, puede sobrecargar su archivo /etc/hosts con sudo -e /etc/hosts y señalar las cosas de la siguiente manera:

abc.tig       192.168.56.2.xip.io

Espero que alguien con el consejo de dnsmasq vea tu publicación y ofrezca alguna orientación, pero para mi tiempo, simplemente usar IP a través de xip.io es mucho más fácil de depurar, mantener, configurar y desarrollar. Gaste su energía en la aplicación y no en la infraestructura para configurar la máquina virtual si su vm no maneja todas las redes, como Docker y Xhyve están trabajando para automatizar (pero aún no hay IMO).

    
respondido por el bmike 09.02.2016 - 17:16

Lea otras preguntas en las etiquetas