洞洞! | 原喵空间

正文

实现的下载和上传带宽限制的脚本

作者:xiaowuhello
linux限速
一个用tc+iptables实现的下载和上传带宽限制的脚本 一个用tc+iptables实现的下载和上传带宽限制的脚本 这是我用的,新年献给大家。每个IP单独限制,好随时修改。如果是用拨号上网的,请把以下内容加到/etc/ppp/ip-up.local中,否则断线重拨后会没有上传限制,对BT光限制下载是不够的。 #!/bin/bash # [email=#lvhe888@163.com]#lvhe888@163.com[/email] # # 定义上下带宽 # 注意是 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

回复

给内网做限速脚本

作者:xiaowuhello
linux网关上TC给内网做限速脚本 #!/bin/bash ##给192.168.13网段的IP做限速 ##外网网卡 IN=eth1 ##内网网卡 DEV=eth0 start() { ## 清除 eth1 eth0 所有队列规则 tc qdisc del dev $DEV root 2>/dev/null tc qdisc del dev $IN root 2>/dev/null ##定义总的上下带宽 tc qdisc add dev $DEV root handle 2: htb tc class add dev $DEV parent 2: classid 2:1 htb rate 3000kbit tc qdisc add dev $IN root handle 1: htb tc class add dev $IN parent 1: classid 1:1 htb rate 3000kbit for (( i=2; i<=253; i=i+1 )) do #####下载控制在每人实际最大100k/S左右 tc class add dev $DEV parent 2:1 classid 2:2$i htb rate 100kbit ceil 500kbit 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.13.$i flowid 2:2$i #####上传控制在每人实际最大34K/S左右 tc class add dev $IN parent 1:1 classid 1:1$i htb rate 100kbit ceil 300kbit burst 15k tc qdisc add dev $IN parent 1:1$i handle 1$i: sfq tc filter add dev $IN parent 1:0 protocol ip prio $i handle $i fw classid 1:1$i iptables -t mangle -A PREROUTING -s 192.168.13.$i -j MARK --set-mark 0x$i done } stop(){ echo -n "(删除所有队列......)" ( tc qdisc del dev $DEV root && for (( i=2; i<=253; i=i+1 )) do /sbin/iptables -t mangle -D PREROUTING -s 192.168.13.$i -j MARK --set-mark 0x$i done && echo "ok.删除成功!" ) || echo "error." } #显示状态 status() { echo "1.show qdisc $DEV (显示下行队列):----------------------------------------------" tc -s qdisc show dev $DEV echo "2.show class $DEV (显示下行分类):----------------------------------------------" tc class show dev $DEV echo "3. tc -s class show dev $IN (显示上行队列和分类流量详细信息):------------------" tc -s class show dev $IN echo "说明:设置总队列下行和上行带宽 3M." } #显示帮助 usage() { echo "使用方法(usage): `basename $0` [start | stop | restart | status ]" echo "参数作用:" echo "start 开始流量控制" echo "stop 停止流量控制" echo "restart 重启流量控制" echo "status 显示队列流量" } case "$1" in start) ( start && echo "开始流量控制! TC started!" ) || echo "error." exit 0 ;; stop) ( stop && echo "停止流量控制! TC stopped!" ) || echo "error." exit 0 ;; restart) stop start echo "流量控制规则重新装载!" ;; status) status ;; *) usage exit 1 ;; esac
查看回复
上一页
下一页
0%
站点地图友情链接:
喵宅苑
喵空间社区程序
络合兔
技术宅
莉可POI
Mithril.js
枫の主题社
Project1
午后少年
机智库
七濑胡桃
xiuno
幻想の博客