我的目标是通过tc,IMQ接口和iptables限制每个系统用户的带宽。 现在我有批量下载(即scp),在交互式程序,如SSH服务器创造滞后的问题。
这是我的configuration:
# UPLOAD # OUTBOUND # tc qdisc add dev imq0 root handle 1:0 htb default 11 tc class add dev imq0 parent 1:0 classid 1:1 htb rate 700kbit ceil 700kbit tc class add dev imq0 parent 1:1 classid 1:10 htb rate 450kbit ceil 700kbit prio 0 tc class add dev imq0 parent 1:1 classid 1:11 htb rate 250kbit ceil 250kbit prio 1 tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10 tc filter add dev imq0 parent 1:0 prio 1 protocol ip handle 11 fw flowid 1:11 # DOWNLOAD # INBOUND # tc qdisc add dev imq1 root handle 2:0 htb default 11 tc class add dev imq1 parent 2:0 classid 2:2 htb rate 7000kbit ceil 7000kbit tc class add dev imq1 parent 2:1 classid 2:10 htb rate 4500kbit ceil 7000kbit prio 0 tc class add dev imq1 parent 2:1 classid 2:11 htb rate 2500kbit ceil 2500kbit prio 1 tc filter add dev imq1 parent 2:0 prio 0 protocol ip handle 10 fw flowid 2:10 tc filter add dev imq1 parent 2:0 prio 1 protocol ip handle 11 fw flowid 2:11 iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 1 iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark iptables -t mangle -N IMQ-OUT iptables -t mangle -A POSTROUTING -o eth0 -j IMQ-OUT iptables -t mangle -A IMQ-OUT -p tcp -m length --length :64 -j MARK --set-mark 10 iptables -t mangle -A IMQ-OUT -p tcp -m length --length :64 -j RETURN iptables -t mangle -A IMQ-OUT -m owner --uid-owner root -j MARK --set-mark 10 iptables -t mangle -A IMQ-OUT -m owner --uid-owner root -j RETURN iptables -t mangle -A IMQ-OUT -m owner --uid-owner test1 -j MARK --set-mark 11 iptables -t mangle -A IMQ-OUT -m owner --uid-owner test1 -j RETURN iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 0
执行config后进行类和过滤:
tc class show dev imq0 class htb 1:11 parent 1:1 prio 1 rate 250000bit ceil 700000bit burst 1599b cburst 1599b class htb 1:10 parent 1:1 prio 0 rate 450000bit ceil 700000bit burst 1600b cburst 1599b class htb 1:1 root rate 700Kbit ceil 700Kbit burst 1600b cburst 1600b tc filter show dev imq0 filter parent 1: protocol ip pref 1 fw filter parent 1: protocol ip pref 1 fw handle 0xb classid 1:11 filter parent 1: protocol ip pref 49152 fw filter parent 1: protocol ip pref 49152 fw handle 0xa classid 1:10
正在尝试像这样添加sfq的qdisc
# tc qdisc add dev imq0 parent 1:10 handle 10:0 sfq perturb 10 # tc qdisc add dev imq0 parent 1:11 handle 11:0 sfq perturb 10 # tc qdisc add dev imq1 parent 2:10 handle 10:0 sfq perturb 10 # tc qdisc add dev imq1 parent 2:11 handle 11:0 sfq perturb 10
但它所做的是冻结我的电脑(需要重新启动)。
我是新来的这个话题,任何帮助表示赞赏。
您可以使用connbytes tc选项。 它会统计连接的总字节数,上传和下载。
例如,scp问题可以这样解决:
iptables -t mangle -A IMQ-OUT -p tcp --dport 22 -m connbytes --connbytes 10000000: --connbytes-dir both --connbytes-mode bytes -m owner --uid-owner root -j MARK --set-mark 11 iptables -t mangle -A IMQ-OUT -p tcp ! --dport 22 -m owner --uid-owner root -j MARK --set-mark 10 iptables -t mangle -A IMQ-OUT -p udp -m owner --uid-owner root -j MARK --set-mark 10 iptables -t mangle -A IMQ-OUT -p icmp -m owner --uid-owner root -j MARK --set-mark 11
把上面的线代替这个:
iptables -t mangle -A IMQ-OUT -m owner --uid-owner root -j MARK --set-mark 10
虽然,您需要注意“还原标记”和“保存标记”,但是您不希望TCP / 22 10标记被还原,您需要在connbyte计数并在标记之前作出决定。
你可以这样改变这一行:
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
成为:
iptables -t mangle -A PREROUTING -p tcp ! --dport 22 -j CONNMARK --restore-mark iptables -t mangle -A PREROUTING -p udp -j CONNMARK --restore-mark iptables -t mangle -A PREROUTING -p icmp -j CONNMARK --restore-mark
我正在挖掘这个问题:
我不得不添加另一个tc类来下载和上传,我们称之为交互式类和添加filter
tc filter add dev imq0 protocol ip parent 1:0 prio 1 u32 match ip tos 0x10 0xff flowid 1:12 tc filter add dev imq1 protocol ip parent 2:0 prio 1 u32 match ip tos 0x10 0xff flowid 2:12
并改变为较低优先级
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10 tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 11 fw flowid 1:11 tc filter add dev imq1 parent 2:0 prio 0 protocol ip handle 10 fw flowid 2:10 tc filter add dev imq1 parent 2:0 prio 0 protocol ip handle 11 fw flowid 2:11
现在非散货运输量增长1:12下降2:12,不存在滞后问题。