dnsmasq: mappatura di 2 indirizzi MAC sullo stesso indirizzo IP


17

È possibile mappare 2 indirizzi MAC diversi sullo stesso indirizzo IP?

Per il mio backup, devo riconnettermi dal server al portatile e vorrei avere lo stesso IP sia per l'interfaccia wireless che per quella cablata.

L'interfaccia web openwrt non accetta più voci dhcp con lo stesso indirizzo IP, ma forse c'è una soluzione?

Chiarimento aggiunto il 23 maggio :

Avrei dovuto chiarire che solo una delle interfacce di rete del portatile è connessa alla rete in un dato momento (quindi gli switch non dovrebbero essere confusi). Inizialmente avevo 2 indirizzi IP distinti assegnati alle interfacce, con lo stesso nome DNS, ma questo non funzionava molto bene (timeout quando ho ottenuto l'IP sbagliato). Tuttavia, voglio usare lo stesso nome per entrambi, poiché è codificato nel mio script di backup.

Dispiace per la confusione.


Sono abbastanza sicuro che se provi questo, ne conseguiranno shenanigans.
Olocryptic,

Anche il sistema operativo sul client (e forse sul server) potrebbe essere germaine qui
Norky,

Risposte:


29

(commento casuale semi-supponente: è raro vedere questo conteggio altissimo di risposte e commenti imprecisi e non accurati a una domanda)

Contrariamente ad altri qui, sostengo che la tua richiesta è in realtà abbastanza elementare ed è stata supportata in dnsmasq dalla versione 2.46 , IIRC. Questa è stata l'unica ragione per cui sono passato da dd-wrt . Dopo circa un anno di esecuzione di OpenWRT, ora so che in realtà ci sono molte altre ragioni per cambiare, ma questo è il punto.

Sto eseguendo Backfire 10.04-rc4 :

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

La mia configurazione:

$ 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'

Goditi la transizione senza soluzione di continuità offerta da questa configurazione, tutte le sessioni esistenti rimangono in vita se non impieghi troppo tempo con l'interruttore.


4
Voterebbe questa risposta, perché risponde alla mia domanda in modo molto dettagliato, ma non ho ancora il karma.
sleepyMonad,

E punti extra brownie, poiché luci (l'interfaccia web) sembra effettivamente supportare questo formato.
sleepyMonad,

1
Ieri sera mi è capitato di avere una situazione in cui non sapevo che wlan0 fosse ancora collegato (la messa in scena di brcm80211 potrebbe essere un po 'b0rked) quando si connetteva eth0. dnsmasq non ha avuto particolari problemi con questo, ha semplicemente assegnato un nuovo IP per eth0. La cosa brutta è che devi andare nel router, interrompere dnsmasq e modificare / kill /tmp/dhcp.leases, riavviare dnsmasq affinché le cose tornino alla modalità operativa desiderata.
lkraav,

2
Per distillare ciò che penso sia la parte importante di ciò, puoi includere più indirizzi MAC in una singola voce (in questo file o nell'interfaccia luci). Quindi, invece di creare una linea con ab:cd:ef:01:02:03e un'altra con 04:05:06:07:08:09, è sufficiente fare una voce con un singolo spazio che separa le due, ad es ab:cd:ef:01:02:03 04:05:06:07:08:09.
teeks99,

6

Ho fatto un po 'di ricerche.

La prima cosa che ho imparato è che è possibile assegnare i lease DHCP in base a criteri diversi da un indirizzo MAC.

Dalle FAQ su dhcp :

Che cos'è un ID cliente?

Quello che viene definito l'ID client ai fini del protocollo DHCP è tutto ciò che viene utilizzato dal protocollo per identificare il computer client. Per impostazione predefinita, le implementazioni DHCP in genere utilizzano l'indirizzo MAC del client per questo scopo, ma il protocollo DHCP consente altre opzioni. Alcune implementazioni DHCP hanno un'opzione di installazione per specificare l'ID client desiderato. Un'alternativa all'indirizzo MAC è semplicemente una stringa di caratteri a scelta. In ogni caso, affinché DHCP funzioni, è necessario essere certi che nessun altro client stia utilizzando l'ID client scelto e che il server DHCP lo accetti.

Quindi, sebbene apparentemente non sia supportato dall'interfaccia web di luci su openWRT, dnsmasq stesso supporta client_id e più indirizzi MAC (con qualche avvertimento).

Dalla pagina man di dnsmasq :

-G, --dhcp-host = [hwaddr] [, id: client_id | *] [, set: tag] [, ipaddr] [, hostname] [, lease_time] [, ignore] Specifica i parametri per host per il server DHCP . Ciò consente a una macchina con un determinato indirizzo hardware di assegnare sempre lo stesso nome host, indirizzo IP e tempo di leasing. Un nome host specificato in questo modo sostituisce qualsiasi fornito dal client DHCP sulla macchina. È anche possibile inserire l'indirizzo hardware e includere il nome host, nel qual caso l'indirizzo IP e i tempi di noleggio si applicheranno a qualsiasi macchina che rivendichi quel nome. Ad esempio --dhcp-host = 00: 20: e0: 3b: 13: af, wap, infinite dice a dnsmasq di dare alla macchina l'indirizzo hardware 00: 20: e0: 3b: 13: af il nome wap e un infinito Leasing DHCP. --dhcp-host = lap, 192.168.0.199 dice a dnsmasq di allocare sempre sul giro macchina l'indirizzo IP 192.168.0.199.

(...)

È consentito utilizzare identificativi client anziché indirizzi hardware per identificare gli host con il prefisso "id:". Pertanto: --dhcp-host = id: 01: 02: 03: 04, ..... si riferisce all'host con identificativo client 01: 02: 03: 04. È anche consentito specificare l'ID client come testo, in questo modo: --dhcp-host = id: clientidastext, .....

(...)

Come caso speciale, è possibile includere più di un indirizzo hardware. ad es .: --dhcp-host = 11: 22: 33: 44: 55: 66,12: 34: 56: 78: 90: 12.192.168.0.2 Ciò consente di associare un indirizzo IP a più indirizzi hardware e concede l'autorizzazione dnsmasq abbandonare un lease DHCP a uno degli indirizzi hardware quando un altro richiede un lease. Attenzione che questa è una cosa pericolosa da fare, funzionerà in modo affidabile solo se uno degli indirizzi hardware è attivo in qualsiasi momento e non c'è modo per dnsmasq di imporlo. Ad esempio, è utile allocare un indirizzo IP stabile a un laptop con interfacce sia cablate che wireless.

Ho optato per la soluzione multi-mac (perché non ho provato a scoprire come avrei potuto specificare l'id client sul lato client, cosa che deve essere fatta per ciascun client separato, e l'alternativa multi-mac è una soluzione per tutti i portatili in casa.)

Ho eluso l'interfaccia di luci e ho aggiunto direttamente a /etc/dnsmasq.conf la seguente riga:

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

e /etc/dnsmasq-dhcphosts.conf contiene righe del seguente formato:

MAC1, mac2, ip

(Conservo questa configurazione in un file separato per evitare che venga sovrascritto dal prossimo aggiornamento.)

Funziona bene.


1

Il tuo obiettivo: avere un hostname costante di laptop puntare sempre al (indirizzo IP / interfaccia IP attivo) del laptop? Avrei pensato che il servizio DNS e DHCP combinato di dnsmasq lo avrebbe fatto, vale a dire quando un client fa un DHCPDISCOVER / DHCPREQUEST riporta il suo nome host e dnsmasq associa il nome host a qualunque indirizzo IP sia assegnato. Questa è stata la mia esperienza, tuttavia devo ammettere che non ho provato a collegarmi con una rete i / f, quindi a disconnettermi (senza fare una versione esplicita) e riconnettermi con un'altra.

Supponendo un nome host di "laptop", cosa succede quando si esegue una query sul dispositivo OpenWRT per "laptop", dopo essere passati da un'interfaccia all'altra?


1

Perché usare DHCP?

Puoi configurare manualmente un indirizzo IP statico su entrambe le interfacce e quindi usare quello che preferisci (lasciando ovviamente l'altro disconnesso).


Bene, perché questo è il metodo più semplice, quello di configurazione che si adatta a tutte le reti a cui mi connetto (o almeno così speravo).
sleepyMonad,

0

Sarei molto sorpreso se il tuo switch può supportare questo. Potresti avere più fortuna nel dare a entrambe le interfacce di rete lo stesso indirizzo MAC.

Detto questo, sono assolutamente d'accordo con Holocryptic, ecco i draghi.


grazie per aver suggerito di usare lo stesso MAC; anche se non sono sicuro di come farlo. Forse è qualcosa che posso configurare dal BIOS ...
sleepyMonad,

Normalmente è più semplice impostarlo nel sistema operativo, su Windows è nelle proprietà dell'interfaccia di rete (impostare manualmente l'indirizzo MAC).
happyhairydude,

0

No, non è possibile. Ma la maggior parte delle schede di rete consente di impostare in modo amministrativo il MAC e è possibile impostare entrambe le schede di rete sullo stesso MAC.

Sulla maggior parte delle * nix boxen di solito è possibile farlo, quindi impostare un'interfaccia LAGG di failover su entrambi (con preferenza per il cavo) per consentire di collegare a caldo la connessione cablata senza disconnettere le sessioni TCP.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.