免费注册 查看新帖 |

Chinaunix

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

[网络管理] 一个用tc+iptables实现的下载和上传带宽限制的脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-03 00:52 |只看该作者 |倒序浏览
一个用tc+iptables实现的下载和上传带宽限制的脚本

这是我用的,新年献给大家。每个IP单独限制,好随时修改。如果是用拨号上网的,请把以下内容加到/etc/ppp/ip-up.local中,否则断线重拨后会没有上传限制,对BT光限制下载是不够的。


#!/bin/bash
#
# zyx@zyx.2288.org
#
#  定义上下带宽
#  注意是 Kbit
DOWNLOAD=800Kbit
UPLOAD=160Kbit
#  定义内网IP段
INET=192.168.0.
#  定义限制的IP范围
IPS=1
IPE=253
#  定义本服务器IP
ServerIP=254
#  定义进出设备
IDEV=eth0
ODEV=ppp0
#
#
#
/sbin/tc qdisc del dev $IDEV root handle 10:
/sbin/tc qdisc del dev $ODEV root handle 20:
#
/sbin/tc qdisc add dev $IDEV root handle 10: cbq bandwidth 100Mbit avpkt 1000
/sbin/tc qdisc add dev $ODEV root handle 20: cbq bandwidth 1Mbit avpkt 1000
#
/sbin/tc class add dev $IDEV parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000
/sbin/tc class add dev $ODEV parent 20:0 classid 20:1 cbq bandwidth 1Mbit rate 1Mbit allot 1514 weight 10Kbit prio 8 maxburst 20 avpkt 1000
#
# 不限制内网从本服务器下载。
# 注意如本服务器上有代理,用户可通过代理绕过带宽限制,
# 可取消以下三句限制从本服务器下载。
/sbin/tc class  add dev $IDEV parent 10:1 classid 10:10 cbq bandwidth 100Mbit rate 95Mbit allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded
/sbin/tc qdisc  add dev $IDEV parent 10:10 sfq quantum 1514b perturb 15
/sbin/tc filter add dev $IDEV parent 10:0 protocol ip prio 50 u32 match ip src $INET$ServerIP flowid 10:10
#
#限制下载速度
COUNTER=$IPS
while [ $COUNTER -le $IPE ]
do
#   以下三句限制各IP的下载带宽
    /sbin/tc class  add dev $IDEV parent 10:1 classid 10:1$COUNTER cbq bandwidth 100Mbit rate $DOWNLOAD allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded
    /sbin/tc qdisc  add dev $IDEV parent 10:1$COUNTER sfq quantum 1514b perturb 15
    /sbin/tc filter add dev $IDEV parent 10:0 protocol ip prio 100 u32 match ip dst $INET$COUNTER flowid 10:1$COUNTER
    COUNTER=` expr $COUNTER + 1 `
done
#
#限制上传速度
COUNTER=$IPS
while [ $COUNTER -le $IPE ]
do
#   以下三句限制各IP的上传带宽
    /sbin/tc class  add dev $ODEV parent 20:1 classid 20:1$COUNTER cbq bandwidth 1Mbit rate $UPLOAD allot 1514 weight 4Kbit prio 5 maxburst 20 avpkt 1000 bounded
    /sbin/tc qdisc  add dev $ODEV parent 20:1$COUNTER sfq quantum 1514b perturb 15
    /sbin/tc filter add dev $ODEV parent 20:0 protocol ip prio 100 handle $COUNTER fw classid 20:1$COUNTER
    COUNTER=` expr $COUNTER + 1 `
done
#特殊照顾的IP在以上范围的用户
NIP=78
#192.168.0.78 这家伙天天BT
ND=200Kbit
NU=50Kbit
/sbin/tc class change dev $IDEV  parent 10:1 classid 10:1$NIP bandwidth 100Mbit rate $ND allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded
/sbin/tc class change dev $ODEV parent 20:1 classid 20:1$NIP cbq bandwidth 1Mbit rate $NU allot 1514 weight 4Kbit prio 5 maxburst 20 avpkt 1000 bounded
#
NIP=1
# 192.168.0.1 增加我自已的带宽
ND=1500Kbit
NU=500Kbit
/sbin/tc class change dev $IDEV  parent 10:1 classid 10:1$NIP bandwidth 100Mbit rate $ND allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded
/sbin/tc class change dev $ODEV parent 20:1 classid 20:1$NIP cbq bandwidth 1Mbit rate $NU allot 1514 weight 4Kbit prio 5 maxburst 20 avpkt 1000 bounded
# ...................
#
#
#  修改防火墙,增加上传限制
COUNTER=$IPS
while [ $COUNTER -lt $IPE ]
do
    iptables -t mangle -A PREROUTING -i $IDEV -s $INET$COUNTER  -j MARK --set-mark $COUNTER
    COUNTER=` expr $COUNTER + 1 `
done
# 这里是NAT
iptables -t nat -A POSTROUTING -o $EXTIF -s 192.168.0.0/24 -j MASQUERADE

论坛徽章:
0
2 [报告]
发表于 2005-01-04 10:41 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

没人感兴趣吗?
自已顶一下。

论坛徽章:
0
3 [报告]
发表于 2005-01-04 11:30 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

很好,谢谢,不知你试用的结果怎么样?

论坛徽章:
0
4 [报告]
发表于 2005-01-04 13:49 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

我也对tc+iptables有一段时间的研究, 我顶你.
问个问题: 1.你的adsl带宽上行和下行的带宽多少?
2.你内部网多少台机子一起上?

论坛徽章:
0
5 [报告]
发表于 2005-01-04 16:56 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

支持原创

论坛徽章:
0
6 [报告]
发表于 2005-01-04 17:44 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

1)俺们这电信象我这样的老用户是下150KB/s(1200Kbit) 上50KB/s(400Kbit),电信新装的用户现在是下200KB/s上50KB/s。
2)内网最多时8个用户,分给每一用户是下800Kbit(100KB)上320Kbit(40KB),对一个BT分子单独限制 18:00-02:00是400Kbit/80Kbit,其它时间内与其它人一样。
3)效果是内网上下本服务器FTP/SMB/Mail不受限(没开代理),从其它高速地方下时平均是100KB/s,上传也受限为平均40KB(10KB BT分子)。

论坛徽章:
0
7 [报告]
发表于 2005-01-05 08:33 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

本人有一点愚见:
1.内网所有电脑肯定是共享这条线路出去的.所以当内网不是很饱和的情况下,是没问题的.
2.根据你上面3)说的,上传平均为40KB,但当一个人通过线路往外传ftp,或者发个大邮件时,就会占满了几乎整个上传带宽,如果经常有这样的人,其他人进行其他的服务,例如http,就会受到影响.
3.下行不见得有麻烦,关键的瓶颈在上行的一点点带宽里.我认为分协议共享较好.

论坛徽章:
0
8 [报告]
发表于 2005-01-05 21:50 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

请问如果有200台机器的时候,这个该如何修改呢?我想TC只是限制最大值吧

论坛徽章:
0
9 [报告]
发表于 2005-01-06 18:32 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

谢谢,,,顶

论坛徽章:
0
10 [报告]
发表于 2005-01-07 14:16 |只看该作者

一个用tc+iptables实现的下载和上传带宽限制的脚本

个人认为如果分端口号分配好些.
因为如果每个ip 是 UPLOAD=160Kbit ,但当用ftp时,ftp是占用大量的上传带宽,将严重影响交互性能或其他服务,例如ssh,dns,ack包等..
并且在网络很空闲时,某个ip不能得到更多的带宽,本来有50KB/s(400Kbit),你已经限定它在160kbit了,而你某个ip的全部服务是共享这160k
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP