Dnsmasq, servent différentes adresses IP à partir de l'interface utilisée
-
27-10-2019 - |
Question
En gros mon problème est que je suis une machine virtuelle en cours d'exécution pour le développement de sites Web sur.
La machine hôte a ses dns pointant à l'Vm qui est en cours d'exécution dnsmasq qui résout les adresses des différents sites de dev, à savoir test.mysite.vm etc.
La question est quand je vais de mon réseau de travail à mon réseau domestique, il toutes les pauses parce que la propriété intellectuelle des changements vm. Est-il possible de servir différentes adresses IP à partir de quelle interface la demande est venue? Ou devrais-je essayer de lutter contre cela d'une manière complètement différente?
Merci pour votre aide!
Turns qu'il y avait beaucoup plus facile approche à ce après tout ...
I maintenant 2Le interfaces sur la machine virtuelle et ne pas avoir besoin d'utiliser Dnsmasq.
La première est juste une interface pont / partagée qui permet à la machine virtuelle d'utiliser ce que jamais une connexion Internet est disponible à l'hôte avec un redémarrage du réseau chaque fois que je me déplace bureau.
Le 2e est une connexion privée à mon hôte VM qui a une adresse IP statique. Ceci est l'interface que j'utilise pour se connecter et de lier des services tels que nginx, MySQL, etc.
La solution
Vous pouvez exécuter deux instances de dnsmasq
, chacun avec une interface différente, il écoute. Vous pouvez utiliser les options de --interface=X
et --bind-interfaces
pour cela. Par défaut, il se lie également le dispositif de réalimentation lo
et échouera si deux processus tentent de le lier. Utilisez --except-interface=lo
pour éviter cela.
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
Assurez-vous que votre fichier de configuration est vide lorsque vous testez cela comme il l'emporte toujours la ligne de commande. Vous pouvez également utiliser --conf-file=/dev/null
.
Comme je l'ai mentionné dans le commentaire, je ne suis pas trop sûr comment cela aide votre situation, mais cela pourrait aider quelqu'un d'autre qui essaie d'obtenir deux plages d'adresses différentes sur deux interfaces différentes.
Autres conseils
Ajout de l'interface au début de chaque paramètre fonctionne bien pour moi. Exemple (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
J'utilise la sortie:
$ dnsmasq --version
Version de Dnsmasq 2.68 Copyright (c) 2000-2013 Simon Kelley
Alors que la réponse de @ Kichik peut bien fonctionner, une plus élégante façon d'atteindre le même peut-être utiliser la directive localise-queries
et une seule instance de serveur dnsmasq
.
Je suppose que vous avez déjà configuré vos gammes DHCP pour les différentes interfaces, et ont dnsmasq
lié à ceux-ci.
Ajoutez l'option localise-queries
(partiellement documenté) à votre fichier dnsmasq.conf
.
# /etc/dnsmasq.conf
localise-queries
Ensuite, assurez-vous que l'un des fichiers qui lit dnsmasq
pour vos hôtes (comme /etc/hosts
) contient des entrées avec les adresses IP pour les réseaux, comme ceci:
# /etc/hosts
127.0.0.1 dev-vm
192.168.1.1 dev-vm
10.0.0.1 dev-vm
Une alternative à la modification du fichier /etc/hosts
est de spécifier les adresses dans votre fichier dnsmasq.conf
à la place:
# /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
En conséquence dans les deux cas, dnsmasq
ne servira qu'à l'adresse IP qui correspond à IP et le masque de réseau de l'interface pour les requêtes reçues sur cette interface particulière.
Selon la page man , cela ne suit :
-y, --localise-requêtes
Retour répond aux requêtes DNS de / etc / hosts qui dépendent de l'interface sur laquelle la requête a été reçue. Si un nom dans / etc / hosts a plus d'une adresse qui lui est associée, et au moins l'une de ces adresses est sur le même sous-réseau que l'interface à laquelle a été envoyée la requête, alors ne retourne que l'adresse (s) sur ce sous-réseau . Cela permet au serveur d'avoir plusieurs adresses dans / etc / hosts correspondant à chacune de ses interfaces, et de fournir aux hôtes l'adresse correcte basée sur quel réseau ils sont attachés. Cette possibilité est actuellement limitée à IPv4.
Sinon, vous pouvez également créer plusieurs fichiers de configuration sous /etc/dnsmasq.d/
, un pour chaque interface que vous voulez servir dhcp.
Par exemple, si vous avez deux interfaces sans fil nommées wlan0
et wlan1
, et vous voulez servir dhcp sur eux grâce à Dnsmasq, vous pouvez créer deux fichiers sous /etc/dnsmasq.d/
pour configurer chaque interface:
/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
Pour moi, c'est un moyen très propre pour configurer votre système, et avoir la configuration persistent entre les redémarrages.