plusieurs adresses MAC sur une interface réseau physique (linux)

20

Question simple: comment configurer plusieurs adresses MAC sur une seule interface réseau physique (Linux)?

Pourquoi? Mon FAI vérifie ip <-> mac sur GW et j'aimerais acheminer le trafic via ma "linuxbox" et le transmettre avec une ip source différente.

Sans vérifier ip <-> mac, j'utiliserai eth0, eth0: 0, mais dans cette situation, j'ai besoin d'une adresse MAC unique pour chaque IP.

pamplemousse
la source

Réponses:

28

Vous pouvez utiliser macvlan pour créer plusieurs interfaces virtuelles avec différentes adresses 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

En théorie, cela devrait être tout ce dont vous avez besoin, bien qu'à un moment donné, quelque chose se soit cassé dans le noyau et qu'il obligerait à utiliser un MAC pour tout. Je ne sais pas quel est le statut de cela; j'espère que c'est réparé.

Sinon, vous pouvez utiliser des arptables pour réécrire les adresses MAC sur la sortie basée sur l'interface de sortie ou sur l'entrée basée sur l'IP de destination:

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

Malheureusement, arptables est également assez buggé dans mon expérience.

mangeur
la source
1
Désolé de nécropublier, mais en ce qui concerne la partie "à un moment donné, quelque chose s'est cassé dans le noyau et cela obligerait à utiliser un MAC pour tout", ce n'est peut-être pas un bug: j'ai dû définir le noyau ajustable "net.ipv4.conf .all.arp_ignore "à 1 pour que cela fonctionne correctement. D'autres réglages ARP peuvent également être nécessaires; pour plus d'explications, lisez ceci et ceci .
MoonSweep
4

La raison pour laquelle votre pont et votre interface TAP partagent la même adresse MAC est que le pont n'a pas de MAC jusqu'à ce qu'il soit lié à une interface. Si vous créez un pont avec BRCTL et faites un "show brctl", vous trouverez que le pont a des ports vides. (Aucune interface ne lui est liée) En liant TAP0 à br0, naturellement, il apparaîtra comme le même MAC. J'ai créé un pont de test, pour illustrer.

# brctl addbr testbr0

[root @ stooge etc] # brctl show testbr0
nom de pont id de pont interfaces compatibles STP
testbr0 8000.000000000000 non

J'ai créé trois TAPS de test. La sortie de "brctl showmacs testbr0".

[root @ stooge etc] # brctl showmacs testbr0
port aucun addr mac est local? minuterie de vieillissement
  1 86: 51: b6: 95: 0e: b6 oui 0,00
  2 86: 58: 63: c6: d4: e7 oui 0,00
  3 8a: a7: fa: 17: c5: 12 oui 0,00

Comme vous pouvez le voir, chaque port de pont a une adresse MAC unique, et le pont doit afficher son MAC, en tant que première interface liée. Si vous pontez une interface réseau physique, le pont Ethernet héritera de son adresse MAC et déplacera toutes les interfaces virtuelles vers le bas. Exemple de liaison eth0, au pont de test.

[root @ stooge etc] # brctl showmacs testbr0
port aucun addr mac est local? minuterie de vieillissement
  4 AA: BB: CC: DD: EE: FF oui 0,00
  1 86: 51: b6: 95: 0e: b6 oui 0,00
  2 86: 58: 63: c6: d4: e7 oui 0,00
  3 8a: a7: fa: 17: c5: 12 oui 0,00

Utiliser à nouveau "brctl show";

[root @ stooge etc] # brctl show
nom de pont id de pont interfaces compatibles STP
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        tap01
                                                        tap02 

les interfaces TAP ont baissé d'une, même si eth0 est toujours sur PORT 4. Vous avez toujours des adresses MAC uniques. Si le pont Ethernet est lié à une interface source-route, vous n'avez pas le choix d'utiliser une adresse IP ou DHCP. Pour ce que ça vaut, si vous pontez une interface source-route, vous afficherez une adresse MAC "non locale". Il s'agit de l'adresse MAC du routeur du saut suivant. Je sais que dans RedHat, il y a une option pour spécifier une IP source, en utilisant IFCONFIG. Ma première option serait de consulter la référence de commande IP, car je pense que vous pouvez spécifier une IP source. Je ne l'ai jamais essayé.

Lars Bailey
la source
3

Essayez de créer des tappériphériques ou tout autre périphérique Ethernet virtuel avec les adresses MAC et IP nécessaires, puis connectez-les à un pont avec eth0.

gelraen
la source
J'ai déjà essayé ça et ça ne marche pas. Si j'utilise br0 (eth0, tap0, tap1). Je dois définir IP sur br0 pour que le réseau fonctionne. Sans IP (ifconfig br0 0.0.0.0 up), le réseau ne fonctionne pas. Donc, quand je mets IP sur br0 et tap0. (depuis win-pc) Je peux faire un ping sur les deux IP mais après arp -a, chacun d'eux a le même MAC.
grapefruyt
0

Il semble que vous puissiez utiliser vconfig pour créer plusieurs adresses vlan sur le même Ethernet physique, chacune avec des adresses mac différentes.

Phil Hollenback
la source
Le trafic de toutes les adresses IP doit être non
balisé