sol*_*olo 6 networking linux iptables
我想在 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
Run Code Online (Sandbox Code Playgroud)
如果我使用以下 u32 过滤器,我会得到想要的效果:
tc filter add dev eth0 parent 1:0 protocol ip prio 3 u32 match ip dport 53 0xffff flowid 1:3
Run Code Online (Sandbox Code Playgroud)
我不想使用 u32 过滤器,更麻烦的是我无法在 Ubuntu 10.04 中使用--ttl-set或--set-tosmangler。
两者可能完全无关,但我担心数据包没有被 iptables 标记。我一直无法找到测试标记的方法。
我用另一个功能来解决我的问题iptables而不是--set-mark:
iptables -t mangle -A POSTROUTING -o eth0 -p udp -j CLASSIFY --set-class 1:3
Run Code Online (Sandbox Code Playgroud)
我希望这对某人有所帮助,因为我在完成这个看似简单的任务之前花了一段时间来解决复杂的问题tc。
编辑:
安迪·史密斯是对的,我应该标记 POSTROUTING 链!以下规则应适用于--set-mark:
iptables -A POSTROUTING -t mangle -p udp -j MARK --set-mark 1
Run Code Online (Sandbox Code Playgroud)