我刚刚意识到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-ofctl有pkt_mark
选项。