web-dev-qa-db-fra.com

dnsmasq, sert différentes adresses IP en fonction de l'interface utilisée

Fondamentalement, ma situation est que j'utilise un VM pour le développement de sites Web.

La machine hôte a son DNS pointant vers le VM qui, exécute dnsmasq, qui résout les adresses de divers sites de développement; c'est-à-dire test.mysite.vm, etc.

Le problème est que lorsque je passe de mon réseau de travail à mon réseau domestique, tout se brise car l'IP du VM change. Est-il possible de servir différentes adresses IP en fonction de l'interface de la demande ou devrais-je essayer de résoudre ce problème d'une manière complètement différente?

Merci de votre aide!


Il s'avère qu'il y avait une approche beaucoup plus facile après tout ...

J'ai maintenant mis en place 2 interfaces sur la VM, et je n'ai plus besoin d'utiliser dnsmasq.

La première est juste une interface pontée/partagée qui permet au VM d'utiliser n'importe quelle connexion Internet disponible pour l'hôte, avec un redémarrage du réseau chaque fois que je déménage.

Le 2ème est une connexion privée à mon VM Host, qui a une adresse IP statique. C'est l'interface que j'utilise pour connecter et lier tous les services tels que nginx, mysql, etc.

25
Ian Chadwick

Vous pouvez exécuter deux instances de dnsmasq, chacune avec une interface différente sur laquelle elle écoute. Vous pouvez utiliser le --interface=X et --bind-interfaces options pour cela. Par défaut, il lie également le périphérique de bouclage lo et échouera si deux processus tentent de le lier. Utilisation --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 car il remplace toujours la ligne de commande. Vous pouvez aussi utiliser --conf-file=/dev/null.

Comme je l'ai mentionné dans le commentaire, je ne sais pas trop comment cela aide votre situation, mais cela pourrait aider toute autre personne qui essaie d'obtenir deux plages d'adresses différentes sur deux interfaces différentes.

30
kichik

L'ajout de l'interface au début de chaque paramètre me convient parfaitement. Exemple (dans 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 version:

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

Alors que la réponse de @ kichik peut très bien fonctionner, une manière plus élégante d'y parvenir pourrait être d'utiliser le localise-queries directive et une seule instance de serveur dnsmasq.

Je suppose que vous avez déjà configuré vos plages DHCP pour les différentes interfaces et que vous avez lié dnsmasq à celles-ci.

Ajoutez le (partiellement documenté) localise-queries option à votre dnsmasq.conf fichier.

# /etc/dnsmasq.conf
localise-queries

Ensuite, assurez-vous que l'un des fichiers que dnsmasq lit pour vos hôtes (tels que /etc/hosts) contient des entrées avec les adresses IP pour les deux 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 au changement de /etc/hosts fichier est de spécifier les adresses dans votre dnsmasq.conf fichier à 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

Par conséquent, dans les deux cas, dnsmasq ne servira que l'IP correspondant à l'IP et au masque de réseau de l'interface pour les requêtes reçues sur cette interface particulière.

Selon la page de manuel , cela fait ce qui suit:

-y, --localise-queries

Renvoie les réponses 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 est associé à plusieurs adresses et qu'au moins une de ces adresses se trouve sur le même sous-réseau que l'interface à laquelle la requête a été envoyée, ne renvoyez que la ou les adresses de ce sous-réseau. . Cela permet à un serveur d'avoir plusieurs adresses dans/etc/hosts correspondant à chacune de ses interfaces, et les hôtes obtiendront l'adresse correcte en fonction du réseau auquel ils sont connectés. Actuellement, cette fonctionnalité est limitée à IPv4.

22
likeitlikeit

Alternativement, vous pouvez également créer plusieurs fichiers de configuration sous /etc/dnsmasq.d/, un pour chaque interface que vous souhaitez utiliser DHCP.

Par exemple, si vous avez deux interfaces sans fil nommées wlan0 et wlan1, et vous voulez leur servir dhcp 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 une façon très propre de configurer votre système et de conserver la configuration entre les redémarrages.

8
Quentin