Frage

Grundsätzlich besteht mein Problem darin, dass ich eine VM zum Entwickeln von Websites betreibe.

Der DNS des Host-Computers zeigt auf die VM, auf der dnsmasq ausgeführt wird, das die Adressen verschiedener Entwicklungsstandorte auflöst, d. h.test.mysite.vm usw.

Das Problem besteht darin, dass alles kaputt geht, wenn ich von meinem Arbeitsnetzwerk zu meinem Heimnetzwerk wechsle, weil sich die IP der VM ändert.Ist es möglich, unterschiedliche IP-Adressen bereitzustellen, je nachdem, von welcher Schnittstelle die Anfrage kam?Oder sollte ich versuchen, das ganz anders anzugehen?

Vielen Dank für Ihre Hilfe!


Es stellte sich heraus, dass es dafür doch einen viel einfacheren Ansatz gab ...

Ich richte jetzt zwei Schnittstellen auf der VM ein und muss dnsmasq nicht verwenden.

Bei der ersten handelt es sich lediglich um eine überbrückte/gemeinsam genutzte Schnittstelle, die es der VM ermöglicht, jede für den Host verfügbare Internetverbindung zu nutzen und bei jedem Bürowechsel einen Neustart des Netzwerks durchzuführen.

Die zweite ist eine private Verbindung zu meinem VM-Host, der eine statische IP-Adresse hat.Dies ist die Schnittstelle, die ich verwende, um alle Dienste wie Nginx, MySQL usw. zu verbinden und zu binden.

War es hilfreich?

Lösung

Sie können zwei Fälle von ausführen dnsmasq, jeweils eine andere Schnittstelle, auf die sie hört. Du kannst den ... benutzen --interface=X und --bind-interfaces Optionen dafür. Standardmäßig bindet es auch das Loopback -Gerät lo und wird fehlschlagen, wenn zwei Prozesse versuchen, es zu binden. Verwenden --except-interface=lo Um das zu vermeiden.

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

Stellen Sie sicher, dass Ihre Konfigurationsdatei leer ist, wenn Sie dies testen, da sie die Befehlszeile immer überschreibt. Sie können auch verwenden --conf-file=/dev/null.

Wie ich in dem Kommentar erwähnt habe, bin ich mir nicht sicher, wie dies Ihrer Situation hilft, aber es könnte jedem anderen helfen, der versucht, zwei verschiedene Adressbereiche an zwei verschiedenen Schnittstellen zu erhalten.

Andere Tipps

Das Hinzufügen der Schnittstelle zu Beginn jedes Parameters funktioniert für mich einwandfrei. Beispiel (in 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

Ich benutze die Veröffentlichung:

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

Während die Antwort von @kichik durchaus funktionieren könnte, könnte ein eleganterer Weg, dasselbe zu erreichen, die Verwendung von sein localise-queries Direktive und eine Single dnsmasq Serverinstanz.

Ich gehe davon aus, dass Sie Ihre DHCP-Bereiche für die verschiedenen Schnittstellen bereits konfiguriert und gebunden haben dnsmasq an diejenigen.

Fügen Sie die (teilweise dokumentierte) localise-queries Option zu Ihrem dnsmasq.conf Datei.

# /etc/dnsmasq.conf
localise-queries

Stellen Sie dann sicher, dass eine der Dateien vorhanden ist dnsmasq liest für Ihre Hosts (z. B /etc/hosts) enthält Einträge mit den IP-Adressen für beide Netzwerke, etwa so:

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

Eine Alternative zum Wechseln /etc/hosts Die Datei besteht darin, die Adressen in Ihrer Datei anzugeben dnsmasq.conf Datei stattdessen:

# /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

Als Ergebnis gilt in beiden Fällen: dnsmasq stellt nur die IP bereit, die mit der IP und Netzmaske der Schnittstelle übereinstimmt, für Anfragen, die auf dieser bestimmten Schnittstelle empfangen werden.

Entsprechend der Manpage, das bewirkt Folgendes:

-y, --localise-queries

Gibt Antworten auf DNS-Anfragen von /etc/hosts zurück, die von der Schnittstelle abhängen, über die die Anfrage empfangen wurde.Wenn einem Namen in /etc/hosts mehr als eine Adresse zugeordnet ist und sich mindestens eine dieser Adressen im selben Subnetz befindet wie die Schnittstelle, an die die Abfrage gesendet wurde, werden nur die Adresse(n) in diesem Subnetz zurückgegeben .Dadurch kann ein Server mehrere Adressen in /etc/hosts haben, die jeder seiner Schnittstellen entsprechen, und Hosts erhalten die richtige Adresse basierend auf dem Netzwerk, mit dem sie verbunden sind.Derzeit ist diese Funktion auf IPv4 beschränkt.

Alternativ können Sie auch erstellen Mehrere Konfigurationsdateien unter /etc/dnsmasq.d/, eine für jede Schnittstelle, die Sie DHCP bedienen möchten.

Zum Beispiel, wenn Sie zwei drahtlose Schnittstellen genannt haben wlan0 und wlan1, und Sie möchten dank DNSMasq DHCP dienen, Sie können zwei Dateien unter erstellen /etc/dnsmasq.d/ So konfigurieren Sie jede Schnittstelle:

/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

Für mich ist dies ein sehr sauberer Weg, um Ihr System zu konfigurieren und die Konfiguration zwischen Neustarts bestehen zu lassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top