使用 tc 速率限制除来自一个 IP 之外的所有流量

使用 tc 速率限制除来自一个 IP 之外的所有流量

目前,我有以下规则来限制端口 22 上的流量。这适用于所有流量,但是我不希望它应用于一个 IP(例如 xxxx),如何做到这一点?因此,如果流量来自 xxxx 和端口 22,则不应有任何速率限制。

        tc filter add dev eth1 parent ffff: protocol ip u32 \
              match ip sport 22 0xffff  \
              police rate 800kbit burst 24000 drop flowid :1

答案1

您可以添加一个过滤器,将该 IP 与空的 IP 相匹配行动这会将数据包分类为“通过”,而不经过进一步的过滤器。由于如果不指定优先级,则无法猜测顺序,因此两个过滤器都应该有一个优先事项(又名普里奥或者偏好) 放。因此,如果您想让 IP 192.0.2.10 免受速率限制,您可以用这两个替换您的过滤器:

tc filter add dev eth1 parent ffff: protocol ip priority 1 \
   u32 match ip src 192.0.2.10 action pass
tc filter add dev eth1 parent ffff: protocol ip priority 2 \
   u32 match ip sport 22 0xffff action police rate 800kbit burst 24000 drop flowid :1

注意警察也是一个动作,但动作关键字是可选的(而对于只有一个经过选项)。

另外,如果它仍然适合这种情况,您应该考虑对出口流量使用整形(在必须丢弃之前延迟),而不是对入口流量进行监管(仅丢弃):这可能会提高性能(避免线路上出现重复的数据包,因为滴)。

相关内容