web-dev-qa-db-ja.com

宛先MACアドレスでiptablesを使用してパケットをマークする

指定されたMACアドレスに送信されるパケットをマークする必要があります。

tcを使用してシェイパーで使用するにはこれが必要です。

--mac-destinationiptablesに存在しません。

また、私はebtablesを使おうとしました:

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

しかし、それは何もマークしません(少なくともebtables -t nat -L --Lcは0個のカウンターを表示します)

助けてください!どうもありがとうございます!

4

秘訣は、iptables --mac-sourceCONNMARKを組み合わせることです。

  • 最初に--mac-sourceを使用して、関心のあるMACアドレスからのパケットを照合します。このMACアドレスに送信されるパケットに関心があるため、方向が間違っていますが、今では可能です。
  • CONNMARKを使用して、接続全体、つまり両方向(!)と
  • --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


当初、これはLANから発信されたtcp接続でのみ機能すると思いましたが、--state NEWの定義を考えると、tcpとudpの両方で両方向に機能するはずです(!)

送信者のMACアドレスに基づくLinuxでのポリシールーティング も参照してください。これがこの回答のインスピレーションになりました。

3
lemonsqueeze