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.
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.
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é.
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.
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.