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

网络带宽限速脚本
本文介绍了一个用于限制局域网内各个IP地址上传和下载速度的脚本。通过在Linux系统上运行此脚本,管理员能够为不同IP设置特定的带宽上限,有效控制网络资源使用。

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

### 配置网络带宽限制以防止滥用 在类 Unix 操作系统(如 Linux)中,可以通过多种工具来配置网络带宽限制,以防止带宽滥用。其中,**Wondershaper** 是一个简单易用的命令行工具,可以有效地对网络接口的上传下载速度进行限制。 #### 使用 Wondershaper 限制网络带宽 Wondershaper 是一个基于 Linux 流量控制(`tc`)的脚本工具,能够快速对网络接口的带宽进行限制。假设需要对名为 `enp0s8` 的网卡进行带宽限制,将上传速度限制为 512 Kbps,下载速度限制为 1024 Kbps,可以执行以下命令: ```bash sudo wondershaper -a enp0s8 -d 1024 -u 512 ``` 该命令中的 `-a` 指定网络接口名称,`-d` 设置下载速度限制(单位为 Kbps),`-u` 设置上传速度限制(单位也为 Kbps[^3]。 #### 持久化配置 Wondershaper 如果希望在系统重启后仍然保留带宽限制设置,可以将 Wondershaper 配置为系统服务并启用开机启动: ```bash sudo systemctl enable wondershaper.service sudo systemctl start wondershaper.service ``` 通过这种方式,可以确保每次系统启动时自动应用预设的带宽限制规则[^4]。 #### 其他网络带宽管理策略 除了使用 Wondershaper,还可以结合其他网络管理策略来优化带宽使用。例如,根据流量模型设计带宽分配策略,使用 QoS(服务质量)机制对关键业务流量进行优先级标记(如 DSCP),从而保障重要应用的网络性能[^2]。 此外,还可以结合防火墙规则(如 `iptables` 或 `nftables`)对特定 IP 地址或端口进行限速,或者使用 `tc` 命令进行更精细的流量整形带宽管理。 ### 示例:结合 iptables 进行限速 以下是一个使用 `iptables` 对特定 IP 地址进行限速的示例: ```bash sudo iptables -A OUTPUT -d 192.168.1.100 -m limit --limit 50kb/s --limit-burst 100k -j ACCEPT sudo iptables -A OUTPUT -d 192.168.1.100 -j DROP ``` 该规则限制目标 IP 地址 `192.168.1.100` 的输出流量不超过 50 KB/s,并设置最大突发流量为 100 KB[^2]。 ### 总结 通过使用 Wondershaper 或其他网络管理工具,可以有效限制网络带宽的使用,防止单个用户或应用程序滥用带宽资源。结合系统服务配置防火墙规则,可以实现更加灵活持久的带宽管理策略。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值