Markieren Sie Pakete mit iptables anhand der Ziel-Mac-Adresse

Markieren Sie Pakete mit iptables anhand der Ziel-Mac-Adresse

Ich muss Pakete markieren, die an eine bestimmte MAC-Adresse gehen.

Ich brauche dies zur Verwendung in Shaper tc.

--mac-destinationexistiert nicht in iptables.

Außerdem habe ich versucht, Folgendes zu verwenden ebtables:

ebtables -t nat -A POSTROUTING -d 9c:4e:36:aa:bb:cc -j mark --set-mark 0x2003 --mark-target ACCEPT

aber es markiert nichts ( ebtables -t nat -L --Lczeigt mir zumindest 0 Zähler)

Bitte helfen Sie! Vielen Dank!

Antwort1

--mac-sourceDer Trick besteht darin, iptables mit Folgendem zu kombinieren CONNMARK:

  • Verwenden Sie zunächst --mac-source, um Pakete abzugleichen, die von der gewünschten Mac-Adresse kommen. Das ist die falsche Richtung, da Sie an Paketen interessiert sind, die an diese Mac-Adresse gehen, aber jetzt können Sie
  • verwenden CONNMARK, um die gesamte Verbindung zu markieren, also beide Richtungen (!) und
  • setzen Sie die Markierung vom Verbindungszeichen mit--restore-mark


# lan interface
if_lan=eth0

# create 'mark_mac' table for marking connections:
iptables -t mangle -N mark_mac
iptables -t mangle -A mark_mac -j MARK --set-mark 1234
iptables -t mangle -A mark_mac -j CONNMARK --save-mark

# mark connections involving mac address:
iptables -t mangle -A PREROUTING -i $if_lan -m state --state NEW -m mac --mac-source 9c:4e:36:aa:bb:cc -j mark_mac

# mark packets going to mac:
iptables -t mangle -A POSTROUTING -o $if_lan -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark


Anfangs dachte ich, dass dies nur für TCP-Verbindungen funktionieren würde, die aus dem LAN stammen, aber laut Definition --state NEWsollte es in beide Richtungen sowohl für TCP als auch für UDP funktionieren (!).

Siehe auchRichtlinienrouting unter Linux basierend auf der Absender-MAC-Adressedas war die Inspiration für diese Antwort.

Antwort2

iptablesarbeitet auf der OSI-Schicht 3 und weiß daher überhaupt nichts über MAC-Adressen.

Tatsächlich hat es eineMac-Modul, das jedoch nur den weiteren Filter enthält --mac-source: Dies liegt daran, dass eingehende Ethernet-Pakete die MAC-Adresse ihrer Quelle tragen. Eine solche MAC-Adresse gibt es jedoch nicht für Pakete, die über WLAN eingehen, und sie ist für ausgehende Pakete nicht relevant. In der obigen Referenz heißt es:

Beachten Sie, dass dies nur für Pakete sinnvoll ist, die von einem Ethernet-Gerät kommen und in die Ketten PREROUTING, FORWARD oder INPUT gelangen.

Erstens ebtableskann es nur mit Ethernet-Frames verwendet werden, da in WLAN-Frames eine MAC-Adresse fehlt. Zweitens sind MAC-Quelladressen, wie ich oben sagte, in IP-Paketen nicht vorhanden.

Wenn Sie ARP-Pakete kontrollieren möchten, werden Sie schnell feststellen, dass es eine Anweisung gibt

arp-mac-dst [!] Adresse[/Maske]

Die (R)ARP MAC Zieladressenspezifikation

Aber auch dies liegt daran, dass das ARP-Protokolltutverwenden im Gegensatz zum IP-Protokoll MAC-Adressen.

verwandte Informationen