Pakete mit iptables nach Ziel-MAC-Adresse markieren

5839
Serhii Matrunchyk

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

Ich brauche das, um es mit Shaper zu verwenden tc.

--mac-destinationexistiert nicht in iptables.

Ich habe auch versucht zu benutzen 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 mindestens 0 Zähler)

Bitte helfen Ich danke dir sehr!

3

2 Antworten auf die Frage

2
lemonsqueeze

The trick is to combine iptables --mac-source with CONNMARK:

  • First use --mac-source to match packets coming from the mac address you're interested in. It's the wrong direction since you're interested in packets going to this mac address, but now you can
  • use CONNMARK to mark the whole connection, ie both directions (!) and
  • set the mark from the connection mark with --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 


Initially i thought this would only work for tcp connections originating from the lan, but given the definition of --state NEW it should work in both directions for both tcp and udp (!)

See also Policy Routing on Linux based on Sender MAC Address which was the inspiration for this answer.

-1
MariusMatutiae

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

Tatsächlich gibt es ein Mac-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 existiert jedoch nicht für Pakete, die über WLAN kommen, und ist für ausgehende Pakete nicht relevant. Die obige Referenz lautet:

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

Was ebtablesvor allem kann es nur mit Ethernet - Frames verwendet werden, da wifi Rahmen einen MAC addrees verpassen. Zweitens sind MAC-Quelladressen, wie ich oben gesagt habe, nicht in IP-Paketen vorhanden.

Wenn Sie ARP-Pakete steuern möchten, würden Sie schnell feststellen, dass es eine Anweisung gibt

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

Die (R) ARP-MAC-Zieladressenspezifikation

Dies ist jedoch wiederum darauf zurückzuführen, dass das ARP-Protokoll im Gegensatz zum IP-Protokoll MAC-Adressen verwendet.

Vielen Dank. Ich benutzte `ebtables -t nat -A PREROUTING -p arp --arp-mac-dst bc: 5f: f4: aa: bb: cc -j mark --mark-set 0x2003` und` ebtables -t nat -L - -Lv` zeigt keine Übereinstimmungen .. Serhii Matrunchyk vor 9 Jahren 0
Diese Antwort ist irreführend: WLAN-Netzwerke haben MAC-Adressen und "iptables --mac-source" funktioniert gut mit ihnen. Die Manpage sollte wahrscheinlich lauten "... kommt von einem Ethernet / WLAN-Gerät" lemonsqueeze vor 7 Jahren 1