论坛风格切换切换到宽版
  • 615阅读
  • 8回复

[问题求助]如何用TC快速实现限制每个IP流量 [复制链接]

上一主题 下一主题
离线my9449.
 
发帖
2057
C币
-139381
威望
379
贡献值
1
银元
-2
铜钱
4539
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
例如,我想.实现局域网默认情况下每台电脑上行为512kbps,下行为.1Mbps,现在的办法是将每个IP设一遍才行,但局域网内电脑比较多,规则会比较冗长.    外汇

有没有一句或者几句就可以.实现的?.

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线tantan886.
发帖
2044
C币
-140694
威望
374
贡献值
1
银元
-1
铜钱
4597
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
写个for循环被

tc qdisc add dev $DEV root handle 2: htb
tc class add dev $DEV parent 2: classid 2:1 htb rate 10000kbit
tc qdisc add dev $IN root handle 1: htb
tc class add dev $IN parent 1: classid 1:1  htb rate 10000kbit
i=2;
while [ $i -lt 100  ]
do
#####下载控制在每人
tc class add dev $DEV parent 2:1 classid 2:2$i htb rate 100kbit ceil 1000kbit burst 15k
tc qdisc add dev $DEV parent 2:2$i handle 2$i: sfq
tc filter add dev $DEV parent 2:0 protocol ip prio 4 u32 match ip dst 192.168.0.$i flowid 2:2$i
#####上传控制在每人
tc class add dev $IN parent 1:1 classid 1:1$i htb rate 100kbit ceil 512kbit burst 15k
tc qdisc add dev $IN parent 1:1$i handle 1$i: sfq
tc filter add dev eth0 parent 1:0 protocol ip prio $i handle $i fw classid 1:1$i
iptables -t mangle -A PREROUTING -s 192.168.0.$i -j MARK --set-mark 0x$i
done

发帖
2258
C币
-198163
威望
433
贡献值
1
银元
-2
铜钱
5064
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
呵呵,谢谢. 只好这样了.
看以前有人讨论过,也没找到好办法.

离线wtwone.
发帖
1879
C币
-61192
威望
343
贡献值
1
银元
-4
铜钱
4274
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
这个是推荐的方式
或者tc filter add dev $DEV parent 2:0 protocol ip prio 4 u32 match ip dst 此部分实用子网信息如:192.168.1.0/27  flowid 2:2$i

发帖
2108
C币
-235176
威望
396
贡献值
1
银元
-2
铜钱
4672
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
tc命令没有这种自动方法
看来只能通过脚本完成了。

离线涵冰.
发帖
2063
C币
-235248
威望
379
贡献值
1
银元
-1
铜钱
4644
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
我用了以下脚本:
#!/bin/sh
# BY MAGIC 0.3 070213
# Coyote local command init script

#  定义进出设备(如果不是ADSL拨号用户可以把ppp0改为eth1)
ODEV="ppp0"
IDEV="eth0"

#  定义总的上下带宽
UP="60kbps"
DOWN="400kbps"

#  定义每个受限制的IP上下带宽
UPLOAD="10kbps"
DOWNLOAD="100kbps"

#  定义内网IP段
INET="192.168.1."

#  定义限制的IP范围
IPS="2"
IPE="36"

#  定义限制的IP范围以外的共享速度outdown为下行outup为上行
outdown="2kbps"
outup="2kbps"



#以下部分无须修改 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 清除 ppp0 eth0 所有队列规则
tc qdisc del dev $ODEV root 2>/dev/null
tc qdisc del dev $IDEV root 2>/dev/null

# 定义最顶层(根)队列规则,并指定 default 类别编号
tc qdisc add dev $ODEV root handle 10: htb default 2254
tc qdisc add dev $IDEV root handle 10: htb default 2254

# 定义第一层的 10:1 类别 (上行/下行 总频宽)
tc class add dev $ODEV parent 10: classid 10:1 htb rate $UP ceil $UP
tc class add dev $IDEV parent 10: classid 10:1 htb rate $DOWN ceil $DOWN
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



#定义特殊IP按实际添加和修改 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#如使用经常BT的的用户或自己
#例如  我这里把自己用的192.168.1.2 设置为下行设置为200k上行20k,还可以按实际增加或删除下面五行

NIP="2"
NIPDOWN="200kbps"
NIPUP="20kbps"
tc class add dev $ODEV parent 10:1 classid 10:2$NIP htb rate $NIPUP ceil $NIPUP prio 1
tc class add dev $IDEV parent 10:1 classid 10:2$NIP htb rate $NIPDOWN ceil $NIPDOWN prio 1

#经常BT 的192.168.1.4设置下行50k  上行8k  如果不需要可以删除下面五行
NIP="4"
NIPDOWN="50kbps"
NIPUP="8kbps"
tc class add dev $ODEV parent 10:1 classid 10:2$NIP htb rate $NIPUP ceil $NIPUP prio 1
tc class add dev $IDEV parent 10:1 classid 10:2$NIP htb rate $NIPDOWN ceil $NIPDOWN prio 1
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


#以下部分无须修改 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# rate 保证频宽,ceil 最大频宽,prio 优先权
i=$IPS;
while [ $i -le $IPE ]
do
tc class add dev $ODEV parent 10:1 classid 10:2$i htb rate $UPLOAD ceil $UPLOAD prio 1
tc qdisc add dev $ODEV parent 10:2$i handle 100$i: pfifo
tc filter add dev $ODEV parent 10: protocol ip prio 100 handle 2$i fw classid 10:2$i
tc class add dev $IDEV parent 10:1 classid 10:2$i htb rate $DOWNLOAD ceil $DOWNLOAD prio 1
tc qdisc add dev $IDEV parent 10:2$i handle 100$i: pfifo
tc filter add dev $IDEV parent 10: protocol ip prio 100 handle 2$i fw classid 10:2$i
iptables -t mangle -A PREROUTING -s $INET$i -j MARK --set-mark 2$i
iptables -t mangle -A POSTROUTING -d $INET$i -j MARK --set-mark 2$i
i=`expr $i + 1`
done

#定义default 类别编的上行 (上面没定义带宽的IP上行速度)
tc class add dev $ODEV parent 10:1 classid 10:2254 htb rate $outup ceil $outup prio 1
tc qdisc add dev $ODEV parent 10:2254 handle 100254: pfifo
tc filter add dev $ODEV parent 10: protocol ip prio 100 handle 2254 fw classid 10:2254

#定义default 类别编的下行 (上面没定义带宽的IP下行速度)
tc class add dev $IDEV parent 10:1 classid 10:2254 htb rate $outdown ceil $outdown prio 1
tc qdisc add dev $IDEV parent 10:2254 handle 100254: pfifo
tc filter add dev $IDEV parent 10: protocol ip prio 100 handle 2254 fw classid 10:2254


在LINUX 网关下接了一台PC,开了个讯雷下载后,LINUX网关像死掉了一下,PC PING网关,PING值time有几千,或根本不通。讯雷一停掉就好了。是我没有做好,还是TC处理不好,因为以前好像也看到过有人提起,用TC后,PING值变的很大
我网关的网卡都是intel pro 100+的,内存512

[ 本帖最后由 ybbnew 于 2008-12-11 13:55 编辑 ]

离线dzbz.
发帖
2128
C币
-152321
威望
374
贡献值
1
银元
-4
铜钱
4710
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-13
搬个板凳来学习学习

离线zhangz.
发帖
2110
C币
-262594
威望
471
贡献值
6
银元
5
铜钱
4751
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-13
有个问题。使用TC进行限速会不会导致这个问题,就是打开网页明显比限速前慢了。

我直接使用limit限速会造成这样的情况,因为limit限速的方式是直接将一秒钟内超出数目的数据包丢掉,这样就造成了打开网页速度会比之前要明显慢。(限的速度并不低)

离线eyes7790.
发帖
2083
C币
-60413
威望
403
贡献值
1
银元
-2
铜钱
4626
人人网人气币
0
只看该作者 8楼 发表于: 2010-04-13
tc限速,好像会对网关造成很大的影响,系统操作明显变慢,PING网关值都是1000以上,如果有大量下载的话。
难道其他在用的人,没有这方面问题吗?还是我哪里在没有配置好?
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个