più indirizzi MAC su un'unica interfaccia di rete fisica (linux)


20

Domanda semplice: come posso impostare più indirizzi MAC su un'unica interfaccia di rete fisica (linux)?

Perché? Il mio ISP sta controllando ip <-> mac su GW e mi piacerebbe instradare il traffico attraverso la mia "linuxbox" e poi inoltrarlo con un diverso IP sorgente.

Senza controllare ip <-> mac, userò eth0, eth0: 0, ma in questa situazione ho bisogno di un indirizzo MAC univoco per ogni IP.

Risposte:


28

È possibile utilizzare macvlan per creare più interfacce virtuali con diversi indirizzi MAC.

ip link add link eth0 address 00:11:11:11:11:11 eth0.1 type macvlan
ip link add link eth0 address 00:22:22:22:22:22 eth0.2 type macvlan

In teoria dovrebbe essere tutto ciò di cui hai bisogno, anche se a un certo punto qualcosa si è rotto nel kernel e lo farebbe usare un MAC per tutto. Non sono sicuro di quale sia lo stato; si spera che sia risolto.

In caso contrario, è possibile utilizzare arptables per riscrivere gli indirizzi MAC sull'output in base all'interfaccia di uscita o sull'input in base all'IP di destinazione:

arptables -A OUT -o eth0.1 --arhln 06 -j mangle --mangle-hw-s 00:11:11:11:11:11
arptables -A OUT -o eth0.2 --arhln 06 -j mangle --mangle-hw-s 00:22:22:22:22:22
arptables -A IN -d 192.168.1.1 --arhln 06 -j mangle --mangle-hw-d 00:11:11:11:11:11
arptables -A IN -d 192.168.1.2 --arhln 06 -j mangle --mangle-hw-d 00:22:22:22:22:22

Purtroppo nella mia esperienza anche arptables è piuttosto difettoso.


1
Scusate il necropost, ma per quanto riguarda la parte "a un certo punto qualcosa si è rotto nel kernel e lo farebbe usare una parte MAC per tutto", potrebbe non essere un bug: ho dovuto impostare il parametro sintonizzabile "net.ipv4.conf .all.arp_ignore "a 1 per farlo funzionare correttamente. Potrebbero essere necessari anche altri parametri sintonizzabili ARP; per ulteriori spiegazioni, leggi questo e questo .
MoonSweep,

4

Il motivo per cui il bridge e l'interfaccia TAP condividono lo stesso indirizzo MAC, è perché il bridge non ha un MAC, fino a quando non è associato a un'interfaccia. Se crei un bridge con BRCTL e fai uno "show brctl", scoprirai che il bridge ha porte vuote. (Nessuna interfaccia vincolata ad esso) In associazione TAP0 a br0, naturalmente, mostrerà lo stesso MAC. Ho creato un ponte di prova, per illustrare.

# brctl addbr testbr0

[root @ stooge etc] # brctl show testbr0
bridge nome bridge id Interfacce abilitate STP
testbr0 8000.000000000000 n

Ho creato tre TAPS di prova. L'output di "brctl showmacs testbr0".

[root @ stooge etc] # brctl showmacs testbr0
port no mac addr è locale? timer di invecchiamento
  1 86: 51: b6: 95: 0e: b6 sì 0,00
  2 86: 58: 63: c6: d4: e7 sì 0,00
  3 8a: a7: fa: 17: c5: 12 sì 0,00

Come puoi vedere, ogni porta bridge ha un indirizzo MAC univoco e il bridge dovrebbe mostrare il proprio MAC, come primo limite dell'interfaccia. Se si collega un'interfaccia di rete fisica, il bridge Ethernet erediterà il suo indirizzo MAC e sposta tutte le interfacce virtuali verso il basso. Esempio di associazione eth0, al ponte di prova.

[root @ stooge etc] # brctl showmacs testbr0
port no mac addr è locale? timer di invecchiamento
  4 AA: BB: CC: DD: EE: FF sì 0.00
  1 86: 51: b6: 95: 0e: b6 sì 0,00
  2 86: 58: 63: c6: d4: e7 sì 0,00
  3 8a: a7: fa: 17: c5: 12 sì 0,00

Utilizzando di nuovo "brctl show";

[root @ stooge etc] # brctl show
bridge nome bridge id Interfacce abilitate STP
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        TAP01
                                                        TAP02 

le interfacce TAP ne sono state spostate di una, anche se eth0 è ancora in PORT 4. Hai ancora indirizzi MAC univoci. Se il bridge Ethernet è associato a un'interfaccia di route di origine, non è possibile scegliere di utilizzare un indirizzo IP o DHCP. Per quanto valga la pena, se si collega un'interfaccia route di origine, verrà mostrato un indirizzo MAC "non locale". Questo è l'indirizzo MAC del router successivo. So che in RedHat esiste un'opzione per specificare un IP di origine, usando IFCONFIG. La mia prima opzione sarebbe quella di consultare il riferimento al comando IP, poiché penso che sia possibile specificare un IP di origine. Non l'ho mai provato.


3

Prova a creare tapdispositivi o qualsiasi altro dispositivo Ethernet virtuale con gli indirizzi MAC e gli IP necessari e quindi collegali a un bridge con eth0.


L'ho già provato e non funziona. Se uso br0 (eth0, tap0, tap1). Devo impostare IP su br0 per far funzionare la rete. Senza IP (ifconfig br0 0.0.0.0 up) la rete non funziona. Quindi, quando imposto IP su br0 e tocco0. (da win-pc) Posso eseguire il ping di entrambi gli IP ma dopo arp -a ognuno di essi ha lo stesso MAC.
pompelmo

0

Sembra che potresti essere in grado di utilizzare vconfig per creare più indirizzi vlan sullo stesso ethernet fisico, ognuno con indirizzi mac diversi.


Il traffico da tutti gli IP deve essere senza
tag
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.