OVS 接口中用于数据包过滤的 Iptables 替代方案

OVS 接口中用于数据包过滤的 Iptables 替代方案

我刚刚意识到iptables我应用于开放 Vswitch 接口的所有规则都不匹配。

我使用 iptables 来标记一些数据包,然后使用 TC(流量控制)过滤器根据 Iptables 匹配将数据包放入不同的优先级队列中。这适用于每个接口,甚至适用于 Linux 桥(使用 -m physdev 模块)。

如果我不能用 iptables 标记它们,如何过滤通过 ovs 接口的数据包并将它们放入不同的优先级队列?

规则(简化):

iptables -w -t mangle -A POSTROUTING -m physdev --physdev-out interface-name -m ttl --ttl-lt 10 ! -p 89 -j MARK --set-mark 10

tc filter add dev interface-name parent 1:0 protocol all prio 1 handle 10 fw flowid 1:10

然后我使用 HTB 作为优先级,假设有两个队列 1:10 和 1:20。该规则应将所有 ttl < 10 的流量(而不是 OSPF)发送到第一个队列 1:10。

答案1

这是一个老问题。您必须知道您的发行版如何处理 netfilter 内核模块。有时它会被加载,诀窍是创建一个规则来标记它们,然后拆分。mangle 链有点棘手。

将其添加为您的第一个标记规则:

iptables -t mangle -A POSTROUTING -m physdev --physdev-out interface-name -j MARK --set-mark 10

第二个问题是您的发行版可能无法编译和/或加载xt_mark内核模块。用于lsmod | grep xt_mark检查它是否存在。

有时我也会遇到 OVS 和 iptables 的问题。我发现 iptables 是 90 年代的一个很棒的工具,但我觉得它现在有点过时了。 “检查您的发行版如何处理 netfilter 的模块”对于理解您的问题非常重要。

如果你只是想标记你的包而 iptables 没有其他目的,你可以使用 OVS 工具,名为ovs-ofctlpkt_mark选项。

相关内容