
Ich muss Pakete markieren, die an eine bestimmte MAC-Adresse gehen.
Ich brauche dies zur Verwendung in Shaper tc
.
--mac-destination
existiert 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 --Lc
zeigt mir zumindest 0 Zähler)
Bitte helfen Sie! Vielen Dank!
Antwort1
--mac-source
Der 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 NEW
sollte 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
iptables
arbeitet 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 ebtables
kann 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.