web-dev-qa-db-fra.com

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

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.

21
grapefruyt

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.

30
eater

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 constaterez que le pont a des ports vides. (Aucune interface ne lui est liée) En liant TAP0 à br0, naturellement, il s'affichera comme le même MAC. J'ai créé un pont de test, pour illustrer.

# brctl addbr testbr0

[root @ stooge etc] # brctl show testbr0 
 nom du pont id du pont STP interfaces activées 
 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 n'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, comme 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 n'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 du pont id du pont STP interfaces activées 
 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é.

4
Lars Bailey

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

3
gelraen

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.

0
Phil Hollenback