为什么以下命令不能使用 tc 来限制端口 21 的流量?

为什么以下命令不能使用 tc 来限制端口 21 的流量?

在我寻找一种方法来限制正在运行的 bitcoind 实例的传出带宽时,我遇到了本指南这解释了如何对特定目标 IP 的流量进行速率限制:

tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit 
tc class add dev $DEV parent 1: classid 1:1 cbq rate 512kbit allot 1500 prio 5 bounded isolated 
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst 195.96.96.97 flowid 1:1

不过,我并不是想限制到某个目标 IP 的流量,而是限制进出特定端口的流量,所以我发现本指南它告诉我如何按源端口和目标端口匹配流量:

tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip dport 22 0xffff flowid 10:1
tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip sport 80 0xffff flowid 10:1

第一个脚本与第二个脚本的端口匹配相结合,得出以下一组命令,这些命令应将端口 21 的传出流量限制为 160 kbit/s。我首先使用 FTP 测试设置,因为限制使用端口 8333 的 bitcoind 并不是测试的最佳选择,因为我无法决定何时发送流量。

tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 800kbit 
tc class add dev eth0 parent 1: classid 1:1 cbq rate 160kbit allot 1500 prio 5 bounded isolated
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dport 21 0xffff flowid 1:1

据我所知,这应该限制 eth0 接口上端口 21 的传出流量,传出带宽为 800kbit/s 到 160kbit/s,但它不起作用:

NetHogs version 0.8.0

  PID USER     PROGRAM                      DEV        SENT      RECEIVED       
23653 rune     filezilla                    eth0     102.609       2.978 KB/sec

FTP 连接包含两个到端口 21 的连接:

$ netstat -n|grep "21 "
tcp        0      0 192.168.1.33:59967      194.192.207.26:21       ESTABLISHED
tcp        0      0 192.168.1.33:59974      194.192.207.26:21       ESTABLISHED

我究竟做错了什么?

我正在运行 Ubuntu Raring,以防相关。

答案1

您至少需要两类:一类是有限的,一类是“无限”的。这样您就可以将一种流量过滤到有限的类别,并将其余流量排除在外。如果您只有一类,那么所有流量都会受到限制。

相关内容