`

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

分享到:
评论

相关推荐

    linux系统下通过tc命令实现对端口限速的脚本,自写脚本

    由于某个端口的业务功能占用的带宽太大影响了其他的业务模块,所以需要将端口进行网络流量的限制,经过翻阅资料发现linux系统下可通过tc命令实现对端口限速的脚本,所以自己写了这样一个脚本,已经通过测试,请放心...

    bw-control-0.0.3.rar_linux 带宽_network Bandwidth_带宽_网络带宽

    2. **HTB(Hierarchical Token Bucket)**:TC中的一个队列调度器,用于创建分级的令牌桶结构,实现带宽分配的优先级和限制。 3. **IPTables**:Linux防火墙和包过滤系统,可以通过规则链配合TC模块进行带宽限制。 ...

    ros.2.9.27限速脚本

    例如,你可以使用`tc`(Traffic Control)工具来设置带宽限制。 5. **测试与优化**:实施限速后,需要通过监控工具检查效果,如`netstat`、`nethogs`或ROS的`rqt_graph`,确保限速策略达到预期效果,同时不会影响...

    关于Linux系统服务器站点流量限制的解决方案

    通过本文介绍的方法,我们可以有效地实现Linux服务器上的流量限制,不仅能够保护服务器免受恶意攻击,还能确保关键业务得到足够的带宽保障。希望本文能为广大Linux运维人员提供一种实用的技术参考,助力提升网络服务...

    sqm-qos:针对OpenWRT和SQM软件包的改进的QOS脚本。 QOS-NXT的后继者

    平方米sqm-qos是qos-nxt的后继产品,它基于类似的原理构建。 它旨在作为项目开发的sqm软件包的一部分运行。... Routed变体使用iptables和connmark(act_connmark随附的入口),而Bridged变体仅使用tc和u32过滤。

    追溯HTB

    它允许网络管理员精确地控制不同类型的网络流量,确保关键服务的带宽需求得到满足,同时限制非关键服务的带宽使用,从而实现网络资源的有效管理和优化。 HTB算法基于Token Bucket理论,它维护了两个桶:一个快速桶...

    不稳定网络环境模拟解决方案Linux共16页.pdf.zi

    使用`iptables`和`tcpdump`等工具进行网络数据包的捕获和分析,可以帮助理解应用在网络模拟环境中的行为,找出可能的问题。 8. **最佳实践**: - 分阶段模拟:先从简单的网络状况开始,逐步增加复杂度。 - 文档...

    YABMAS - Bandwidth management, Mac Auth.-开源

    另一个带宽管理和身份验证系统是一个小型bash脚本,它可以自动管理客户端带宽分配,并通过使用iptables和htb / tc调度通过MAC地址进行客户端身份验证。

    geqos-开源

    2. **网络服务质量(QoS)**:QoS策略包括流量整形、带宽限制、优先级标记等,旨在提高网络的可靠性和效率。 3. **Linux内核**:geqos与Linux内核的交互,例如使用iptables、tc(Traffic Control)等工具来实施QoS...

Global site tag (gtag.js) - Google Analytics