1 votos

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

He leído todas las respuestas que puedo encontrar sobre cómo configurar dnsmasq como un servidor DNS local para desarrollo. Pero no puedo hacer que funcione para mi caso. La mayoría de ellas quieren que 127.0.0.1 sea resuelto para nombres en el dominio .dev.

En mi caso, tengo una máquina virtual de VirtualBox ejecutándose en Windows en mi MacBook Air. Este Windows ejecuta SQL Server Express. Está configurado con dos interfaces - un puente de red - para compartir la interfaz wifi externa y ser un par en mi red local cuando estoy en línea. También tengo configurada una red solo-anfitrión en VirtualBox. La subred es 192.168.56.0/24 con mi Mac siendo .1 y la máquina virtual de Windows siendo .2.

dnsmasq ejecutándose en la MacBook soporta esto y desde la perspectiva de Windows hace todo perfectamente, en línea y fuera de línea. Usando su capacidad para asignar dominios completos una dirección, da .rab a 192.168.56.1 y .tig a 192.168.56.2

En la Mac misma 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 Windows (llamada abc.tig - la máquina Windows se llama Tigger). Aquí las cosas parecen no funcionar.

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

'use strict';
const dns = require('dns');
dns.lookup('abc.tig',(err,add,family) =>{
    console.log('direcciones:',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
Servidor:     127.0.0.1
Dirección:    127.0.0.1#53

Nombre:   abc.tig
Dirección: 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 que se ejecutara en todas las interfaces. En las propiedades de red para 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 'whatever' (la respuesta que leí al respecto no dejaba claro si realmente tenía que llamarse así o era solo un ejemplo) con

nameserver 127.0.0.1
domain .

en él

Obviamente hay dos procesos de resolución de nombres en funcionamiento. El mDNSResponder y dnsmasq se muestran ambos ejecutándose en mi panel de actividad. Presumo que diferentes están siendo utilizados por la terminal y por mi aplicación

¿Qué estoy haciendo mal aquí? (escribir y probar esto, actualmente estoy en línea)

(PD Tengo una configuración similar funcionando en mi máquina de desarrollo en casa ejecutando Linux perfectamente, solo quiero poder desarrollar en movimiento).

2voto

klanomath Puntos 19587

MDNSResponder y dnsmasq tienen que funcionar 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 tu entorno correctamente, sigue estos pasos:

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

Elimina cualquier servidor DNS en las preferencias de red de las máquinas virtuales en uso y reemplázalos por la dirección IP del host de la máquina virtual (tu MacBook Air).

Elimina cualquier archivo en /etc/resolver/. Por lo general, no son necesarios. Puedes mantenerlos pero probablemente deberían tener esta forma:

/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 resolver(5):

dominio
    Nombre de dominio asociado con esta configuración de resolución. Normalmente esta opción no es requerida por el sistema de búsqueda DNS de Mac OS X cuando la configuración de resolución se lee desde un archivo en el directorio /etc/resolver. En ese caso, el nombre del archivo se usa como nombre de dominio. Sin embargo, el dominio debe ser proporcionado cuando hay múltiples clientes de resolución para el mismo nombre de dominio, ya que múltiples archivos no pueden existir con el mismo nombre. Ver la sección ESTRATEGIA DE BÚSQUEDA para más detalles.

Luego edita /usr/local/etc/dnsmasq.conf y agrega/modifica

server=/rab/192.168.0.2 #tu dirección IP principal o 127.0.0.1
server=/tig/192.168.0.2 #tu dirección IP principal o 127.0.0.1
server=8.8.8.8 #enrutador
addn-hosts=/usr/local/etc/hosts/hosts.conf

Ahora agrega 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 reinicia dnsmasq con launchctl para cargar los nuevos archivos de configuración.


Dado que tu máquina virtual de Windows ya está en la red Wi-Fi puenteada, puedes eliminar completamente la red solo del host y modificar /usr/local/etc/hosts/hosts.conf:

127.0.0.1   localhost
192.168.0.2 abc.rab #Dirección IP de la interfaz Wi-Fi del MacBook Air
192.168.0.3 abc.tig #Dirección IP de la interfaz de puente de Windows

0voto

Oskar Puntos 1242

Si desea evitar toda la configuración de DNS, simplemente elija una 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 tiene la dirección 192.168.56.2

Si realmente necesita que abc.tig se resuelva, puede sobrecargar su archivo /etc/hosts con sudo -e /etc/hosts y apuntar las cosas de la siguiente manera:

abc.tig       192.168.56.2.xip.io

Espero que alguien con consejos sobre dnsmasq vea tu publicación y ofrezca alguna orientación, pero por mi parte, simplemente usar IP a través de xip.io es mucho más fácil de depurar, mantener, configurar y entender. Dedique su energía a la aplicación y no a la infraestructura para configurar la VM si su VM no maneja toda la red por usted, como docker y xhyve están trabajando para automatizar (pero aún no están ahí en mi opinión).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X