ROS PPPoE 内外网限速分离问题
当我们用ros建立PPPoE服务器+queue simple限速的时候 就会有一个问题 内网访问速度也被限制住了 因为我们在选择interface接口 的时候必须选择all这个参数限速脚本才可以运行。这样queue simple就会把内网和外网全都限制住!内网的应用就会变得很糟糕。经过试验当我们把interface接口选择PPPoE生成的虚接口的时候问题解决,但是如果PPPoE客户端下线后重新连接,即使PPPoE虚接口名称没有变化,这条queue simple脚本也是无效的 并且在winbox中 接口变成红色,无效。当然,在建立PPPoE profile的时候 里面有关于速度的选项 但是在实际的测试中似乎不是很好用~~~~。
看了ghostyxt的文章后 感觉可以通过内建的脚本来建立和删除queue脚本,希望各位高手一同研究一下。或者已经有方法的高人指点一下。谢谢了
顺便问一下,ros脚本开发的资料哪里有下载? 难道大家都会~~~不用研究? 给你顶一下,我也正面临这个问题!!! ###### 用户为PPPOE方式上网,RADIUS设速率为:512K/1M 其中免费组为128K/256K#######
###### 脚本目地是想在空闲时间 让用户有更大速率,充分利用带宽 加内网不限速####
#定义变量
:local RxCurRate 0
:local RxCurRate1 0
:local RxCurRate2 0
:local RxCurRate3 0
:local RxCurSet 0
:local TxCurSet 0
#4次平均下行即时流量(总出口为40M)
interface monitor ydwan once do={:set RxCurRate $received-bits-per-second}
#interface monitor ydwan once do={:set RxCurRate $sent-bits-per-second}
:delay 3
interface monitor ydwan once do={:set RxCurRate1 $received-bits-per-second}
:delay 3
interface monitor ydwan once do={:set RxCurRate2 $received-bits-per-second}
:delay 3
interface monitor ydwan once do={:set RxCurRate3 $received-bits-per-second}
:set RxCurRate (($RxCurRate+$RxCurRate1+$RxCurRate2+$RxCurRate3)/4)
#步进长度,以32M为基准,大于32M取决对值。(留些用户突发空间)
:set RxCurRate1 (32-($RxCurRate/1000000))
:if($RxCurRate1<0) do={:set RxCurRate1 ($RxCurRate1+-($RxCurRate1*2))}
:set RxCurRate1 (($RxCurRate1+-1)*100000)
#下行当前设置("PCQ-Download"只是作为临时数据存放,也便于观察程序运行状态。)
#/queuetype
#add name="PCQ-Download" kind=pcq pcq-rate=3500000 pcq-limit=50 pcq-classifier=dst-address pcq-total-limit=2000
#add name="PCQ-Upload" kind=pcq pcq-rate=200000 pcq-limit=50 pcq-classifier=src-address pcq-total-limit=2000
#:set TxCurSet pcq-rate]
:set RxCurSet pcq-rate]
:set TxCurSet (($RxCurSet+0)/2)
#上传不能太大
#:if($TxCurSet>2000000) do={:set TxCurSet 2000000}
# 下行 加大限制带宽(我的总带宽40M,用户最多可达12M速率)
:if($RxCurRate<30000000&&$RxCurSet<12000000) do={
# 步进长度动态决定
:set RxCurSet ($RxCurSet+$RxCurRate1)
:if($RxCurSet>12000000) do={:set RxCurSet 12000000}
:set TxCurSet (($RxCurSet+0)/2)
#上传不能太大
#:if($TxCurSet>2000000) do={:set TxCurSet 2000000}
## limit-at=512000/1000000和limit-at=128000/256000是PPPOE用户首次登录时的默认值
/queue type set "PCQ-Download" kind=pcq pcq-rate=$RxCurSet pcq-classifier=dst-address
/queue type set "PCQ-Upload" kind=pcq pcq-rate=$RxCurRate1 pcq-classifier=src-address
/queue simple set max-limit=($TxCurSet . "/" . $RxCurSet) priority=6 burst-limit=(($TxCurSet*2) . "/" . ($RxCurSet*2)) burst-threshold=(($TxCurSet/4) . "/" . ($RxCurSet/4)) burst-time=5s/10s packet-marks=all-mark
/queue simple set max-limit=(($TxCurSet/4) . "/" . ($RxCurSet/4)) priority=7 burst-limit=(($TxCurSet/2) . "/" . ($RxCurSet/2)) burst-threshold=(($TxCurSet/16) . "/" . ($RxCurSet/16)) burst-time=5s/10s packet-marks=all-mark
#/queue simple set max-limit=($TxCurSet . "/" . $RxCurSet) priority=6 burst-limit=(($TxCurSet*2) . "/" . ($RxCurSet*2)) burst-threshold=(($TxCurSet/4) . "/" . ($RxCurSet/4)) burst-time=5s/10s packet-marks=all-mark
#/queue simple set max-limit=(($TxCurSet/4) . "/" . ($RxCurSet/4)) priority=7 burst-limit=(($TxCurSet/2) . "/" . ($RxCurSet/2)) burst-threshold=(($TxCurSet/16) . "/" . ($RxCurSet/16)) burst-time=5s/10s packet-marks=all-mark
# parent=none
}
# 下行 减少限制带宽
:if($RxCurRate>34000000&&$RxCurSet>500000) do={
#步进长度动态决定
:if($RxCurSet>4000000) do={:set RxCurSet ($RxCurSet+-$RxCurRate1)}
:set RxCurSet ($RxCurSet+-$RxCurRate1)
:if($RxCurSet<500000) do={:set RxCurSet 500000}
:set TxCurSet (($RxCurSet+0)/2)
#:if($TxCurSet>2000000) do={:set TxCurSet 2000000}
/queue type set "PCQ-Download" kind=pcq pcq-rate=$RxCurSet pcq-classifier=dst-address
/queue type set "PCQ-Upload" kind=pcq pcq-rate=$RxCurRate1 pcq-classifier=src-address
/queue simple set max-limit=($TxCurSet . "/" . $RxCurSet) priority=6 burst-limit=(($TxCurSet*2) . "/" . ($RxCurSet*2)) burst-threshold=(($TxCurSet/4) . "/" . ($RxCurSet/4)) burst-time=5s/10s packet-marks=all-mark
/queue simple set max-limit=(($TxCurSet/4) . "/" . ($RxCurSet/4)) priority=7 burst-limit=(($TxCurSet/2) . "/" . ($RxCurSet/2)) burst-threshold=(($TxCurSet/16) . "/" . ($RxCurSet/16)) burst-time=5s/10s packet-marks=all-mark
#/queue simple set max-limit=($TxCurSet . "/" . $RxCurSet) priority=6 burst-limit=(($TxCurSet*2) . "/" . ($RxCurSet*2)) burst-threshold=(($TxCurSet/4) . "/" . ($RxCurSet/4)) burst-time=5s/10s packet-marks=all-mark
#/queue simple set max-limit=(($TxCurSet/4) . "/" . ($RxCurSet/4)) priority=7 burst-limit=(($TxCurSet/2) . "/" . ($RxCurSet/2)) burst-threshold=(($TxCurSet/16) . "/" . ($RxCurSet/16)) burst-time=5s/10s packet-marks=all-mark
# parent=none
}
#/queue simple set limit-at=250000/500000
#/queue simple set limit-at=60000/125000
#上面两个条件运行其中的一个后下面不会起作用,因为已没了priority=8的队列,
#下面的只是在上面两条件都没成立时,为新上线用户加入到统一队列中来。
/queue simple set max-limit=($TxCurSet . "/" . $RxCurSet) priority=6 burst-limit=(($TxCurSet*2) . "/" . ($RxCurSet*2)) burst-threshold=(($TxCurSet/4) . "/" . ($RxCurSet/4)) burst-time=5s/10s packet-marks=all-mark
/queue simple set max-limit=(($TxCurSet/4) . "/" . ($RxCurSet/4)) priority=7 burst-limit=(($TxCurSet/2) . "/" . ($RxCurSet/2)) burst-threshold=(($TxCurSet/16) . "/" . ($RxCurSet/16)) burst-time=5s/10s packet-marks=all-mark
####### 此脚本我设定为一分钟运行一次。总流量一直在30M到38M间运行。开网页很好。 完#####################
###记得速率参数大少顺序:burst-limit>max-limit>limit-at>burst-threshold 大小反了程序无法运行 ###
########上边有个packet-marks=all-mark这个标记是这样做的: 不能发图,没办法,大家自己去想吧,反正把外网标出来,内网不标记就行了。我做的PPPOE用户是动态速率,如果不用动态速率,那只做标记就行了,只要一条命令就可。 ########上边有个packet-marks=all-mark这个标记是这样做的:
/ip firewall address-list
add address=128.0.0.1/1 list=All-WAN
add address=64.0.0.1/2 list=All-WAN
add address=32.0.0.1/3 list=All-WAN
add address=16.0.0.0/4 list=All-WAN
###看到没,我的内网IP不在其中(10.200.0.0/16是我的IP段)
/ip firewall mangle
addchain=prerouting in-interface=(你的内网卡不中,要用接外网的网卡,为什么不行自己想) src-address-list=All-WAN action=mark-packet new-packet-mark=all-mark passthrough=yes
addchain=prerouting src-address=10.200.0.0/16(内网IP段,用来限上传速率) action=mark-packet new-packet-mark=all-mark passthrough=yes 各人网络结构不同,理念是一样的,适当改哈!!我的ROS三网卡,两个内网段10.200.0.0/16 10.0.50.0/8
页:
[1]