mehrere MAC-Adressen auf einer physikalischen Netzwerkschnittstelle (Linux)

20

Einfache Frage: Wie kann ich mehrere MAC-Adressen auf einer physischen Netzwerkschnittstelle (Linux) einrichten?

Warum? Mein ISP überprüft ip <-> mac auf GW und ich möchte den Verkehr über meine "linuxbox" leiten und ihn dann mit einer anderen Quell-IP weiterleiten.

Ohne Überprüfung von ip <-> mac verwende ich eth0, eth0: 0, aber in dieser Situation benötige ich für jede IP eine eindeutige MAC-Adresse.

Grapefruyt
quelle

Antworten:

28

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.

Esser
quelle
1
Tut mir leid, dass ich das Nekroposting durchgeführt habe, aber in Bezug auf den Teil "Irgendwann ist etwas im Kernel kaputtgegangen, und es würde dazu führen, dass ein MAC für alles verwendet wird", kann es kein Fehler sein: Ich musste den Kernel tunable "net.ipv4.conf setzen .all.arp_ignore "auf 1 setzen, damit dies korrekt funktioniert. Möglicherweise werden auch andere ARP-Tunables benötigt. Lesen Sie dies und das, um weitere Erklärungen zu erhalten .
MoonSweep
4

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

[root @ stooge etc] # brctl show testbr0
Brückenname Brücken-ID STP-fähige Schnittstellen
testbr0 8000.000000000000 nr

Ich habe drei Test-TAPS erstellt. Die Ausgabe von "brctl showmacs testbr0".

[root @ stooge etc] # brctl showmacs testbr0
port no mac addr ist lokal? Alterungs-Timer
  1 86: 51: b6: 95: 0e: b6 yes 0.00
  2 86: 58: 63: c6: d4: e7 ja 0,00
  3 8a: a7: fa: 17: c5: 12 ja 0,00

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.

[root @ stooge etc] # brctl showmacs testbr0
port no mac addr ist lokal? Alterungs-Timer
  4 AA: BB: CC: DD: EE: FF ja 0,00
  1 86: 51: b6: 95: 0e: b6 yes 0.00
  2 86: 58: 63: c6: d4: e7 ja 0,00
  3 8a: a7: fa: 17: c5: 12 ja 0,00

Verwenden Sie wieder "brctl show".

[root @ stooge etc] # brctl show
Brückenname Brücken-ID STP-fähige Schnittstellen
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        tap01
                                                        tap02 

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.

Lars Bailey
quelle
3

Versuchen Sie, tapGerä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.

gelraen
quelle
Ich habe das schon versucht und es funktioniert nicht. Wenn ich br0 benutze (eth0, tap0, tap1). Ich muss IP auf br0 einstellen, damit das Netzwerk funktioniert. Ohne IP (ifconfig br0 0.0.0.0 up) funktioniert das Netzwerk nicht. Also, wenn ich IP auf br0 und tap0 eingestellt habe. (von win-pc) Ich kann beide IPs anpingen, aber nach arp -a hat jeder von ihnen den gleichen MAC.
Grapefruyt
0

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.

Phil Hollenback
quelle
Der
Datenverkehr