免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5672 | 回复: 8
打印 上一主题 下一主题

[网络管理] 如何用TC快速实现限制每个IP流量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-08 10:28 |只看该作者 |倒序浏览
例如,我想实现局域网默认情况下每台电脑上行为512kbps,下行为1Mbps,现在的办法是将每个IP设一遍才行,但局域网内电脑比较多,规则会比较冗长.

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

论坛徽章:
0
2 [报告]
发表于 2008-12-08 13:31 |只看该作者
写个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

论坛徽章:
0
3 [报告]
发表于 2008-12-08 13:57 |只看该作者
呵呵,谢谢. 只好这样了.
看以前有人讨论过,也没找到好办法.

论坛徽章:
0
4 [报告]
发表于 2008-12-09 09:09 |只看该作者

回复 #2 剑次狼 的帖子

这个是推荐的方式
或者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

论坛徽章:
0
5 [报告]
发表于 2008-12-09 14:47 |只看该作者
tc命令没有这种自动方法
看来只能通过脚本完成了。

论坛徽章:
0
6 [报告]
发表于 2008-12-11 13:53 |只看该作者
我用了以下脚本:
#!/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 编辑 ]

论坛徽章:
1
2015年亚洲杯之韩国
日期:2015-04-24 09:07:02
7 [报告]
发表于 2008-12-11 15:47 |只看该作者
搬个板凳来学习学习

论坛徽章:
0
8 [报告]
发表于 2008-12-11 15:53 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2008-12-11 17:13 |只看该作者
tc限速,好像会对网关造成很大的影响,系统操作明显变慢,PING网关值都是1000以上,如果有大量下载的话。
难道其他在用的人,没有这方面问题吗?还是我哪里在没有配置好?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP