新人报道,先发点垃圾——iptables和tc脚本实现智能QOS - 网络问题 - Lin...

来源:百度文库 编辑:神马文学网 时间:2024/05/01 13:38:23
为了解决多机共享带宽,疯狂研究QOS,正好使用的是linux路由器,于是对iptables和tc作了一番研究。
网上浏览教程无数,TC,HTB,NETFILTER,IMQ的官网都去过,《Iptables 指南 1.1.19》和《linux高级路由与流量控制》都翻烂了,
自觉大有长进,写了个所谓的“智能QOS”脚本。(还不会系统编程啊)

所谓“智能QOS”,就是依据当前内网主机数的动态变化指定不同的QOS流量控制策略。只需要设定接入带宽参数即可很好控制流量。

脚本中用到一些模块如BCOUNT,ipt_length,IMQ等需要预先装载。

脚本对“小包”和http浏览作了一些优化。

规则如下:
1.依据路由器ARP表的地址数判断当前在线主机数。
2.在线1PC,不限速;PC增加时,动态分配最小保证速率,单IP最大下载速率为总下载速率60%,但实际下载速率可能会超过这个值,因为还有来自小包和http下载的速。
3.对小包和网页浏览做了优先,利用iptables的BCOUNT模块区分网页浏览和http下载。
4.单IP连接数限制,默认每个内网IP地址TCP限制60,UDP限制80。为了防止连接数占满后无法打开网页等情况,对
53,80等常见端口作了例外。(可自己添加一些常见游戏端口,这样可以一边下载一边玩游戏)
5.对在线主机数动态判定加入反震荡措施(主机数变化只有1个时候不改TC策略,但1PC→2PC和2PC→1PC例外)

用法:分两部分,第一个较长的脚本只需要执行一次,主要作用是设定iptables规则生成一些脚本文件,
另一个脚本为定期执行脚本,作用是定期(比如1分钟)检测ARP地址表并作出相应的TC策略。(需要自己使用crontab等命令设置为例行任务)

参数修改:
1.export NET=192.168.1.0/24\n #内网IP网段
export UIP="192.168.1."\n #内网IP前缀
export IPS=2\n #开始IP地址为192.168.1.2
export IPE=8\n #结束IP地址为192.168.1.8
2.ADSL用户:如果你申请带宽是2M,那么N=2(脚本默认),如果是4M,把第2行
N=2\n改为N=4\n就OK了。
3.小区宽带或其他情况:修改UPN参数,脚本默认是40,如果你小区宽带上传100KB/S,那么把第3行
UPN=40\n改为UPN=100\n。
4.其它一些参数:
export UPLOADC=8kbps\n #单机最大上传速率(不包括小包和http上传)
export DOWNN=$((N*90))\n #带宽总下行数值(无单位),也可以用数字指定,如500KB/S可修改为DOWNN=500\n
export NTCP=60\n #单机tcp连接数限制为60
export NUDP=80\n #单机UDP连接数限制为80
export UNLIMITPORT_UDP=53,4000:8000\n #udp的53,4000---4010端口不受连接数限制(对DNS服务和QQ开绿灯)
export UNLIMITPORT_TCP=20:23,25,53,80,110,443\n #tcp的20----23,25,53,80,110,443端口不受连接数限制(另可自己添加网游端口)