我想使用 tc 中的 fw 过滤器对出站 UDP 数据包施加任意延迟;但是,我无法让过滤器正常工作:
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:3 handle 30: netem delay 200ms
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 1 fw flowid 1:3
iptables -A PREROUTING -i eth0 -t mangle -p udp -j MARK --set-mark 1
如果我使用以下 u32 过滤器,我会得到预期的效果:
tc filter add dev eth0 parent 1:0 protocol ip prio 3 u32 match ip dport 53 0xffff flowid 1:3
我不想使用 u32 过滤器,更令人不安的是,我无法让--ttl-set
或--set-tos
mangler 在 Ubuntu 10.04 中工作。
两者可能完全不相关,但我担心数据包没有被 iptables 标记。我一直找不到测试标记的方法。
答案1
iptables
我最终用另一个功能解决了我的问题--set-mark
:
iptables -t mangle -A POSTROUTING -o eth0 -p udp -j CLASSIFY --set-class 1:3
tc
我希望这能对某些人有所帮助,因为我在完成这个看似简单的任务之前已经辛苦处理了一段时间的复杂问题。
编辑:
Andy Smith 是正确的,我应该标记 POSTROUTING 链!以下规则应该适用于--set-mark
:
iptables -A POSTROUTING -t mangle -p udp -j MARK --set-mark 1