使用 tc 流量整形按 ethtype 进行过滤

使用 tc 流量整形按 ethtype 进行过滤

我正在尝试制作一个 qdisc,根据其 eth 类型过滤掉流量并丢弃指定的流量。但是我当前的过滤器无法工作并且没有捕获任何流量。

'# tc filter add dev eth2 prio 100 协议所有父级 1: u32 匹配 u16 (eth 类型) (掩码) at 12 flowid 1:2'

所以我的问题是,如何更改过滤器以便它根据 eth 类型获取流量?

答案1

参考(0 处)用于网络部分(第 3 层)。所以要获取EtherType,就在网络层之前有效载荷,在 -2 处(如果考虑使用 u16,或者在 -4 处使用 u32 和足够的掩码)。因此要匹配 EtherType 0x9000(称为环回):

tc filter add dev eth2 prio 100 protocol all parent 1: u32 match u16 0x9000 0xffff at -2 flowid 1:2

这相当于(并且实际上翻译成):

tc filter add dev eth2 prio 100 protocol all parent 1: u32 match u32 0x00009000 0x0000ffff at -4 flowid 1:2

但实际上这有点矫枉过正了。这里的参数protocol已经是一个 EtherType 过滤器,所以这就足够了:

tc filter add dev eth2 prio 100 protocol 0x9000 parent 1: matchall flowid 1:2

如果想直接drop而不进行任何其他处理,则替换flowid 1:2action drop.

相关内容