在我寻找一种方法来限制正在运行的 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
您至少需要两类:一类是有限的,一类是“无限”的。这样您就可以将一种流量过滤到有限的类别,并将其余流量排除在外。如果您只有一类,那么所有流量都会受到限制。