Mit macvlan können Sie mehrere virtuelle Schnittstellen mit unterschiedlichen MAC-Adressen erstellen.
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
Theoretisch sollte das alles sein, was Sie brauchen. Irgendwann ist jedoch etwas im Kernel kaputt gegangen und es würde dazu führen, dass ein MAC für alles verwendet wird. Ich bin mir nicht sicher, wie der Status ist. hoffentlich ist es behoben.
Wenn nicht, könnten Sie arptables verwenden, um die MAC-Adressen bei der Ausgabe basierend auf der Ausgangsschnittstelle oder bei der Eingabe basierend auf der Ziel-IP neu zu schreiben:
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
Leider ist arptables meiner Erfahrung nach auch ziemlich fehlerhaft.
Der Grund, warum Ihre Bridge und Ihre TAP-Schnittstelle dieselbe MAC-Adresse haben, ist, dass die Bridge keinen MAC hat, bis sie an eine Schnittstelle gebunden ist. Wenn Sie eine Bridge mit BRCTL erstellen und eine "brctl show" durchführen, werden Sie feststellen, dass die Bridge leere Ports hat (keine Schnittstelle daran gebunden). Wenn Sie TAP0 an br0 binden, wird dies natürlich als der gleiche MAC angezeigt. Ich habe eine Testbrücke erstellt, um dies zu veranschaulichen.
# brctl addbr testbr0
Ich habe drei Test-TAPS erstellt. Die Ausgabe von "brctl showmacs testbr0".
Wie Sie sehen, hat jeder Bridge-Port eine eindeutige MAC-Adresse, und die Bridge sollte ihren MAC als erste gebundene Schnittstelle anzeigen. Wenn Sie eine physische Netzwerkschnittstelle überbrücken, übernimmt die Ethernet-Brücke ihre MAC-Adresse und verschiebt alle virtuellen Schnittstellen nach unten. Beispiel für die Bindung von eth0 an die Testbrücke.
Verwenden Sie wieder "brctl show".
Die TAP-Schnittstellen sind um eins nach unten gerückt, obwohl sich eth0 immer noch auf PORT 4 befindet. Sie haben immer noch eindeutige MAC-Adressen. Wenn die Ethernet-Bridge an eine Source-Route-Schnittstelle gebunden ist, haben Sie keine andere Wahl, als eine IP-Adresse oder DHCP zu verwenden. Wenn Sie eine Source-Route-Schnittstelle überbrücken, wird eine "nicht lokale" MAC-Adresse angezeigt. Dies ist die MAC-Adresse des Routers für den nächsten Hop. Ich weiß, dass es in RedHat eine Option gibt, eine Quell-IP mit IFCONFIG anzugeben. Meine erste Option wäre, die IP-Befehlsreferenz zu konsultieren, da ich denke, dass Sie eine Quell-IP angeben können. Ich habe es nie ausprobiert.
quelle
Versuchen Sie,
tap
Geräte oder andere virtuelle Ethernet-Geräte mit den erforderlichen MAC-Adressen und IP-Adressen zu erstellen und diese dann mit eth0 zu einer Bridge zusammenzufügen.quelle
Es sieht so aus, als könnten Sie vconfig verwenden , um mehrere vlan-Adressen auf demselben physischen Ethernet mit jeweils unterschiedlichen Mac-Adressen zu erstellen.
quelle