dnsmasq: Zuordnung von 2 MAC-Adressen zu derselben IP-Adresse


17

Ist es möglich, zwei verschiedene MAC-Adressen derselben IP-Adresse zuzuordnen?

Für mein Backup muss ich eine Verbindung vom Server zum tragbaren Gerät herstellen und möchte für die drahtlose und die kabelgebundene Schnittstelle dieselbe IP-Adresse haben.

Das openwrt-Webinterface akzeptiert nicht mehrere DHCP-Einträge mit derselben IP-Adresse, aber möglicherweise gibt es eine Problemumgehung?

Klarstellung hinzugefügt am 23. Mai :

Ich hätte klarstellen sollen, dass immer nur eine der Netzwerkschnittstellen des tragbaren Geräts mit dem Netzwerk verbunden ist (daher sollten Switches nicht verwechselt werden). Anfangs hatte ich 2 verschiedene IP-Adressen, die den Schnittstellen mit demselben DNS-Namen zugewiesen waren, aber dies funktionierte nicht sehr gut (Zeitüberschreitung, wenn ich die falsche IP erhielt). Ich möchte jedoch für beide den gleichen Namen verwenden, da er in meinem Sicherungsskript fest codiert ist.

Entschuldigung für die Verwirrung.


Ich bin mir ziemlich sicher, dass es zu Spielereien kommen wird, wenn Sie dies versuchen.
Holocryptic

Das Betriebssystem auf dem Client (und möglicherweise auch auf dem Server) könnte hier ebenfalls "Germaine" sein
Norky,

Antworten:


29

(Zufälliger, halbmeiner Kommentar: Es ist selten, dass diese hohe Anzahl an unkonstruktiven und einfachen, ungenauen Antworten und Kommentaren zu einer Frage angezeigt wird.)

Im Gegensatz zu anderen hier behaupte ich, dass Ihre Anfrage tatsächlich ziemlich elementar ist und in dnsmasq seit Version 2.46 , IIRC, unterstützt wird. Dies war der einzige Grund, warum ich von dd-wrt gewechselt bin . Nach ungefähr einem Jahr mit OpenWRT weiß ich jetzt, dass es tatsächlich noch viele weitere Gründe für einen Wechsel gibt, aber das ist nicht der springende Punkt.

Ich verwende Backfire 10.04-rc4 :

May 23 17:45:16 gateway dnsmasq[1925]: started, version 2.55 cachesize 150

Meine Konfiguration:

$ cat /etc/config/dhcp

config 'dnsmasq'
    option 'domainneeded' '1'
    option 'boguspriv' '1'
    option 'localise_queries' '1'
    option 'rebind_protection' '1'
    option 'rebind_localhost' '1'
    option 'expandhosts' '1'
    option 'authoritative' '1'
    option 'readethers' '1'
    option 'leasefile' '/tmp/dhcp.leases'
    option 'resolvfile' '/tmp/resolv.conf.auto'
    option 'enable_tftp' '1'
    option 'domain' 'domain.net'
    option 'local' '/domain.net/'

config 'dhcp' 'lan'
    option 'interface' 'lan'
    option 'start' '100'
    option 'limit' '150'
    option 'leasetime' 'infinite'

config 'dhcp' 'wan'
    option 'interface' 'wan'
    option 'ignore' '1'
    option 'dynamicdhcp' '0'

config 'dhcp'
    option 'interface' 'dmz'
    option 'start' '100'
    option 'limit' '150'
    option 'leasetime' '12h'

config 'host'
    option 'name' 'travelmate'
    option 'mac' '00:11:22:33:44:55 aa:bb:cc:dd:ee:ff'
    option 'ip' '192.168.1.111'

config 'host'
    option 'name' 'mobilitymac'
    option 'mac' '99:88:77:66:55:44 ff:ee:dd:cc:bb:aa'
    option 'ip' '192.168.1.104'

Genießen Sie den nahtlosen Übergang, den dieses Setup bietet. Alle vorhandenen Sitzungen bleiben am Leben, wenn Sie nicht zu lange mit dem Switch arbeiten.


4
Würde diese Antwort positiv bewerten, weil sie meine Frage sehr detailliert beantwortet, aber noch kein Karma hat.
sleepyMonad

Und zusätzliche Brownie-Punkte, da Luci (das Webinterface) dieses Format tatsächlich zu unterstützen scheint.
sleepyMonad

1
Letzte Nacht hatte ich zufällig eine Situation, in der ich nicht wusste, dass wlan0 noch verbunden war (Staging brcm80211 ist möglicherweise ein bisschen blockiert), als ich eth0 verband. dnsmasq hatte damit kein besonderes Problem, es hat nur eine neue IP für eth0 vergeben. Das Schlimme ist, dass Sie dann in den Router gehen müssen, dnsmasq stoppen und /tmp/dhcp.leases bearbeiten und töten müssen, damit dnsmasq in den gewünschten Betriebsmodus zurückkehrt.
lkraav

2
Um herauszufinden, was meiner Meinung nach der wichtigste Teil davon ist, können Sie mehrere MAC-Adressen in einem einzigen Eintrag (in dieser Datei oder in der Luci-Benutzeroberfläche) einfügen. Anstatt also eine Zeile mit ab:cd:ef:01:02:03und eine andere mit zu machen 04:05:06:07:08:09, machen Sie einfach einen Eintrag mit einem einzelnen Leerzeichen, das die beiden trennt, z ab:cd:ef:01:02:03 04:05:06:07:08:09.
teeks99

6

Ich habe ein bisschen recherchiert.

Das erste, was ich gelernt habe, ist, dass es möglich ist, DHCP-Leases basierend auf anderen Kriterien als einer MAC-Adresse zuzuweisen.

Aus der DHCP- FAQ :

Was ist eine Kunden-ID?

Was als Client-ID für die Zwecke des DHCP-Protokolls bezeichnet wird, ist das, was vom Protokoll zur Identifizierung des Client-Computers verwendet wird. Standardmäßig verwenden DHCP-Implementierungen für diesen Zweck normalerweise die MAC-Adresse des Clients, das DHCP-Protokoll lässt jedoch andere Optionen zu. Einige DHCP-Implementierungen verfügen über eine Setup-Option zur Angabe der gewünschten Client-ID. Eine Alternative zur MAC-Adresse ist einfach eine Zeichenfolge Ihrer Wahl. In jedem Fall müssen Sie sicher sein, dass kein anderer Client die von Ihnen gewählte Client-ID verwendet, damit DHCP funktioniert, und Sie müssen sicher sein, dass der DHCP-Server dies akzeptiert.

Dann unterstützt dnsmasq, obwohl es anscheinend nicht von der luci-Webschnittstelle unter openWRT unterstützt wird, client_id und mehrere MAC-Adressen (mit einigen Vorsichtsmaßnahmen).

Von der dnsmasq Manpage :

-G, --dhcp-host = [hwaddr] [, id: client_id | *] [, set: tag] [, ipaddr] [, hostname] [, lease_time] [, ignore] Geben Sie die Hostparameter für den DHCP-Server an . Auf diese Weise kann einem Computer mit einer bestimmten Hardwareadresse immer derselbe Hostname, dieselbe IP-Adresse und dieselbe Lease-Zeit zugewiesen werden. Ein so angegebener Hostname überschreibt den vom DHCP-Client auf dem Computer angegebenen Hostnamen. Es ist auch zulässig, die Hardwareadresse und den Hostnamen wegzulassen. In diesem Fall gelten die IP-Adresse und die Lease-Zeiten für alle Computer, die diesen Namen beanspruchen. Beispiel: --dhcp-host = 00: 20: e0: 3b: 13: af, wap, infinite weist dnsmasq an, der Maschine die Hardwareadresse 00: 20: e0: 3b: 13: af und einen unendlichen Namen zuzuweisen DHCP-Lease. --dhcp-host = lap, 192.168.0.199 weist dnsmasq an, der Maschinenrunde immer die IP-Adresse 192.168.0.199 zuzuweisen.

(...)

Es ist zulässig, Client-IDs anstelle von Hardwareadressen zu verwenden, um Hosts durch das Präfix "id:" zu identifizieren. Also: --dhcp-host = id: 01: 02: 03: 04, ..... bezieht sich auf den Host mit der Client-ID 01: 02: 03: 04. Es ist auch zulässig, die Client-ID wie folgt als Text anzugeben: --dhcp-host = id: clientidastext, .....

(...)

Als Sonderfall ist es möglich, mehr als eine Hardwareadresse anzugeben. Beispiel: --dhcp-host = 11: 22: 33: 44: 55: 66,12: 34: 56: 78: 90: 12,192.168.0.2 Dies ermöglicht die Zuordnung einer IP-Adresse zu mehreren Hardwareadressen und erteilt die Berechtigung dnsmasq Aufgeben einer DHCP-Lease an eine der Hardwareadressen, wenn eine andere nach einer Lease fragt. Beachten Sie, dass dies gefährlich ist und nur dann zuverlässig funktioniert, wenn zu einem bestimmten Zeitpunkt nur eine der Hardware-Adressen aktiv ist und dnsmasq dies nicht erzwingen kann. Es ist beispielsweise nützlich, einem Laptop, der sowohl kabelgebundene als auch kabellose Schnittstellen hat, eine stabile IP-Adresse zuzuweisen.

Ich habe mich für die Multi-Mac-Lösung entschieden (weil ich nicht herausgefunden habe, wie ich die Client-ID auf der Clientseite angeben kann, was für jeden einzelnen Client erforderlich ist, und die Multi-Mac-Alternative ist) eine Lösung für alle tragbaren Geräte im Haus.)

Ich habe die luci-Schnittstelle umgangen und die folgende Zeile direkt zu /etc/dnsmasq.conf hinzugefügt:

dhcp-hostsfile = / etc / dnsmasq-dhcphosts.conf

und /etc/dnsmasq-dhcphosts.conf enthält Zeilen des folgenden Formats:

mac1, mac2, ip

(Ich behalte diese Konfiguration in einer separaten Datei, um zu verhindern, dass sie beim nächsten Update überschrieben wird.)

Funktioniert gut.


1

Ihr Ziel: Konstanter-Hostname-des-Laptops soll immer auf die (aktive IP-Adresse / Schnittstelle des) Laptops verweisen? Ich hätte gedacht, dass der kombinierte DNS-und-DHCP-Dienst von dnsmasq dies tun würde, dh wenn ein Client ein DHCPDISCOVER / DHCPREQUEST ausführt, meldet er seinen Hostnamen und dnsmasq ordnet den Hostnamen der zugewiesenen IP-Adresse zu. Das war meine Erfahrung, aber ich muss zugeben, dass ich nicht versucht habe, eine Verbindung mit einer Netzwerkschnittstelle herzustellen, dann die Verbindung zu trennen (ohne eine explizite Freigabe vorzunehmen) und erneut eine Verbindung mit einer anderen herzustellen.

Angenommen, der Hostname lautet "laptop". Was passiert, wenn Sie das OpenWRT-Gerät nach "laptop" abfragen, nachdem Sie von einer Schnittstelle zur anderen gewechselt haben?


1

Gründe für die Verwendung von DHCP

Sie können auf beiden Schnittstellen manuell eine statische IP-Adresse konfigurieren und dann die von Ihnen bevorzugte verwenden (wobei die andere natürlich nicht verbunden bleibt).


Nun, weil dies die einfachste Methode ist, die eine Konfiguration, die zu allen Netzwerken passt, mit denen ich verbunden bin (zumindest hoffte ich das).
sleepyMonad

0

Ich wäre sehr überrascht, wenn Ihr Switch dies unterstützen kann. Möglicherweise haben Sie mehr Glück, wenn Sie beiden Netzwerkschnittstellen dieselbe MAC-Adresse zuweisen.

Wenn ich das sage, stimme ich Holocryptic definitiv zu, seien Sie hier Drachen.


Vielen Dank, dass Sie vorgeschlagen haben, denselben MAC zu verwenden. obwohl ich mir nicht sicher bin, wie ich das machen soll. Vielleicht kann ich es über das BIOS konfigurieren ...
sleepyMonad

Normalerweise ist es am einfachsten, es im Betriebssystem einzustellen. Unter Windows befindet es sich in den Eigenschaften der Netzwerkschnittstelle (MAC-Adresse manuell einstellen).
happyhairydude

0

Nein, es ist nicht möglich. Bei den meisten NICs können Sie die MAC-Adresse jedoch administrativ festlegen, und Sie können beide NICs auf dieselbe MAC-Adresse festlegen.

Bei den meisten * nix-Boxen ist dies normalerweise möglich. Richten Sie dann eine Failover-LAGG-Schnittstelle für beide ein (vorzugsweise für die kabelgebundene), damit Sie die kabelgebundene Verbindung per Hotplug verbinden können, ohne die TCP-Sitzungen zu trennen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.