iptables+tc

发布于 2022-09-16 19:37:39 字数 4091 浏览 11 评论 1

本帖最后由 liang3391 于 2010-05-05 23:48 编辑

#!/bin/bash
#
#
#
#  定义上下带宽
#  注意是 Kbit
DOWNLOAD=80Kbit
UPLOAD=160Kbit
#  定义内网IP段
INET=192.168.1.
#  定义限制的IP范围
IPS=2
IPE=253
#  定义本服务器IP
ServerIP=1
#  定义进出设备
###外网卡#####
IDEV=eth0
####内网卡####
ODEV=eth1
#
#
#
/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.1.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.1.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.1.0/24 -j MASQUERADE

需求:eth1 外网卡  eth0 内网卡,平均分配每个内网ip的上行带宽为160K,下行带宽为 80K,内网网段为192.168.1

这样写有问题吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

溺ぐ爱和你が 2022-09-19 07:19:42

粗略看了下,语法上本身还没看出什么问题。

1.linux做流量控制,HTB才是王道。
如果只想做粗略的流量控制,hashlimit+tbf足够了,效率也比CBQ好得多。
2.iptables效率不够优化。
让数据包经过尽可能少的规则数量,尽可能少匹配资源消耗高的规则(如lawyer7过滤)。
“能靠前就靠前,能建链就建链”————某个高人的总结。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文