阿苏斯固件QOS限速

原来标题:

路由器刷了个阿苏斯的固件。结果意外的好用。

QOS脚本


1.注意脚本开头:
export UIP="192.168.1."\n
export NET="192.168.1.0/24"\n
export UP=40\n
export DOWN=170\n
export UPLOADR=2\n
export UPLOADC=12\n
是2M ADSL的参数,表示总上传速率是40KB/S,总下载速率是170KB/S,单IP的保证上传速率是2KB/S,最大上传速率是12KB/S
export DOWNLOADR=15\n
export DOWNLOADC=$(($DOWN*((30+ONLINE))/((20+8*ONLINE))))\n' >/tmp/regist_env.sh
单IP的保证下载速率是15KB/S,最大下载速率依据再线主机数动态计算:
单IP最大下载速率=总下载速率×(30+在线主机数)÷(20+在线主机数×8)




#copyright by zhoutao0712

echo -e '\n
export UIP="192.168.1."\n
export NET="192.168.1.0/24"\n
export UP=40\n
export DOWN=170\n
export UPLOADR=2\n
export UPLOADC=12\n
export ONLINE=$(cat /proc/net/ipt_hashlimit/game_burst |wc -l)
export DOWNLOADR=15\n
export DOWNLOADC=$(($DOWN*((30+ONLINE))/((20+8*ONLINE))))\n' >/tmp/regist_env.sh
cat /proc/net/ipt_hashlimit/newc >/tmp/old
cat /tmp/old |wc -l >/tmp/N_old
. /tmp/regist_env.sh

insmod imq
insmod ipt_IMQ
insmod ipt_length.o
insmod ipt_hashlimit.o
ifconfig imq1 up
ifconfig imq0 up
iptables -t mangle -N QOSDOWN
iptables -t mangle -N QOSUP
iptables -t mangle -I FORWARD -s $NET -j QOSUP
iptables -t mangle -I FORWARD -d $NET -j QOSDOWN
iptables -t mangle -A QOSDOWN -j IMQ --todev 0
iptables -t mangle -A QOSUP -j IMQ --todev 1

iptables -t mangle -I QOSDOWN -p udp --sport 53 -j RETURN
iptables -t mangle -I QOSUP -p udp --dport 53 -j RETURN
iptables -t mangle -N GAME_BURST
iptables -t mangle -A QOSDOWN -m length --length 128: -j GAME_BURST
iptables -t mangle -A GAME_BURST -m hashlimit --hashlimit 8/sec --hashlimit-burst 100 --hashlimit-mode dstip \
--hashlimit-name game_burst --hashlimit-htable-gcinterval 5000 --hashlimit-htable-expire 150000 -j RETURN
iptables -t mangle -A GAME_BURST -m recent --rdest --name game_burst --set

iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -j BCOUNT
iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range :102400 -j MARK --set-mark-return 255
iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -j BCOUNT
iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :102400 -j MARK --set-mark-return 255
iptables -t mangle -A QOSDOWN -m recent --rdest --name game_burst ! --rcheck --seconds 8 -j MARK --set-mark-return 254

iptables -t mangle -A QOSDOWN -j MARK --ipaddr 1
iptables -t mangle -A QOSUP -j MARK --ipaddr 0

tc qdisc del dev imq0 root
tc qdisc del dev imq1 root
echo -e '\n
tc qdisc add dev imq0 root handle 1: htb\n
tc qdisc add dev imq1 root handle 1: htb\n
tc qdisc add dev imq0 root handle 1: htb\n
tc qdisc add dev imq1 root handle 1: htb\n
tc class add dev imq1 parent 1: classid 1:1 htb rate $((UP))kbps\n
tc class add dev imq0 parent 1: classid 1:1 htb rate $((DOWN))kbps\n
tc class add dev imq0 parent 1:1 classid 1:255 htb rate $((DOWN*2/10))kbps ceil $((DOWN*8/10))kbps quantum 6000 prio 3\n
tc filter add dev imq0 parent 1:0 protocol ip prio 5 handle 255 fw flowid 1:255\n
tc class add dev imq1 parent 1:1 classid 1:255 htb rate $((UP*2/10))kbps ceil $((UP*5/10))kbps quantum 2000 prio 3\n
tc filter add dev imq1 parent 1:0 protocol ip prio 5 handle 255 fw flowid 1:255\n
tc class add dev imq0 parent 1:1 classid 1:254 htb rate $((DOWN*6/10))kbps prio 0\n
tc filter add dev imq0 parent 1:0 protocol ip prio 2 handle 254 fw flowid 1:254\n
tc qdisc add dev imq0 parent 1:254 handle 254: bfifo limit 10kb\n' >/tmp/pref_qos
. /tmp/pref_qos

iptables -t mangle -N CONNLMT
iptables -t mangle -N NEWLMT
iptables -t mangle -I FORWARD -m state --state NEW -s $NET -p ! icmp -j CONNLMT
iptables -t mangle -A CONNLMT -j NEWLMT
iptables -t mangle -A NEWLMT -m hashlimit --hashlimit-name newconn --hashlimit 15/sec \
--hashlimit-mode srcip --hashlimit-htable-gcinterval 5000 --hashlimit-htable-expire 20000 -j RETURN
iptables -t mangle -A NEWLMT -j DROP
iptables -t mangle -A CONNLMT -p tcp -m mport --dports 20:23,25,80,110,443 -j RETURN
iptables -t mangle -A CONNLMT -p udp -m mport --dports 53,4000:4050 -j RETURN
iptables -t mangle -A CONNLMT -p tcp -m connlimit --connlimit-above 150 -j DROP
iptables -t mangle -A CONNLMT -p ! tcp -m connlimit --connlimit-above 120 -j DROP
echo -e '\n
i=1\n
while [ $i -le $N_del ]\n
do\n
ip_i=$(sed -n ${i}p /tmp/del_list)\n
handle_i=$(echo $ip_i|cut -d'.' -f4)\n
tc filter del dev imq0 parent 1:0 protocol ip pref 100 handle $handle_i fw classid 1:$handle_i\n
tc class del dev imq0 parent 1:1 classid 1:$handle_i\n
tc filter del dev imq1 parent 1:0 protocol ip pref 100 handle $handle_i fw classid 1:$handle_i\n
tc class del dev imq1 parent 1:1 classid 1:$handle_i\n
i=`expr $i + 1`\n
done\n' >/tmp/del_qos
echo -e '\n
i=1\n
while [ $i -le $N_add ]\n
do\n
ip_i=$(sed -n ${i}p /tmp/add_list)\n
handle_i=$(echo $ip_i|cut -d'.' -f4)\n
tc class add dev imq0 parent 1:1 classid 1:$handle_i htb rate $((DOWNLOADR))kbps ceil $((DOWNLOADC))kbps quantum 2000 prio 5\n
tc qdisc add dev imq0 parent 1:$handle_i handle $handle_i sfq perturb 15\n
tc filter add dev imq0 parent 1:0 protocol ip pref 100 handle $handle_i fw classid 1:$handle_i\n
tc class add dev imq1 parent 1:1 classid 1:$handle_i htb rate $((UPLOADR))kbps ceil $((UPLOADC))kbps quantum 1500 prio 5\n
tc qdisc add dev imq1 parent 1:$handle_i handle $handle_i bfifo limit 6kb\n
tc filter add dev imq1 parent 1:0 protocol ip pref 100 handle $handle_i fw classid 1:$handle_i\n
i=`expr $i + 1`\n
done\n' >/tmp/add_qos
echo -e '\n
i=1\n
while [ $i -le $N_new ]\n
do\n
ip_i=$(sed -n ${i}p /tmp/new)\n
handle_i=$(echo $ip_i|cut -d'.' -f4)\n
tc class replace dev imq0 parent 1:1 classid 1:$handle_i htb rate $((DOWNLOADR))kbps ceil $((DOWNLOADC))kbps quantum 2000 prio 5\n
tc qdisc replace dev imq0 parent 1:$handle_i handle $handle_i sfq perturb 15\n
tc filter replace dev imq0 parent 1:0 protocol ip pref 100 handle $handle_i fw classid 1:$handle_i\n
tc class replace dev imq1 parent 1:1 classid 1:$handle_i htb rate $((UPLOADR))kbps ceil $((UPLOADC))kbps quantum 1500 prio 5\n
tc qdisc replace dev imq1 parent 1:$handle_i handle $handle_i bfifo limit 6kb\n
tc filter replace dev imq1 parent 1:0 protocol ip pref 100 handle $handle_i fw classid 1:$handle_i\n
i=`expr $i + 1`\n

done\n' >/tmp/replace_qos




下一篇


iptables的妙用——条件限速

某些路由器具有所谓的流量控制中具有“惩罚性限速”的功能:(例如)192.168.1.100在120秒内平均速率超过100KB/S,那么把该IP
列入惩罚队列,惩罚队列速率是40KB/S.

其实,利用iptables的也可以实现类似的功能。脚本如下:


  1. iptables -t mangle -N LMT
  2. iptables -t mangle -N LMT2
  3. iptables -t mangle -I FORWARD -d 192.168.1.100 -m length --length 128: -j LMT
  4. iptables -t mangle -A LMT -m recent --rdest --name badguy --rcheck --seconds 60 -j LMT2
  5. iptables -t mangle -A LMT -m limit --limit 100/sec --limit-burst 5000 -j RETURN
  6. iptables -t mangle -A LMT -m recent --rdest --name badguy --set -j RETURN
  7. iptables -t mangle -A LMT2 -m limit --limit 50/sec --limit-burst 5000 -j RETURN
  8. iptables -t mangle -A LMT2 -j DROP
复制代码

上面代码是用limit限制计算速率,为了更准确,使用了数据包长度筛选: “-m length --length 128:”,这样更准确一点。
一般限制为100/s,按照数据包平均大小1000Bytes来算,大概就是100KB/S。
如果超出,限制变为50/sec,大约50KB/S。

当然,这只是一个示范性的例子了,其中limit模块也可以改用更为强大的hashlimit,hashsped等模块。
还可以用connlimit使用连接数作为限制条件。。。。。。。。。。
如果再把这些模块结合MARK和TC流量控制,就实现了某些路由器的所谓“条件限速”“P2P惩罚”等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值