Linuxsky
中国青基会
您当前的所在的位置是:主页>自由文档>系统管理> 文章页面

TC+IPTables实现下载和上传带宽限制脚本

去论坛讨论 来源:赛迪网 作者: 发布时间:2007-12-08

  每个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

  # ...................

  #

  #

  # 修改防火墙,增加上传限制

免费注册 | 网站地图 | RSS订阅 | 友情链接 | 论坛交流 | 用户搏客 | 返回顶端

站内资料部分由本人收集整理,所有文章版权均系原作者和出版者所有,如涉版权问题,恳请来信告知!

本站原创作品除特别声明外皆以创作共用协议发布