dns - que - servidores de nombres
dnsmasq, sirve diferentes direcciones ip basadas en la interfaz utilizada (4)
Básicamente, mi problema es que estoy ejecutando una máquina virtual para desarrollar sitios web en.
La máquina host tiene su dns que apunta 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 salgo de mi red de trabajo a mi red doméstica, todo se interrumpe porque cambia la IP de vm. ¿Es posible servir direcciones IP diferentes según la interfaz de la que proviene la solicitud? ¿O debería tratar de abordar esto de una manera completamente diferente?
¡Gracias por tu ayuda!
Resulta que había un enfoque mucho más fácil para esto después de todo ...
Ahora instalo 2 interfaces en la VM y no necesito usar dnsmasq.
La primera es solo una interfaz puente / compartida que le permite a la VM usar la conexión a Internet disponible para el host con un reinicio de la red cada vez que me desplazo de la oficina.
El segundo es una conexión privada a mi host de VM que tiene una dirección IP estática. Esta es la interfaz que utilizo para conectar y enlazar servicios como nginx, mysql, etc.
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
Alternativamente, también puede crear múltiples archivos de configuración en /etc/dnsmasq.d/
, uno para cada interfaz en la que desee servir dhcp.
Por ejemplo, si tiene dos interfaces inalámbricas llamadas wlan0
y wlan1
, y desea servir dhcp en ellas 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 los reinicios.
Si bien la respuesta de @ kichik puede funcionar, una forma más elegante de lograr lo mismo podría ser utilizar la directiva de localise-queries
y una única instancia de servidor dnsmasq
.
Asumiré que ya configuró sus rangos DHCP para las diferentes interfaces y que ha enlazado dnsmasq
a esos.
Agregue la opción de localise-queries
(parcialmente documentada) a su archivo dnsmasq.conf
.
# /etc/dnsmasq.conf
localise-queries
Luego, asegúrese de que uno de los archivos que dnsmasq
lee para sus hosts (como /etc/hosts
) contenga entradas con las direcciones IP para ambas redes, como esto:
# /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
es especificar las direcciones en su archivo dnsmasq.conf
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.
Según la página del manual , esto hace lo siguiente:
-y, --localizar-consultas
Devuelva las respuestas a las consultas de DNS de / etc / hosts que dependen de la interfaz en la que 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, devuelva solo las direcciones en esa subred . Esto permite que un servidor tenga varias direcciones en / etc / hosts correspondientes a cada una de sus interfaces, y los hosts obtendrán la dirección correcta según la red a la que estén conectados. Actualmente esta instalación está limitada a IPv4.
Puede ejecutar dos instancias de dnsmasq
, cada una con una interfaz diferente que escucha. Puede usar las --interface=X
y --bind-interfaces
para eso. Por defecto, también vincula el dispositivo de bucle invertido y fallará si dos procesos intentan vincularlo. Use --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 comandos. También puedes usar --conf-file=/dev/null
.
Como mencioné en el comentario, no estoy muy seguro de cómo esto ayuda en su situación, pero podría ayudar a cualquier otra persona que intente obtener dos rangos de direcciones diferentes en dos interfaces diferentes.