指定されたMACアドレスに送信されるパケットをマークする必要があります。
tc
を使用してシェイパーで使用するにはこれが必要です。
--mac-destination
はiptables
に存在しません。
また、私は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個のカウンターを表示します)
助けてください!どうもありがとうございます!
秘訣は、iptables --mac-source
とCONNMARK
を組み合わせることです。
--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でのポリシールーティング も参照してください。これがこの回答のインスピレーションになりました。