自由的生活_软365bet网上平台_365bet官网娱_365bet滚球投注论坛

?找回密码
?日博.com

QQ登录

只需一步,快速开始

搜索
查看: 4299|回复: 9
打印 上一主题 下一主题

[脚本] 切换用户规则

[复制链接]
跳转到指定楼层
1#
发表于 2018-8-19 12:44:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?日博.com

x
以下是经测试可以在6.X版本上使用的脚本,分享出来,有高手能把两个脚本合二为一就更好。

:global telstatus1
:global telstatus2
:delay 16;
:set telstatus1 [/interface get [/interface find name="tel-1"] running]
:set telstatus2 [/interface get [/interface find name="tel-2"] running]
:if (($telstatus1=false) && ($telstatus2=false)) do={
/ppp secret;
:foreach tepuse in=[find disabled=no comment="tel"] do={
:local tenam [get $tepuse name];
:local tezprof [get $tepuse profile];
:local tei "2"
:for teii from=1 to=$tei do={
:if ($tezprof=("adsl".$teii)) do={
/ppp secret set [/ppp secret find name=$tenam] profile=("ADSL".$teii);
/ppp active remove [/ppp active find name=$tenam]}
:if ($tezprof=("vip".$teii)) do={
/ppp secret set [/ppp secret find name=$tenam] profile=("VIP".$teii);
/ppp active remove [/ppp active find name=$tenam]}
? ?? ? }
? ???}
? ?}
}



第二个脚本

{
:local telpx "0"
:set telpx [:len [/interface pppoe-client find running=yes (name~"uni")=no]]
:if ($telpx>1) do={
/ppp secret;
:foreach tepuse in=[find disabled=no comment="tel"] do={
:local tenam [get $tepuse name];
:local tezprof [get $tepuse profile];
:local tei "2"
:for teii from=1 to=$tei do={
:if ($tezprof=("ADSL".$teii)) do={
/ppp secret set [/ppp secret find name=$tenam] profile=("adsl".$teii);
/ppp active remove [/ppp active find name=$tenam]}
:if ($tezprof=("VIP".$teii)) do={
/ppp secret set [/ppp secret find name=$tenam] profile=("vip".$teii);
/ppp active remove [/ppp active find name=$tenam]}
? ?? ? }
? ???}
? ?}
}




routeros
2#
发表于 2018-8-19 17:57:05 | 只看该作者
干什么用的 ?
routeros
3#
?楼主| 发表于 2018-8-19 19:33:13 | 只看该作者
两条电信线路全部断线,将用户切换到联通线路,当电信线路有一半以上恢复的时候,在把电信用户从联通切换回来。
routeros
4#
发表于 2018-8-19 23:18:50 | 只看该作者
本帖最后由 cspm333 于 2018-8-19 23:49 编辑

您script写的太复杂了,有部份是router自带的能力,不需要全靠script安排.

在/ppp profile新增tel-profile设定档,将tel-1与tel-2拨号都指定tel- profile.

tel-profile里的script页签可设定脚本,
on-up是拨号成要执行的;on-down是离线时执行的.所以只要:

on-up:
/interface pppoe-c disable [find name~"uni" disabled=no]

on-down:
:if ([:len [/interface pppoe-c find name~"tel" running=yes]]=0) do={/interface pppoe-c enable [find name~"uni" disabled=yes]}

说明:
两个电信套上tel-profile ,会去run on-up即代表至少目前这笔电信的pppoe拨号是成功的.
所以这时的script就只有一个目的,将未关闭的联通给关闭.

当tel-profile run on-down时,即代表目前的pppoe转成离线...
所以script要先计数电信是否还有在线上的,若记数的结果为0 ,则将关闭中的联通全给启用.

点评

赞,本来也想回复类似内容,但没楼上说得明白? 发表于 2018-8-19 23:29
routeros
5#
?楼主| 发表于 2018-8-20 20:34:54 | 只看该作者
本帖最后由 e_zhangiso 于 2018-8-20 21:15 编辑
cspm333 发表于 2018-8-19 23:18
您script写的太复杂了,有部份是router自带的能力,不需要全靠script安排.

在/ppp profile新增tel-profile ...

感谢大神回复,我的这种情况比较特殊,内部用户分为电信用户和联通用户,分别进行标记365bet网上平台_365bet官网娱_365bet滚球投注,平时线路正常的情况下只允许电信走电信,联通走联通,二者收费不同,只有在极端情况下,例如电信全部断线,才让电信用户走联通双线进行负载,所以通过切换出口进行线路转换行不通,况且新版ROS也能够不需要脚本自动切换默认365bet网上平台_365bet官网娱_365bet滚球投注,所以我是通过切换用户规则,指定用户走相应的线路,电信双线和联通双线分别进行PCC负载均衡。
routeros
6#
发表于 2018-8-20 20:39:14 | 只看该作者
完全不需要用脚本的
routeros
7#
发表于 2018-8-23 03:04:30 | 只看该作者
本帖最后由 cspm333 于 2018-8-23 10:24 编辑
e_zhangiso 发表於 2018-8-20 20:34
感谢大神回覆,我的这种情况比较特殊,内部用户分为电信用户和联通用户,分别进行标记365bet网上平台_365bet官网娱_365bet滚球投注,平时线路正常 ...
#负载标记script:
:local connected [/interface pppoe-c find running=yes]
:local notyet [/interface pppoe-c find running=no]

:local pppoe
:foreach i in=$connected do={:set pppoe "$pppoe,$i"}
:foreach i in=$notyet do={:set pppoe "$pppoe,$i"}
:set pppoe [:toarray [:pick $pppoe 1 [:len $pppoe]]]

:foreach v,i in=[/ip firewall mangle find action=mark-routing] do={
? ?:local nrm "to_$[/interface pppoe-c get [:pick $pppoe $v] name]"
? ?:if (($v+1)<=[:len $connected]) do={
? ?? ?? ? /ip firewall mangle set $i disabled=no??new-routing-mark=$nrm \
? ?? ?? ?? ? per-connection-classifier="src-port:$[:len $connected]/$v"
? ?? ?} else={
? ?? ?? ? /ip firewall mangle set $i disabled=yes new-routing-mark=$nrm !per-connection-classifier
? ?? ?}
}

routeros
8#
?楼主| 发表于 2018-8-23 12:18:40 | 只看该作者
cspm333 发表于 2018-8-23 03:04
#负载标记script:
:local connected [/interface pppoe-c find running=yes]
:local notyet [/interface pp ...

感谢指导,脚本加上注释才好,有些地方真心看不明。
routeros
9#
发表于 2018-8-23 14:25:30 | 只看该作者
本帖最后由 cspm333 于 2018-8-23 21:49 编辑
e_zhangiso 发表於 2018-8-23 12:18
感谢指导,脚本加上注释才好,有些地方真心看不明。

第1段落: 分别搜寻已连线与未连线的pppoe
第2段落: 将已连线 与未连线的id再合并并入pppoe变数.已连线在前,未连线的在後.

第3段落:
回圈开始,因变数pppoe已将连线的id排在前,未连线的id排在後
所以计数($v+1) 注:回圈计数是从0开始,所以需用$v+1来辨识
<=已连线的量,设定PCC参数并启用;

当计数($v+1)>已连线的量时,则代表回圈进入未连线的id...关闭并取消PCC.

若还看不懂计数$v与foreach的关系,阅读下图一定能明白:

routeros
您需要登录后才可以回帖 登录 | 日博.com

本版积分规则

QQ|小黑屋|手机版|Archiver|软365bet网上平台_365bet官网娱_365bet滚球投注论坛 ( 渝ICP备15001194号-1,渝公网安备 50011602500124号 )

GMT+8, 2019-10-6 06:20 , Processed in 0.214831 second(s), 28 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

? 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表