按目标 MAC 地址使用 iptables 标记数据包

Ser*_*hyk 6 networking nat iptables traffic-shaping

我需要标记发送到指定 MAC 地址的数据包。

我需要这个在 shaper 中使用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 个计数器)

请帮忙!太感谢了!

lem*_*eze 5

诀窍是将 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
Run Code Online (Sandbox Code Playgroud)


最初我认为这仅适用于源自 lan 的 tcp 连接,但考虑到它的定义,--state NEW它应该适用于 tcp 和 udp 的两个方向(!)

另请参阅基于发送者 MAC 地址的 Linux 上的策略路由,这是此答案的灵感来源。