Pregunta

Básicamente, mi problema es que estoy ejecutando una VM para desarrollar sitios web.

La máquina host tiene su DNS apuntando a la VM que ejecuta DNSMASQ que resuelve las direcciones de varios sitios de desarrollo, es decir, test.mysite.vm, etc.

El problema es que cuando paso de mi red de trabajo a mi red doméstica, todo se rompe porque la IP de la VM cambia. ¿Es posible servir diferentes direcciones IP en función de de qué interfaz proviene la solicitud? ¿O debería tratar de abordar esto de una manera completamente diferente?

¡Gracias por tu ayuda!


Resulta que hubo un enfoque mucho más fácil para esto después de todo ...

Ahora configuro 2 interfaces en la VM y no necesito usar DNSMASQ.

El primero es solo una interfaz puente/compartida que permite a la VM usar cualquier conexión a Internet disponible para el host con un reinicio de la red cada vez que muevo la oficina.

El segundo es una conexión privada a mi host VM que tiene una dirección IP estática. Esta es la interfaz que utilizo para conectar y vincular cualquier servicio como NGINX, MySQL, etc.

¿Fue útil?

Solución

Puedes ejecutar dos instancias de dnsmasq, cada uno con una interfaz diferente en la que escucha. Puedes usar el --interface=X y --bind-interfaces opciones para eso. Por defecto, también une el dispositivo de bucleback lo y fallará si dos procesos intentan vincularlo. Usar --except-interface=lo para evitar eso.

dnsmasq --interface=eth0 --except-interface=lo --bind-interfaces --dhcp-range=192.168.0.2,192.168.0.10,12h
dnsmasq --interface=eth1 --except-interface=lo --bind-interfaces --dhcp-range=10.0.0.2,10.0.0.10,12h

Asegúrese de que su archivo de configuración esté vacío cuando lo pruebe, ya que siempre anula la línea de comando. También puedes usar --conf-file=/dev/null.

Como mencioné en el comentario, no estoy muy seguro de cómo esto ayuda a su situación, pero podría ayudar a cualquier otra persona que intente obtener dos rangos de dirección diferentes en dos interfaces diferentes.

Otros consejos

Agregar la interfaz al comienzo de cada parámetro funciona bien para mí. Ejemplo (en dnsmasq.conf):

dhcp-host=eth0,00:22:43:4b:18:43,192.168.0.7
dhcp-host=eth1,00:22:43:4b:18:43,192.168.1.7

Estoy usando el lanzamiento:

$ dnsmasq --version
Version de Dnsmasq 2.68  Copyright (c) 2000-2013 Simon Kelley

Si bien la respuesta de @Kichik bien puede funcionar, una forma más elegante de lograr lo mismo podría ser usar el localise-queries directiva y una sola dnsmasq instancia del servidor.

Asumiré que ya configuró sus rangos DHCP para las diferentes interfaces y que haya atado dnsmasq a aquellos.

Agregue el (parcialmente documentado) localise-queries opción a tu dnsmasq.conf expediente.

# /etc/dnsmasq.conf
localise-queries

Luego, asegúrese de que uno de los archivos que dnsmasq lee para sus anfitriones (como /etc/hosts) contiene entradas con las direcciones IP para ambas redes, como esta:

# /etc/hosts
127.0.0.1      dev-vm
192.168.1.1    dev-vm
10.0.0.1       dev-vm

Una alternativa a cambiar el /etc/hosts el archivo es especificar las direcciones en su dnsmasq.conf Archivo en su lugar:

# /etc/dnsmasq.conf
localise-queries
host-record=dev-vm,127.0.0.1
host-record=dev-vm,192.168.1.1
host-record=dev-vm,10.0.0.1

Como resultado en ambos casos, dnsmasq Servirá solo la IP que coincida con la IP y la máscara de red de la interfaz para las consultas recibidas en esa interfaz en particular.

De acuerdo con la página del hombre, esto hace lo siguiente:

-y,-queries de locales

Devuelve respuestas a consultas DNS de /etc /hosts que dependen de la interfaz sobre la cual se recibió la consulta. Si un nombre en /etc /hosts tiene más de una dirección asociada, y al menos una de esas direcciones está en la misma subred que la interfaz a la que se envió la consulta, entonces devuelve solo las direcciones en esa subred . Esto permite que un servidor tenga múltiples direcciones en /etc /hosts correspondientes a cada una de sus interfaces, y los hosts obtendrán la dirección correcta en función de a qué red están conectadas. Actualmente, esta instalación está limitada a IPv4.

Alternativamente, también puedes crear Múltiples archivos de configuración por debajo /etc/dnsmasq.d/, una para cada interfaz que desea servir DHCP.

Por ejemplo, si tiene dos interfaces inalámbricas nombradas wlan0 y wlan1, y desea servir DHCP en ellos gracias a DNSMASQ, puede crear dos archivos en /etc/dnsmasq.d/ Para configurar cada interfaz:

/etc/dnsmasq.d/dnsmasq-wlan0.conf:

interface=wlan0         # Use interface wlan0
listen-address=10.0.0.1 # Explicitly specify the address to listen on
bind-interfaces         # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8          # Forward DNS requests to Google DNS
domain-needed           # Don't forward short names
bogus-priv              # Never forward addresses in the non-routed address spaces.
dhcp-range=10.0.0.50,10.0.0.150,12h # Assign IP addresses between 10.0.0.50 and 10.0.0.150 with a 12 hour lease time

/etc/dnsmasq.d/dnsmasq-wlan1.conf:

interface=wlan1         # Use interface wlan0
listen-address=20.0.0.1 # Explicitly specify the address to listen on
bind-interfaces         # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8          # Forward DNS requests to Google DNS
domain-needed           # Don't forward short names
bogus-priv              # Never forward addresses in the non-routed address spaces.
dhcp-range=20.0.0.50,20.0.0.150,12h # Assign IP addresses between 20.0.0.50 and 20.0.0.150 with a 12 hour lease time

Para mí, esa es una forma muy limpia de configurar su sistema y hacer que la configuración persista entre reinicios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top